zoukankan      html  css  js  c++  java
  • Threejs中的材质贴图

    最近项目需要折腾three.js,有关three.js几点说明

    1.作用 threejs适合创建简单的模型视图

    2.对于复杂的模型图(如:室内模型图)需要美术3D制作,前端导成特定格式文件(如*.mtl/*.obj 格式文件 ),

    之后利用threejs插件MTLLoader.js/OBJLoader.js导入数据即可

    基础案例 https://github.com/AragornZJF/ThreeExample.js Chapter7.3.2

    或者游戏案例  http://www.w3cmark.com/2016/threejs-mark-02.html

      1 <!DOCTYPE html>
      2 <html>
      3     <head>
      4         <meta charset="UTF-8">
      5         <title>材质</title>
      6         <style>
      7             #canvas-frame {
      8                 width: 100%;
      9                 height: 600px;
     10             }
     11         </style>
     12     </head>
     13     <body onload="threeStart()">
     14         <div id="canvas-frame" ></div>
     15     </body>
     16     <script type="text/javascript" src="js/three.js"></script> 
     17     <script type="text/javascript">
     18             
     19             var renderer, //渲染器
     20                 width = document.getElementById('canvas-frame').clientWidth, //画布宽
     21                 height = document.getElementById('canvas-frame').clientHeight; //画布高
     22             //初始化渲染器
     23             function initThree(){
     24                 renderer = new THREE.WebGLRenderer({
     25                      antialias : true
     26                      //canvas: document.getElementById('canvas-frame')
     27                 });
     28                 renderer.setSize(width, height);
     29                 renderer.setClearColor(0xFFFFFF, 1.0);
     30                 document.getElementById('canvas-frame').appendChild(renderer.domElement);
     31                 renderer.setClearColor(0xFFFFFF, 1.0);
     32             }
     33             //初始化场景
     34             var scene;
     35             function initScene(){
     36                 scene = new THREE.Scene();
     37             }
     38             var camera;
     39             function initCamera() {  //透视相机
     40                 camera = new THREE.PerspectiveCamera(45,  width/height , 1, 10000);
     41                 camera.position.x = 450;
     42                 camera.position.y = 100;
     43                 camera.position.z = 700;
     44                 camera.up.x = 0;
     45                 camera.up.y = 1; //相机朝向--相机上方为y轴
     46                 camera.up.z = 0;
     47                 camera.lookAt({  //相机的中心点
     48                     x : 0,
     49                     y : 0,
     50                     z : 0
     51                 });
     52             }
     53             
     54             function initLight(){
     55                 // light--这里使用环境光
     56                 //var light = new THREE.DirectionalLight(0xffffff); /*方向性光源*/
     57                 //light.position.set(600, 1000, 800);
     58                 var light = new THREE.AmbientLight(0xffffff); //模拟漫反射光源
     59                 light.position.set(600, 1000, 800); //使用Ambient Light时可以忽略方向和角度,只考虑光源的位置
     60                 scene.add(light);
     61             }
     62             function initObject(){  //初始化对象
     63                  //导入材质
     64                 var texture = THREE.ImageUtils.loadTexture('img/floor.jpg', {}, function() {
     65                     renderer.render(scene, camera);
     66                 });
     67                 /**
     68                  * 关于material材料注意点说明 
     69                  * MeshBasicMaterial:对光照无感,给几何体一种简单的颜色或显示线框。
     70                  * MeshLambertMaterial:这种材质对光照有反应,用于创建暗淡的不发光的物体。
     71                  * MeshPhongMaterial:这种材质对光照也有反应,用于创建金属类明亮的物体。
     72                  */
     73                 var material = new THREE.MeshLambertMaterial({
     74                     map: texture
     75                 });
     76                 
     77                 //创建一个立方体
     78                 var geometry = new THREE.BoxGeometry(600, 25, 1000);
     79                 //将material材料添加到几何体geometry
     80                 var mesh = new THREE.Mesh(geometry, material);
     81                 scene.add(mesh);
     82             }
     83             function initGrid(){ //辅助网格
     84                 var helper = new THREE.GridHelper( 1000, 50 );
     85                 helper.setColors( 0x0000ff, 0x808080 );
     86                 scene.add( helper );
     87             }
     88             function threeStart(){
     89                 //初始化渲染器
     90                 initThree();
     91                 //初始化场景
     92                 initScene();
     93                 //初始透视化相机
     94                 initCamera();
     95                 //初始化光源
     96                 initLight();
     97                 //模型对象
     98                 initObject();
     99                 //初始化网格辅助线
    100                 initGrid();
    101                 //渲染成像
    102                 renderer.render(scene, camera);
    103             }
    104             
    105     </script>
    106 </html>

     效果图

    作者:Avenstar

    出处:http://www.cnblogs.com/zjf-1992/p/6130614.html

    关于作者:专注于WEB前端开发、喜欢阅读

    本文版权归作者所有,转载请标明原文链接。

    如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我不断的迭代!

    支付宝

    微信

  • 相关阅读:
    【SSH 基金会】SSH框架--struts进一步的详细解释(两)
    Java多线程的~~~synchronized加入参数,以实现独立片段
    m_Orchestrate learning system---二十八、字體圖標iconfont到底是什麼
    PhpStorm函数注释的设置
    算法讲课---3、动态规划
    人这一生为什么要努力(转自知乎)
    揭开A*算法的神秘面纱
    依赖注入那些事儿
    游戏编程十年总结(下)(转)
    游戏编程十年总结(上)(转)
  • 原文地址:https://www.cnblogs.com/zjf-1992/p/6130614.html
Copyright © 2011-2022 走看看