threejs vue,threejs 不规则几何体

  threejs vue,threejs 不规则几何体

  最近学了一段时间的三个j,想开始做点什么。下面这篇文章主要介绍在vue3中如何用三个j画一些简单几何体的一些信息。通过示例代码非常详细的介绍,有需要的朋友可以参考一下。

  

目录

  前言threejs简介依赖包版本vue3操作DOM创建场景、相机和渲染器。在这一节及以下,我们将立方体球体柱面坐标系点光源鼠标操作旋转、缩放球体和立方体自动旋转编写成三个完整的代码摘要

  

前言

  在vue3中,用threejs画几个最简单的几何体,比如自动旋转的立方体、圆柱体、球体,还加了光。几何体的阴影部分是光线照射不到的地方。结果如下。有兴趣的可以看看具体实施过程~

  

threejs简述

  Three.js是基于原生WebGL包的三维引擎程序结构-Scene 3354 camera 3354 renderer Scene

  场景是放置几何体的容器。

  照相机,照相机

  相机是拍摄的工具。通过控制相机的位置和方向,可以得到不同角度的图像。

  渲染器

  渲染器使用场景和相机进行渲染。渲染过程就像摄影师拍摄图像一样。如果只渲染一次,那就是静态图像。如果连续渲染,会得到动态画面。在JS中,可以使用requestAnimationFrame来实现高效的连续渲染。

  【注意】具体的API与几何、材料等有关。不是很具体,有需要可以查阅cylinder geometrythree . js(webgl3d.cn)的中文文档。

  

依赖包版本

  维特:^2.8.0,

  三:^0.138.0,

  ^3.2.25

  

vue3操作DOM

  -threejs的底层是webgl的封装,最后它使用canvas进行图形渲染,所以第一步是做操作dom的工作。

  如下,在steup函数中定义一个响应常量dom,并将其公开给模板。将ref安装在特定的元素上,并在initThree中进行特定的绘图工作。模板

  差异

  演示

  /div

  div class= demo-main ref= DOM /div

  /模板

  脚本语言

  从“vue”导入{ defineComponent,onMounted,ref };

  从“三”中导入*作为三;

  从“three/examples/jsm/controls/OrbitControls”导入{ OrbitControls };

  导出默认定义组件({

  setup() {

  const DOM=refHTMLElement null(null);

  onMounted(()={

  init three(DOM . value);

  });

  函数initThree(实例:HTMLElement null) {

  //dosomething

  }

  返回{ DOM };

  },

  });

  /脚本

  样式范围。演示-主界面{

  高度:500px

  填充:9px 14px

  边距-底部:14px

  背景色:# f7f7f9

  边框:1px纯色# e1e1e8

  边框-半径:4px

  }

  /风格

  

创建场景,相机,渲染器 本节及后续都在initThree方法中写

  我们创建了threejs的一些基本东西如下:var He TGHT=instance . client height-25;

  var width=instance . client width-25;

  //创建场景对象场景

  var场景=新三。场景();

  //创建一个照相机对象

  var相机=新三。透视相机(75,1,0.1,1000);

  //创建渲染器对象

  var渲染器=新三。WebGLRenderer();

  renderer.setSize(width,heght);

  instance . append(renderer . DOM element);

  renderer.render(场景、相机);

  camera . position . z=5;

  renderer . setclearcolor(0x eeeeee,1.0);

  

立方体

  //立方体网格模型

  var cubeGeometry=new THREE。BoxGeometry(1,1,1);

  //材质对象材质

  //材质决定了如何在几何图形中绘制表面。如果几何体是骨架并定义了形状,那么材质就是蒙皮。three.js中有许多不同种类的材质,它们有不同的属性,比如反射、纹理映射和透明度调整。

  var cubeMaterial=new THREE。MeshLambertMaterial({

  颜色:0xff0000,

  不透明度:0.7,

  透明:真实,

  });

  var cube=新三。网格(立方体几何,立方体材料);

  scene.add(立方体);

  

球体

  //球体网格模型

  定义变量球面几何=新三。球面几何(1,20,20);

  var球形材料=新三MeshLambertMaterial({

  颜色:0xff00ff,

  镜面反射:0x4488ee,

  闪亮度:12,

  });

  定义变量球面=新三。网格(球形测量,球形材料);//网格模型对象网状物

  球体。平移y(120);//球体网格模型沿Y轴正方向平移120

  sphere.position.set(0,0,5);

  场景.添加(球体);

  

