2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 72 Three.js 导入VTK格式的模型

72 Three.js 导入VTK格式的模型

时间:2018-07-29 23:47:06

相关推荐

72 Three.js 导入VTK格式的模型

简介

VTK是由Visualization Toolkit创建的一种格式,用来指定顶点和面。VTK有两种格式:二进制和基于文本的ASCIIThree.js只支持基于ASCII的格式。

实现案例

案例查看地址:/blog/threejs/-03-20/132.html

首先,引入script加载器

<script src="/lib/js/loaders/VTKLoader.js"></script>

然后,实例化加载器对象,然后加载模型,VTK模型里面只保存了几何体,所以我们实例化了一个纹理,添加到场景当中。

var loader = new THREE.VTKLoader();loader.load("/lib/assets/models/moai_fixed.vtk", function (geometry) {//模型的法向量有问题,更新一下法向量puteFaceNormals();puteVertexNormals();//创建纹理var mat = new THREE.MeshLambertMaterial({color: 0xaaaaaa});//创建模型var group = new THREE.Mesh(geometry, mat);group.scale.set(10, 10, 10);scene.add(group);});

案例代码

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title><style type="text/css">html, body {margin: 0;height: 100%;}canvas {display: block;}</style></head><body onload="draw();"></body><script src="/lib/three.js"></script><script src="/lib/js/loaders/VTKLoader.js"></script><script src="/lib/js/controls/OrbitControls.js"></script><script src="/lib/js/libs/stats.min.js"></script><script src="/lib/js/libs/dat.gui.min.js"></script><script>var renderer;function initRender() {renderer = new THREE.WebGLRenderer({antialias:true});renderer.setSize(window.innerWidth, window.innerHeight);//告诉渲染器需要阴影效果renderer.setClearColor(0xffffff);document.body.appendChild(renderer.domElement);}var camera;function initCamera() {camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 0.1, 1000);camera.position.set(0, 40, 50);camera.lookAt(new THREE.Vector3(0,0,0));}var scene;function initScene() {scene = new THREE.Scene();}//初始化dat.GUI简化试验流程var gui;function initGui() {//声明一个保存需求修改的相关数据的对象gui = {};var datGui = new dat.GUI();//将设置属性添加到gui当中,gui.add(对象,属性,最小值,最大值)}var light;function initLight() {scene.add(new THREE.AmbientLight(0x444444));light = new THREE.PointLight(0xffffff);light.position.set(0,50,50);//告诉平行光需要开启阴影投射light.castShadow = true;scene.add(light);}function initModel() {//辅助工具var helper = new THREE.AxesHelper(50);scene.add(helper);var loader = new THREE.VTKLoader();loader.load("/lib/assets/models/moai_fixed.vtk", function (geometry) {//模型的法向量有问题,更新一下法向量puteFaceNormals();puteVertexNormals();//创建纹理var mat = new THREE.MeshLambertMaterial({color: 0xaaaaaa});//创建模型var group = new THREE.Mesh(geometry, mat);group.scale.set(10, 10, 10);scene.add(group);});}//初始化性能插件var stats;function initStats() {stats = new Stats();document.body.appendChild(stats.dom);}//用户交互插件 鼠标左键按住旋转,右键按住平移,滚轮缩放var controls;function initControls() {controls = new THREE.OrbitControls( camera, renderer.domElement );// 如果使用animate方法时,将此函数删除//controls.addEventListener( 'change', render );// 使动画循环使用时阻尼或自转 意思是否有惯性controls.enableDamping = true;//动态阻尼系数 就是鼠标拖拽旋转灵敏度//controls.dampingFactor = 0.25;//是否可以缩放controls.enableZoom = true;//是否自动旋转controls.autoRotate = true;controls.autoRotateSpeed = 0.5;//设置相机距离原点的最远距离controls.minDistance = 1;//设置相机距离原点的最远距离controls.maxDistance = 200;//是否开启右键拖拽controls.enablePan = true;}function render() {renderer.render( scene, camera );}//窗口变动触发的函数function onWindowResize() {camera.aspect = window.innerWidth / window.innerHeight;camera.updateProjectionMatrix();render();renderer.setSize( window.innerWidth, window.innerHeight );}function animate() {//更新控制器render();//更新性能插件stats.update();controls.update();requestAnimationFrame(animate);}function draw() {initGui();initRender();initScene();initCamera();initLight();initModel();initControls();initStats();animate();window.onresize = onWindowResize;}</script></html>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。