当前位置:   article > 正文

ThreeJS基本坐标设置_threejs修改默认坐标

threejs修改默认坐标

1    绘制基本的场景面板,XY平面绘制网格线,建立起基本的坐标。左右为为X轴,右为正;前后为Y轴,前为正;山下为Z轴,上为正。

2     ThreeJS中的点对象,比如:默认都用 camera.lookAt(scene.position);其实,也可以自己修改: camera.lookAt(new THREE.Vector3(0, 0, 0));

 3     线条绘制:

       var geometryX = new THREE.Geometry();
        geometryX.vertices.push(new THREE.Vector3(-12,0,0),new THREE.Vector3( 12,0,0));
        var materialX = new THREE.LineBasicMaterial({ color: 0xff0000 });
        var lineX = new THREE.Line(geometryX, materialX);   
        scene.add(lineX);

        也可以绘制多条线段,Line:单纯线条;LineLoop:封闭区间;LineSegments:每两个顶点一条线段

4   直接上代码

  1. <html>
  2. <head>
  3. <title>第2个threejs三维场景</title>
  4. <style type="text/css">
  5. body
  6. {
  7. margin: 0;
  8. overflow: hidden; /* 隐藏body窗口区域滚动条 */
  9. }
  10. </style>
  11. <!--引入three.js三维引擎-->
  12. <script type="text/javascript" src="threejsmaster/build/three.js"></script>
  13. <script type="text/javascript" src="threejsmaster/build/js/controls/OrbitControls.js"></script>
  14. <script type="text/javascript" src="threejsmaster/build/js/libs/dat.gui.min.js"></script>
  15. </head>
  16. <body>
  17. <!-- 作为Three.js渲染器输出元素 -->
  18. <div id="WebGLwxp" style="width: 600px; height: 450px;">
  19. </div>
  20. <script type="text/javascript">
  21. //网页加载完毕后会被调用
  22. function init() {
  23. //创建一个场景(场景是一个容器,用于保存、跟踪所要渲染的物体和使用的光源)
  24. var scene = new THREE.Scene();
  25. //创建一个摄像机对象(摄像机决定了能够在场景里看到什么)
  26. var camera = new THREE.PerspectiveCamera(45,
  27. window.innerWidth / window.innerHeight, 0.1, 200);
  28. //设置摄像机的位置,并让其指向场景的中心(0,0,0)
  29. camera.position.set(10.0, -20, 13);
  30. camera.up.set(0, 0, 1);
  31. // camera.lookAt(scene.position);
  32. camera.lookAt(new THREE.Vector3(0, 0, 0));
  33. //线条绘制:
  34. //Line:单纯线条;LineLoop:封闭区间;LineSegments:每两个顶点一条线段
  35. //绘制X坐标
  36. var geometryX = new THREE.Geometry();
  37. geometryX.vertices.push(new THREE.Vector3(-12, 0, 0), new THREE.Vector3(12, 0, 0));
  38. var materialX = new THREE.LineBasicMaterial({ color: 0xff0000 });
  39. var lineX = new THREE.Line(geometryX, materialX);
  40. scene.add(lineX);
  41. //绘制Y坐标
  42. var geometryY = new THREE.Geometry();
  43. geometryY.vertices.push(new THREE.Vector3(0, -12, 0), new THREE.Vector3(0, 12, 0));
  44. var materialY = new THREE.LineBasicMaterial({ color: 0x00ff00 });
  45. var lineY = new THREE.Line(geometryY, materialY);
  46. scene.add(lineY);
  47. //绘制Z坐标
  48. var geometryZ = new THREE.Geometry();
  49. geometryZ.vertices.push(new THREE.Vector3(0, 0, 0), new THREE.Vector3(0, 0, 12));
  50. var materialZ = new THREE.LineBasicMaterial({ color: 0x0000ff });
  51. var lineZ = new THREE.Line(geometryZ, materialZ);
  52. scene.add(lineZ);
  53. //绘制XY平面
  54. //绘制平行于X的线条
  55. geometry = new THREE.Geometry();
  56. geometry.vertices.push(new THREE.Vector3(-10.5, 0, 0), new THREE.Vector3(10.5, 0, 0));
  57. material = new THREE.LineBasicMaterial({ color: 0xffffff, opacity: 0.5 });
  58. for (var index = 0; index < 11; index++) {
  59. if (index == 5) continue; //中间不绘制
  60. var lineX = new THREE.Line(geometry, material);
  61. lineX.position.y = (index * 2) - 10
  62. scene.add(lineX);
  63. }
  64. //绘制平行于Y的线条
  65. geometry = new THREE.Geometry();
  66. geometry.vertices.push(new THREE.Vector3(0, -10.5, 0), new THREE.Vector3(0, 10.5, 0));
  67. material = new THREE.LineBasicMaterial({ color: 0xffffff, opacity: 0.5 });
  68. for (var index = 0; index < 11; index++) {
  69. if (index == 5) continue; //中间不绘制
  70. var lineX = new THREE.Line(geometry, material);
  71. lineX.position.x = (index * 2) - 10
  72. scene.add(lineX);
  73. }
  74. //创建一个WebGL渲染器并设置其大小,设置抗锯齿设置
  75. var renderer = new THREE.WebGLRenderer({antialias: true });
  76. renderer.setClearColor(new THREE.Color(0x7696f1));
  77. renderer.setSize(window.innerWidth, window.innerHeight);
  78. renderer.setPixelRatio(window.devicePixelRatio); //框锯齿设置
  79. //创建一个立方体
  80. var cubeGeometry = new THREE.BoxGeometry(1, 1, 1);
  81. //将线框(wireframe)属性设置为true,这样物体就不会被渲染为实物物体
  82. var cubeMaterial = new THREE.MeshLambertMaterial({ color: 0xff0000 });
  83. var cube = new THREE.Mesh(cubeGeometry, cubeMaterial);
  84. cube.castShadow = true;
  85. //设置立方体的位置
  86. cube.position.set(0, 0, 0);
  87. //将立方体添加到场景中
  88. scene.add(cube);
  89. //系统坐标系标定
  90. // var axesHelper = new THREE.AxesHelper(100);
  91. // scene.add(axesHelper);
  92. //创建点光源 正上面
  93. var spotLight = new THREE.SpotLight(0xffffff);
  94. spotLight.position.set(0, 0, 50);
  95. spotLight.castShadow = true;
  96. // scene.add(spotLight);
  97. //右上角
  98. var spotLight2 = new THREE.SpotLight(0xffffff);
  99. spotLight2.position.set(10, 10, 5);
  100. spotLight.castShadow = true;
  101. scene.add(spotLight2);
  102. //右下角
  103. var spotLight3 = new THREE.SpotLight(0xffffff);
  104. spotLight3.position.set(10, -10, 0);
  105. spotLight3.castShadow = true;
  106. scene.add(spotLight3);
  107. //左下角
  108. var spotLight4 = new THREE.SpotLight(0xffffff);
  109. spotLight4.position.set(-10, -10, -5);
  110. spotLight4.castShadow = true;
  111. scene.add(spotLight4);
  112. //将渲染的结果输出到指定页面元素中
  113. document.getElementById("WebGLwxp").appendChild(renderer.domElement);
  114. //存放有所有需要改变的属性的对象
  115. var controls = new function() {
  116. this.rotationSpeed = 0.02;
  117. this.cubPositionX = 0.00;
  118. this.cubPositionY = 0.00;
  119. this.cubPositionZ = 0.00;
  120. this.camerPositionX = 10.00;
  121. this.camerPositionY = -20.00;
  122. this.camerPositionZ = 13.00;
  123. };
  124. //创建dat.GUI,传递并设置属性
  125. var gui = new dat.GUI();
  126. gui.add(controls, 'rotationSpeed', 0, 0.5);
  127. gui.add(controls, 'cubPositionX', -10.0, 10.0);
  128. gui.add(controls, 'cubPositionY', -10.0, 10.0);
  129. gui.add(controls, 'cubPositionZ', -10.0, 10.0);
  130. gui.add(controls, 'camerPositionX', -40.0, 20.0);
  131. gui.add(controls, 'camerPositionY', -40.0, 10.0);
  132. gui.add(controls, 'camerPositionZ', 0.0, 40.0);
  133. //渲染场景
  134. render();
  135. //渲染场景
  136. function render() {
  137. cube.rotation.z += controls.rotationSpeed;
  138. cube.position.x = controls.cubPositionX;
  139. cube.position.y = controls.cubPositionY;
  140. cube.position.z = controls.cubPositionZ;
  141. camera.position.x = controls.camerPositionX;
  142. camera.position.y = controls.camerPositionY;
  143. camera.position.z = controls.camerPositionZ;
  144. //通过requestAnimationFrame方法在特定时间间隔重新渲染场景
  145. requestAnimationFrame(render);
  146. //渲染场景
  147. renderer.render(scene, camera);
  148. }
  149. //innit结束
  150. }
  151. //确保init方法在网页加载完毕后被调用
  152. window.onload = init;
  153. </script>
  154. </body>
  155. </html>

最后是效果图 ,

           //创建一个WebGL渲染器并设置其大小,设置抗锯齿设置
            var renderer = new THREE.WebGLRenderer({antialias: true });
            renderer.setClearColor(new THREE.Color(0x7696f1));
            renderer.setSize(window.innerWidth, window.innerHeight);
            renderer.setPixelRatio(window.devicePixelRatio); //框锯齿设置 

  锯齿处理前后,效果很明显

       

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/96011
推荐阅读
相关标签
  

闽ICP备14008679号