圆柱体

  //圆柱网格模型

  var cylinderGeometry=new THREE .圆柱几何形状(1,1,5,32);

  var cylinderMaterial=new THREE .MeshLambertMaterial({

  颜色:0xffff00,

  });

  定义变量缸=新三。网格(cylinderGeometry,圆柱体材料);//网格模型对象网状物

  cylinder.position.set(10,0,0);//设置圆筒模型对象的坐标坐标为10,0,0

  场景.添加(圆柱体);

  

坐标系

  //辅助坐标系参数400表示坐标系大小,可以根据场景大小去设置

  var axisHelper=new THREE .轴心助手(20);

  场景。添加(轴帮助器);

  

点光源

  //点光源

  定义变量点=新三。点光源(0x ffffff);

  point.position.set(0,0,0);

  场景.添加(点);//点光源添加到场景中

  //点光源2位置和要点关于原点对称

  var point2=新三。点光源(0x ffffff);

  point2.position.set(-400,-200,-300);//点光源位置

  场景。添加(第2点);//点光源添加到场景中

  

鼠标操作旋转,缩放

  //鼠标操作旋转、缩放,轨道控制需要单独引入

  新的OrbitControls(摄像机、渲染器。DOM元素);

  

球体,立方体自动旋转

  var animate=function () {

  requestAnimationFrame(animate);

  立方体。旋转。x=0.01

  立方体。旋转。y=0.01

  球体。旋转。x=0.01

  球体。旋转。y=0.01

  renderer.render(场景、相机);

  };

  animate();

  

initThree完整代码

  函数initThree(实例:HTMLElement null) {

  var heght=instance。客户身高-25;

  变量宽度=实例。客户端宽度-25;

  //创建场景对象事件

  定义变量场景=新三。场景();

  //创建相机对象

  定义变量相机=新三。透视相机(75,1,0.1,1000);

  //创建渲染器对象

  定义变量渲染器=新三WebGLRenderer();

  renderer.setSize(width,he ght);

  实例。追加(渲染器。DOM元素);

  renderer.render(场景、相机);

  相机。位置。z=5;

  渲染器。setclearcolor(0x eeeeee,1.0);

  //立方体网格模型

  var cubeGeometry=new THREE .BoxGeometry(1,1,1);

  //材质对象材料

  var cubeMaterial=new THREE .MeshLambertMaterial({

  颜色:0xff0000,

  不透明度:0.7,

  透明:真实,

  });

  var cube=新三。网格(立方体几何,立方体材料);

  场景.添加(立方体);

  //球体网格模型

  定义变量球面几何=新三。球面几何(1,20,20);

  var球形材料=新三MeshLambertMaterial({

  颜色:0xff00ff,

  镜面反射:0x4488ee,

  闪亮度:12,

  });

  定义变量球面=新三。网格(球形测量,球形材料);//网格模型对象网状物

  球体。平移y(120);//球体网格模型沿Y轴正方向平移120

  sphere.position.set(0,0,5);

  场景.添加(球体);

  //圆柱网格模型

  var cylinderGeometry=new THREE .圆柱几何形状(1,1,5,32);

  var cylinderMaterial=new THREE .MeshLambertMaterial({

  颜色:0xffff00,

  });

  定义变量缸=新三。网格(cylinderGeometry,圆柱体材料);//网格模型对象网状物

  cylinder.position.set(10,0,0);//设置圆筒模型对象的坐标坐标为10,0,0

  场景.添加(圆柱体);

  //辅助坐标系参数400表示坐标系大小,可以根据场景大小去设置

  var axisHelper=new THREE .轴心助手(20);

  scene . add(axis helper);

  //点光源

  var点=新三。点光源(0x ffffff);

  point.position.set(0,0,0);

  scene.add(点);//点光源被添加到场景中

  //点光源2的位置和点关于原点对称。

  var point2=新三。点光源(0x ffffff);

  point2.position.set(-400,-200,-300);//点光源位置

  scene . add(point 2);//点光源被添加到场景中

  //通过鼠标操作旋转和缩放

  新的OrbitControls(camera,renderer . DOM element);

  var animate=function () {

  requestAnimationFrame(animate);

  cube . rotation . x=0.01;

  cube . rotation . y=0.01;

  sphere . rotation . x=0.01;

  sphere . rotation . y=0.01;

  renderer.render(场景、相机);

  };

  animate();

  }

  

总结

  关于如何在vue3中用三个j画一些简单的几何图形的这篇文章就到这里了。关于在vue3中用threejs绘制几何图形的更多信息,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: