Threejs中的材质贴图

喜你入骨 提交于 2020-02-24 02:56:48

最近项目需要折腾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前端开发、喜欢阅读

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

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

支付宝

微信

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!