当前位置: 首页 > news >正文

[译]pt.2 几何体 Geometry

原文链接


在上一个post中,我们浏览了一下如何使用相机和一些光来建立一个Three.js场景。下一步,就是在这个场景里添加一些对象。

了解一点儿3D建模名词会帮助我们能够更加方便的添加一个3D模型到一个WebGL场景中。

3D模型(或网格mesh)由顶点(vertice)、边(edge)和面(face)组成。


顶点(vertex):三边的交点。

边缘(edge):两个面相交的边。

(face):组成模型的面的多边形。



所有的3D模型(也称为网格)都可以分解成这些小三角形。你可以通过制定所有顶点的位置构造自己的几何模型,但是Three.js的伟大之处在于,它会为你创建原始形状提供一堆方法。


边注:在本次教程中的例子,我将使用网格材质。我故意不处理材质(material)的部分,是因为我想要保持本篇文章的重点在几何体上。但是我们未来会涉及到材质(material)。


让我们来看看如何在一个3D场景里添加一些几何体。

THE CODE TO CREATE A CUBE

// create some geometry - this is how you create some square 
// geometry using the BoxGeometry method
var geometry = new THREE.BoxGeometry( 20, 20, 20);
// create a material
var material = new THREE.MeshNormalMaterial();
// add the geometry to the mesh - and apply the material to it
var cube = new THREE.Mesh( geometry, material );
scene.add( cube );
复制代码

THE RESULT

正如你所看到的,通过使用scene.add(cube),它会把我们制作的网格放在我们场景的坐标为(0,0,0)的位置上。正如我们的相机和光,我们可以更新立方体的位置。我们也可以使我们想在这里创建的立方体旋转起来,当它像上图这样展示的时候,我们甚至无法辨别它是个立方体。

POSITION AND ROTATE THE MESH

// rotate cube
cube.rotation.x = 0.45;
cube.rotation.y = -0.25;

// shift cube on the x axis
cube.position.x = -30;
复制代码



现在它看起来像个立方体了。比起之前普通的立方体,Three.js会给你更多的操作。你甚至可以做一个非常酷的二十面体:



需要记住,立方体、二十面体或别的使用Three.js geometry方法创建的对象,他们都是同一个东西——几何体——他们都只是在不同位置上有不同数量的顶点。


MODIFYING GEOMETRY VERTICES

所以three.js可以帮你创建一个类似立方体的几何体,但是它无法保持这个你想用任何你喜欢的方式更改的立方体
。几何体对象有一个属性叫顶点集(原文是vertices,顶点是vertex,vertices是vertex的复数形式),它包含了代表每个顶点(vertex)的对象的数组。你可以修改这些顶点的位置,甚至从顶点数组中添加或移除它们。

// update cube vertices
for (var i = 0, l = geometry.vertices.length; i<l; i++) {
    // we'll move the x & y position of each vertice by a random amount
  geometry.vertices[i].x += -10 + Math.random()*20;
  geometry.vertices[i].y += -10 + Math.random()*20;
}
复制代码

最后的结果是一个(随机)摇晃的立方体状物体。

现在,知道了你可以对原始几何体有这样的微调控制后,你就可以构造你想要的东西了!

这里有一些我非常喜欢的例子,它们都是CodePen的朋友们结合运用了Three.js后做出来的很棒的东西:


现在我们把几何学引入场景。你可以做的最好的事情就是开始尝试实现不同的形状。

说真的,去试试看。去创建一个场景,尝试去添加几个不同的网格,并改变他们的位置和旋转。打乱他们的顶点,从中去获得乐趣!如果你不想写JavaScript,相反只是想看看Three.js的几何,可以查看Three.js编辑器,它真的是个非常棒的资源,因为你可以直接通过图形界面向场景中添加几何体。

你甚至可以从3D程序中获取更多复杂的几何体,并且把他们添加到你的Three.js场景中。这些我会解释如何去操作,但是我想以后找一天会把它当作一个post来说的。

我真心的希望诸君在这个系列的未来的post里加入我,我们可以在这里给那些对象们披上材质、实现用户输入、3D适量数学、相机工作、粒子、着色器,甚至是更多!如果你有任何的问题、或指正、或是任何的建议,我也一如既往的喜欢您在文章下方的评论。





转载于:https://juejin.im/post/5aa0a5105188255570058ff9

相关文章:

  • WiFi万能钥匙蹭网原理详细剖析
  • V8 的 Error 对象与栈追踪的妙用
  • VR直播很火,但能取代传统电视直播吗?
  • Hibernate最全面试题
  • Python_网络编程
  • JDK1.7版本中的HashMap
  • 数字图像处理---直方图均衡化
  • Chef在InSpec 2.0增强了云安全的自动化功能
  • Kafka源码分析Consumer
  • cad提供的坐标转换
  • Java锁--Semaphore
  • Win8 Metro(C#)数字图像处理--2.43图像马赛克效果算法
  • PowerDesigner 概念数据模型(CDM)
  • [Contest20180313]灵大会议
  • Windows Developer Day - Adaptive Cards
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • Hexo+码云+git快速搭建免费的静态Blog
  • interface和setter,getter
  • Java 内存分配及垃圾回收机制初探
  • JavaScript函数式编程(一)
  • JavaWeb(学习笔记二)
  • Java面向对象及其三大特征
  • Laravel核心解读--Facades
  • miaov-React 最佳入门
  • mockjs让前端开发独立于后端
  • MQ框架的比较
  • Node 版本管理
  • rabbitmq延迟消息示例
  • socket.io+express实现聊天室的思考(三)
  • SwizzleMethod 黑魔法
  • Vue UI框架库开发介绍
  • Vue小说阅读器(仿追书神器)
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 飞驰在Mesos的涡轮引擎上
  • 设计模式 开闭原则
  • 使用 QuickBI 搭建酷炫可视化分析
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • Spring Batch JSON 支持
  • ​如何在iOS手机上查看应用日志
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (八)c52学习之旅-中断实验
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (汇总)os模块以及shutil模块对文件的操作
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (十)T检验-第一部分
  • (四)Android布局类型(线性布局LinearLayout)
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)程序员技术练级攻略
  • *上位机的定义
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息