canvas教程

ThreeJS学习之旅(三)

字号+ 作者:H5之家 来源:H5之家 2017-12-20 12:08 我要评论( )

这一篇主要学习代码重构的方法以及ThreeJS中的一些对象属性的介绍和使用:官方代码解析:Three框架div#canvas-frame {border: none;cursor: pointer;width: 100%

ThreeJS学习之旅(三)

原创 2017年02月19日 17:02:22

  • 标签:
  • 639
  • 编辑
  • 删除
  • 这一篇主要学习代码重构的方法以及ThreeJS中的一些对象属性的介绍和使用:

    官方代码解析:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Three框架</title>
    <script src="js/Three.js" data-ke-src="js/Three.js"></script>
    <style type="text/css">
    div#canvas-frame {
    border: none;
    cursor: pointer;
    width: 100%;
    height: 600px;
    background-color: #EEEEEE;
    }


    </style>
    <script>
    var renderer;//定义一个全局变量renderer(渲染)
    //初始化渲染对象
    function initThree() {
    //获取画布的宽高
    width = document.getElementById('canvas-frame').clientWidth;
    height = document.getElementById('canvas-frame').clientHeight;
    //生成渲染对象(属性:抗锯齿效果为设置有效)
    renderer = new THREE.WebGLRenderer({
    antialias : true
    });
    //指定渲染器的宽高(和画布框大小一致)
    renderer.setSize(width, height);
    //将创建的canvas元素(此处的canvas元素为three.js创建)添加到html文档中
    document.getElementById('canvas-frame').appendChild(renderer.domElement);
    //设置渲染器的清除色(设置canvas背景色(clearColor)和背景色透明度(clearAlpha) )
    renderer.setClearColor(0xFFFFFF, 1.0);
    }

    //设置相机
    var camera;//定义一个全局变量的camera
    //初始化相机设置
    function initCamera() {
    camera = new THREE.PerspectiveCamera(45, width / height, 1, 10000);//此处为设置透视投影的相机,默认情况下,相机的上方向为Y轴,右方向为X轴,沿着Z轴垂直朝里(视眼角:fov;纵横比:aspect;相机离视最近的距离:near;相机离视体积最远距离:far)
    //设置相机的位置坐标
    camera.position.x = 0;
    camera.position.y = 1000;
    camera.position.z = 0;
    //设置相机的上为z轴方向
    camera.up.x = 0;
    camera.up.y = 0;
    camera.up.z = 1;
    //设置视野的中心坐标
    camera.lookAt({
    x : 0,
    y : 0,
    z : 0
    });
    }


    //设置场景
    var scene;//定义全局变量scene(场景:一个三维空间)


    //场景初始化设置
    function initScene() {
    scene = new THREE.Scene();
    }


    //设置光源
    var light;//声明全局变量


    //初始化光源设置
    function initLight() {
    light = new THREE.DirectionalLight(0xFF0000, 1.0, 0);//设置平行光(颜色,强度,方向),需设置position,从(0,0,0)到这个position的向量即是平行光的方向。
    light.position.set(100, 100, 200);//光源的向量,即光源的位置
    scene.add(light);//追加光源到场景
    }


    //设置物体对象
    var cube;//定义全局变量cube
    //初始化对象设置
    function initObject() {
    //实例化对象
    var geometry = new THREE.Geometry();
    //材质
    var material = new THREE.LineBasicMaterial( { vertexColors: THREE.VertexColors} );
    //颜色
    var color1 = new THREE.Color( 0x444444 ), color2 = new THREE.Color( 0xFF0000 );


    // 线的材质可以由2点的颜色决定
    var p1 = new THREE.Vector3( -100, 0, 100 );
    var p2 = new THREE.Vector3( 100, 0, -100 );
    geometry.vertices.push(p1);
    geometry.vertices.push(p2);
    geometry.colors.push( color1, color2 );
    //绘制一条线
    var line = new THREE.Line( geometry, material, THREE.LinePieces );
    scene.add(line);
    }
    //定义渲染
    function render()
    {
    renderer.clear();
    renderer.render(scene, camera);
    requestAnimationFrame(render);
    }


    //主执行函数
    function threeStart() {
    initThree();
    initCamera();
    initScene();
    initLight();
    initObject();
    render();
    }


    </script>
    </head>


    <body>
    <div></div>
    </body>
    </html>

    three.js的一些基本知识总结

    three.js文档中渲染器的分支:
    CanvasRenderer
    DOMRenderer
    SVGRenderer
    WebGLRenderer
    WebGLRendererTarget
    WebGLRendererTargetCube
    WebGLShaders

    渲染器参数的介绍:
    renderer = new THREE.WebGLRenderer({
    antialias:true,// true/false表示是否开启反锯齿
    precision:"highp",// highp/mediump/lowp 表示着色精度选择
    alpha:true,// true/false 表示是否可以设置背景色透明
    premultipliedAlpha:false,// true/false 表示是否可以设置像素深度(用来度量图像的分辨率)
    stencil: false ,//false/true 表示是否使用模板字体或图案
    preserveDrawingBuffer:true,// true/false 表示是否保存绘图缓冲
    maxLights:1//最大灯光数
    });

    相机的介绍:

    OpenGL中三维空间中的物体投影到二维空间的方式中存在透视投影和正投影两种相机
    透视投影:从视点开始越近的物体越大、远处的物体绘制的较小的一种方式
    正投影:不管物体和视点的距离,都按统一的大小进行绘制


    光源的介绍:

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • HTML5 Canvas入门学习教程_html5教程技巧-H5教程

      HTML5 Canvas入门学习教程_html5教程技巧-H5教程

      2017-12-20 15:13

    • Android2DGraphics学习(二)、Canvas篇2、Canvas裁剪和Region、

      Android2DGraphics学习(二)、Canvas篇2、Canvas裁剪和Region、

      2017-12-18 18:50

    • canvas学习之钟表

      canvas学习之钟表

      2017-12-12 11:00

    • HTML5学习的价值是什么?

      HTML5学习的价值是什么?

      2017-12-11 12:57

    网友点评