zoukankan      html  css  js  c++  java
  • Three.js学习笔记01

    1.四大组件:

    场景:场景是所有物体的容器

    var scene = new THREE.Scene();

    相机

    正投影相机:远处的和近处的是一样大

    THREE.OrthographicCamera = function ( left, right, top, bottom, near, far)

    1、 left参数

    left:左平面距离相机中心点的垂直距离。从图中可以看出,左平面是屏幕里面的那个平面。

    2、 right参数

    right:右平面距离相机中心点的垂直距离。从图中可以看出,右平面是屏幕稍微外面一点的那个平面。

    3、 top参数

    top:顶平面距离相机中心点的垂直距离。上图中的顶平面,是长方体头朝天的平面。

    4、 bottom参数

    bottom:底平面距离相机中心点的垂直距离。底平面是头朝地的平面。

    5、near参数

    near:近平面距离相机中心点的垂直距离。近平面是左边竖着的那个平面。

    6、far参数

    far:远平面距离相机中心点的垂直距离。远平面是右边竖着的那个平面。

    有了这些参数和相机中心点,我们这里将相机的中心点又定义为相机的位置。通过这些参数,我们就能够在三维空间中唯一的确定上图的一个长方体。这个长方体也叫做视景体。

    投影变换的目的就是定义一个视景体,使得视景体外多余的部分裁剪掉,最终图像只是视景体内的有关部分。

    举个例子:

    var camera = new THREE.OrthographicCamera( width / - 2, width / 2, height / 2, height / - 2, 1, 1000 );

    scene.add( camera );

    这个例子将浏览器窗口的宽度和高度作为了视景体的高度和宽度,相机正好在窗口的中心点上。这也是我们一般的设置方法,基本上为了方便,我们不会设置其他的值。

    透视相机:离视点近的物体大,离视点远的物体小,远到极点即为消失,成为灭点。

    PerspectiveCamera( fov, aspect, near, far )

    1、视角fov:这个最难理解,我的理解是,眼睛睁开的角度,即,视角的大小,如果设置为0,相当你闭上眼睛了,所以什么也看不到,如果为180,那么可以认为你的视界很广阔,但是在180度的时候,往往物体很小,因为他在你的整个可视区域中的比例变小了。

    2、近平面near:这个呢,表示你近处的裁面的距离。补充一下,也可以认为是眼睛距离近处的距离,假设为10米远,请不要设置为负值,Three.js就傻了,不知道怎么算了,

    3、远平面far:这个呢,表示你远处的裁面,

    4、纵横比aspect:实际窗口的纵横比,即宽度除以高度。这个值越大,说明你宽度越大,那么你可能看的是宽银幕电影了

    var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000);

     渲染器:渲染器决定了渲染的结果应该画在页面的什么元素上面,并且以怎样的方式来绘制

    var renderer = new THREE.WebGLRenderer();
    renderer.setSize(window.innerWidth, window.innerHeight);
    document.body.appendChild(renderer.domElement);

    渲染器renderer的domElement元素,表示渲染器中的画布,所有的渲染都是画在domElement上的,所以这里的appendChild表示将这个domElement挂接在body下面,这样渲染的结果就能够在页面中显示了。

    物体

    将物体添加到场景中

    var geometry = new THREE.CubeGeometry(1,1,1); 
    var material = new THREE.MeshBasicMaterial({color: 0x00ff00});
    var cube = new THREE.Mesh(geometry, material); 
    scene.add(cube);

    2.渲染:

    renderer.render(scene, camera);

    渲染循环

    实时渲染:就是需要不停的对画面进行渲染,即使画面中什么也没有改变,也需要重新渲染。下面就是一个渲染循环:

    function render() {
        cube.rotation.x += 0.1;
        cube.rotation.y += 0.1;
        renderer.render(scene, camera);
        requestAnimationFrame(render);
    }

    其中一个重要的函数是requestAnimationFrame,这个函数就是让浏览器去执行一次参数中的函数,这样通过上面render中调用requestAnimationFrame()函数,requestAnimationFrame()函数又让rander()再执行一次,就形成了我们通常所说的游戏循环了。

    3.在Threejs中定义一个点

    在三维空间中的某一个点可以用一个坐标点来表示。一个坐标点由x,y,z三个分量构成。在three.js中,点可以在右手坐标系中表示:

    空间几何中,点可以用一个向量来表示,在Three.js中也是用一个向量来表示。

    定义:var point1 = new THREE.Vecotr3(4,8,9);

    set方法:var point1 = new THREE.Vector3();

                    point1.set(4,8,9);

    5.画一条彩色线

    1、首先,我们声明了一个几何体geometry,如下:

    var geometry = new THREE.Geometry();

    几何体里面有一个vertices变量,可以用来存放点。

    2、定义一种线条的材质,使用THREE.LineBasicMaterial类型来定义,它接受一个集合作为参数,其原型如下:

    LineBasicMaterial( parameters )

    Parameters是一个定义材质外观的对象,它包含多个属性来定义材质,这些属性是:

    Color:线条的颜色,用16进制来表示,默认的颜色是白色。

    Linewidth:线条的宽度,默认时候1个单位宽度。

    Linecap:线条两端的外观,默认是圆角端点,当线条较粗的时候才看得出效果,如果线条很细,那么你几乎看不出效果了。

    Linejoin:两个线条的连接点处的外观,默认是“round”,表示圆角。

    VertexColors:定义线条材质是否使用顶点颜色,这是一个boolean值。意思是,线条各部分的颜色会根据顶点的颜色来进行插值。

    Fog:定义材质的颜色是否受全局雾效的影响。

    这里使用了顶点颜色vertexColors: THREE.VertexColors,就是线条的颜色会根据顶点来计算。

    var material = new THREE.LineBasicMaterial( { vertexColors: THREE.VertexColors } );

    3、接下来,定义两种颜色,分别表示线条两个端点的颜色,如下所示:

    var color1 = new THREE.Color( 0x444444 ),

    var color2 = new THREE.Color( 0xFF0000 );

    4、定义2个顶点的位置,并放到geometry中,代码如下: 

    var p1 = new THREE.Vector3( -100, 0, 100 );

    var p2 = new THREE.Vector3( 100, 0, -100 );

    geometry.vertices.push(p1);

    geometry.vertices.push(p2);

    5、为4中定义的2个顶点,设置不同的颜色,代码如下所示:

    geometry.colors.push( color1, color2 );

    geometry中colors表示顶点的颜色,必须材质中vertexColors等于THREE.VertexColors 时,颜色才有效,如果vertexColors等于THREE.NoColors时,颜色就没有效果了。那么就会去取材质中color的值。

    6、定义一条线 

    定义线条,使用THREE.Line类,代码如下所示:

    var line = new THREE.Line( geometry, material, THREE.LinePieces );

    第一个参数是几何体geometry,里面包含了2个顶点和顶点的颜色。第二个参数是线条的材质,或者是线条的属性,表示线条以哪种方式取色。第三个参数是一组点的连接方式。

    然后,将这条线加入到场景中,代码如下:

    scene.add(line);

    效果如下:

    参考WebGL中文网

  • 相关阅读:
    Android Button的四种点击事件
    Android中StateListDrawable的种类(状态的种类)
    Android中StateListDrawable的种类(状态的种类)
    信息系统项目管理师 高级 初始 寻挂靠
    lib 和 dll 的区别、生成以及使用详解
    如何为WPF添加Main()函数 程序入口点的修改
    pragma pack(非常有用的字节对齐用法说明)
    MFC DestroyWindow窗口对象和窗口句柄的销毁
    VS2008生成的程序无法在其它电脑上运行,提示系统无法执行指定的程序
    MFC修改任务栏图标及程序运行exe图标
  • 原文地址:https://www.cnblogs.com/yhhzxcvbnm/p/8244780.html
Copyright © 2011-2022 走看看