纳金网

标题: 利用HTML5构筑物理模拟环境2.23 [打印本页]

作者: 奔跑的小兔    时间: 2012-8-17 15:07
标题: 利用HTML5构筑物理模拟环境2.23
3.声明场景
场景就是一个三维空间。 用 [Scene] 类声明一个叫 [scene] 的对象。
var scene;

function initScene() {

  scene = new THREE.Scene();

}4.设置光源并追加到场景

OpenGL(WebGL)的三维空间中,存在点光源和聚光灯两种类型。 而且,作为点光源的一种特例还存在平行光源(无线远光源)。另外,作为光源的参数还可以进行 [环境光] 等设置。 作为对应, Three.js中可以设置 [点光源(Point Light)] [聚光灯(Spot Light)] [平行光源(Direction Light)],和 [环境光(Ambient Light)]。 和OpenGL一样、在一个场景中可以设置多个光源。 基本上,都是环境光和其他几种光源进行组合。 如果不设置环境光,那么光线照射不到的面会变得过于黑暗。 本文中首先按照下面的步骤设置平行光源,在这之后还会追加环境光。

(0) 声明全局变量(对象)

(1) 设置平行光源

(2) 设置光源向量

(3) 追加光源到场景
var light;                                                //(0)

function initLight() {

  light = new THREE.DirectionalLight(0xFF0000, 1.0, 0);   //(1)

  light.position.set( 100, 100, 200 );                    //(2)

  scene.add(light);                                       //(3)

}用「DirectionalLight」类声明一个叫 [light] 的对象来代表平行光源,之后在构造函数中进行属性设置
var light = new THREE.DirectionalLight( hex, intensity)「hex」是用来以16进制指定光源的颜色。默认是白色「0xFFFFFF」。 「intensity」是光源的强度。默认为1。 另外,还需要通过对象的属性来设置平行光源的方向。
light.position.set( x, y, z );光源方向向量是从通过[set()]方法指定的点(x, y, z)开始到 点(0, 0, 0) 的方向,和向量的大小没有关系。 和相机的位置坐标设置一样,直接修改「position.x, position.y, position.z」属性也可以。 最后通过 [add] 方法追加光源到场景中去。
动作确认

请试着修改(1),(2)来明确平行光源的方向以及光线的颜色设置原理。
※注意:三维世界中物体的颜色不只是由光源的颜色来决定,而且还和物体本身的颜色有关。 之后会再次说明, 因为这个立方体的颜色为红色(0xFF0000),光源中即使存在绿色或者蓝色,立方体看起来的颜色也不会改变。也就是说, 就这个立方体来说,光源的颜色不论是「0xFFFF00」还是「0xFF0000」看起来颜色都没有变化。
其他光源

var light = new THREE.AmbientLight( hex );                               //(1)環境光源

var light = new THREE.PointLight( hex, intensity, distance );            //(2)点光源

var light = new THREE.SpotLight( hex, intensity, distance, castShadow ); //(3)スポットライト光源5.声明立方体并追加到场景

终于要向三维空间中追加物体了。
var cube;                                            //(0)

function initObject(){

  cube = new THREE.Mesh(                             //(1)

    new THREE.CubeGeometry(50,50,50),                //(2)

    new THREE.MeshLambertMaterial({color: 0xff0000}) //(3)

  );

  scene.add(cube);                                   //(4)

  cube.position.set(0,0,0);                          //(5)

}(1) 声明 [Mesh] 类的对象 [cube]。 设置构造函数的第一个参数「形状对象(geometory)」、第二个参数[材质对象(material)]。 第一参数中设置的代表立方体的形状对象,通过「CubeGeometry」类可以创建。
var geometry = THREE.CubeGeometry ( width, height, depth, segmentsWidth, segmentsHeight, segmentsDepth, materials, sides );构造函数中的「width」「height」「depth」代表立方体的宽高及深度,其他的参数可以省略。 第二个参数中代入的材质对象, 本文中使用的是反射来自光源的光线的材质 「MeshLambertMaterial」类创建的对象。
var geometry = THREE.MeshLambertMaterial( parameters );构造函数中的参数是联想队列。 本例中、物体的颜色指定为「color: 0xff0000」。另外,通过联想队列参数还可以指定环境光的颜色。关于这些之后我们再介绍。 通过步骤(4),(5)追加立方体到场景,并指定位置坐标。
动作确认

请试着修改(2),(3),(5)来明确怎么设置立方体的大小, 颜色和位置。
其他形状类

THREE.CubeGeometry ( width, height, depth, segmentsWidth, segmentsHeight, segmentsDepth, materials, sides );//立方体

THREE.CylinderGeometry ( radiusTop, radiusBottom, height, segmentsRadius, segmentsHeight, openEnded );//円錐型

THREE.OctahedronGeometry ( radius, detail ) //八面体

THREE.PlaneGeometry ( width, height, segmentsWidth, segmentsHeight ); //平面型

THREE.SphereGeometry ( radius, segmentsWidth, segmentsHeight, phiStart, phiLength, thetaStart, thetaLength );//球型

THREE.T***sGeometry ( radius, tube, segmentsR, segmentsT, arc )//トーラス型




欢迎光临 纳金网 (http://go.narkii.com/club/) Powered by Discuz! X2.5