• 初识three.js与简单练习


     官网文档 three.js docs

    首先要创建 场景scene 相机camera 渲染器render 一定要先根据官网引入three.js的js文件

    1. const scene = new THREE.Scene(); //创建场景
    2. const camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );
    3. const renderer = new THREE.WebGLRenderer();//创建渲染器对象
    4. renderer.setSize( window.innerWidth, window.innerHeight ); //设置渲染区尺寸
    5. document.body.appendChild( renderer.domElement );//body中插入canvas对象

    /*

    three.js有几种不同的相机

    * 1.js有几种相机,分别是什么? [ a.四种相机: PerspectiveCamera ( 透视 相机) 、OrthographicCamera ( 正交投影 相机)、CubeCamera ( 立方体 相机 或全景 相机)和StereoCamera (3D相机)]

      *

      * 2.相机的参数分别是什么? [

      *        a.透视相机: PerspectiveCamera( fov, aspect, near, far ) fov: 视角大小, aspect: 宽高比, near: 近裁面, far: 远裁面

      *        b.正交投影相机: OrthographicCamera( left, right, top, bottom, near, far ) left: 视锥体左边界, right: 视锥体右边界, top: 视锥体上边界, bottom: 视锥体下边界, near: 近裁面, far: 远裁面

      *        c.立方体相机: CubeCamera( near, far, cubeResolution ) near: 近裁面, far: 远裁面, cubeResolution: 立方体纹理分辨率

      *        d.3D相机: StereoCamera( fov, aspect, near, far ) fov: 视角大小, aspect: 宽高比, near: 近裁面, far: 远裁面

      * ]

      *

      * 3.相机的位置是怎么设置的? [

      *        a.相机的位置通过相机的position属性来设置的  相机.position.set(x,y,z);

      * ]

      * 4.相机的方向是怎么设置的?[

      *        a.相机的方向通过相机的lookAt方法来设置的    相机.lookAt(0,0,0);

      *        b.相机默认是由正z轴看像-z轴(相机镜头对着-z轴方向拍) 就像是由屏幕外向屏幕内看一样 (模拟人眼的视觉效果)

      * ]

      * 5.相机的视野是怎么设置的?[

      *        a.相机以哪个视野为上方通过up方法来设置的

      *        b.相机.up.set(x,y,z); 默认是y轴向上 就是你拿着相机是躺着拍,趴着拍还是侧着拍的区别,或是抬头看,低头看,扭头看的区别。

      * ]

    */

    根据官网例子

     添加立方体

    1. const geometry = new THREE.BoxGeometry(); //立方体图形
    2. //材质对象material 这里表示给材质对象添加颜色,颜色仅支持十六进制的0x色彩
    3. const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
    4. const cube = new THREE.Mesh( geometry, material );
    5. scene.add( cube );//网格模型对象添加到场景中
    6. camera.position.z = 5;//相机视角大小,数值越小 视角越小,看到的就越大类似于小孔成像原理

    渲染场景

    1. function animate() {
    2. requestAnimationFrame( animate );
    3. renderer.render( scene, camera );
    4. }
    5. animate();

    添加动画函数,使物体转动

    将下列代码添加到animate()函数中renderer.render调用的上方:

    1. cube.rotation.x += 0.01;
    2. cube.rotation.y += 0.01;

    全部代码如下

    1. html>
    2. <html>
    3. <head>
    4. <title>testtitle>
    5. <style type="text/css">
    6. body { margin: 0; }
    7. canvas { width: 100%; height: 100%; }
    8. style>
    9. head>
    10. <body>
    11. <script type="text/javascript" src="js/three.js">script>
    12. <script type="text/javascript">
    13. // 场景
    14. var scene = new THREE.Scene();
    15. // 摄像机
    16. var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
    17. camera.position.z = 5;
    18. // 渲染器
    19. var renderer = new THREE.WebGLRenderer();
    20. renderer.setSize( window.innerWidth, window.innerHeight );
    21. document.body.appendChild( renderer.domElement );
    22. // 渲染器 end
    23. // 物体
    24. var geometry = new THREE.BoxGeometry(1, 1, 1);
    25. var material = new THREE.MeshBasicMaterial( { color: 0x00ff00} );
    26. var cube = new THREE.Mesh( geometry, material );
    27. scene.add( cube );
    28. // 动画
    29. function animate() {
    30. cube.rotation.x += 0.01;
    31. cube.rotation.y += 0.01;
    32. renderer.render( scene, camera );
    33. requestAnimationFrame( animate );
    34. }
    35. animate();
    36. // 物体 end
    37. // 光源
    38. var spotLight = new THREE.SpotLight( 0xffffff );
    39. spotLight.position.set( -40, 60, -10 );
    40. scene.add( spotLight );
    41. // 光源 end
    42. // 物体
    43. var geometry = new THREE.BoxGeometry(1, 1, 1);
    44. var material = new THREE.MeshLambertMaterial( { color: 0x00ff00} );
    45. var cube = new THREE.Mesh( geometry, material );
    46. scene.add( cube );
    47. // 物体 end
    48. renderer.setClearColor(new THREE.Color(0x000000, 1.0));
    49. renderer.shadowMap.enabled = true;
    50. cube.castShadow = true; //投射阴影
    51. plane.receiveShadow = true; //地面接收阴影
    52. spotLight.castShadow = true;
    53. script>
    54. body>
    55. html>

    效果如下 上下左右旋转的一个正方体

    个人练习代码

    一定要引入three.js文件否则会白屏不会显示渲染

    这里我使用的是远程仓库的three.main.js外联 vue项目可根据官网自行下载包

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <style>
    6. body {
    7. background-color: #ffff; /* 背景色只能是hash模式 */
    8. margin: 0;
    9. overflow: hidden; /* 隐藏body窗口区域滚动条 */
    10. }
    11. style>
    12. head>
    13. <body>
    14. <script type="text/javascript" src="../js/three.js">script>
    15. <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/94/three.min.js">script>
    16. <script>
    17. var camera, scene, renderer;
    18. var geometry, material, mesh;
    19. // 此处声明了相机 场景
    20. function init() {
    21. scene = new THREE.Scene(); //创建场景对象
    22. camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 12 );
    23. camera.position.z = 3; //相机视角大小,数值越小 视角越小,看到的就越大类似于小孔成像原理
    24. scene.background = new THREE.Color( 0xffffff );
    25. // var geometry = new THREE.SphereGeometry(60, 40, 40); //创建一个球体几何对象
    26. geometry = new THREE.SphereGeometry( 1,12,12 );
    27. //材质对象Material,这里只是单单的给赋值颜色采用的是 十六进制的0x色彩
    28. material = new THREE.MeshBasicMaterial( { color: 0x0000ff, wireframe: true } );
    29. mesh = new THREE.Mesh( geometry, material );//网格模型对象
    30. scene.add( mesh ); //网格模型对象添加到场景中
    31. renderer = new THREE.WebGLRenderer( { antialias: true } ); //创建渲染器对象
    32. renderer.setSize( window.innerWidth, window.innerHeight );//设置渲染区尺寸
    33. document.body.appendChild( renderer.domElement ); //body中插入canvas对象
    34. }
    35. //定义动画
    36. function animate( time ) {
    37. mesh.rotation.x = time * 0.0005;
    38. mesh.rotation.y = time * 0.001;
    39. renderer.render( scene, camera );//执行渲染操作 指定场景,相机作为参数
    40. requestAnimationFrame( animate );
    41. }
    42. // 此demo声明函数仅仅是为了便捷
    43. init();
    44. requestAnimationFrame( animate );
    45. script>
    46. body>
    47. html>

    效果图如下 一个旋转的球体

     刚接触three,仅是个人初步了解.

  • 相关阅读:
    Java毕业设计-校园活动赞助与宣传管理系统
    【Git】Git下载安装&环境配置 下载速度慢的解决方案
    十二、Docker的简介
    Linux (一) 基础复习
    【信号处理】基于CNN的心电(ECG)信号分类典型方法实现(tensorflow)
    从I/O的视角看DPU
    IRIS的镜像配置(2)
    SpringBoot原理篇
    [附源码]java毕业设计学生宿舍管理系统设计
    硬件性能评估指标-DMIPS、MFLOPS、MAC、TOPS
  • 原文地址:https://blog.csdn.net/weixin_68531033/article/details/127687738