国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

Three.js中網格對象MESH的屬性與方法詳解

來源:懂視網 責編:小采 時間:2020-11-27 22:28:53
文檔

Three.js中網格對象MESH的屬性與方法詳解

Three.js中網格對象MESH的屬性與方法詳解:前言 本文主要給大家介紹了關于Three.js網格對象MESH的屬性與方法,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹: 創建一個網格需要一個幾何體,以及一個或多個材質。當網格創建好之后,我們就可以將它添加到場景中并進行渲染。網格對象提
推薦度:
導讀Three.js中網格對象MESH的屬性與方法詳解:前言 本文主要給大家介紹了關于Three.js網格對象MESH的屬性與方法,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹: 創建一個網格需要一個幾何體,以及一個或多個材質。當網格創建好之后,我們就可以將它添加到場景中并進行渲染。網格對象提

前言

本文主要給大家介紹了關于Three.js網格對象MESH的屬性與方法,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹:

創建一個網格需要一個幾何體,以及一個或多個材質。當網格創建好之后,我們就可以將它添加到場景中并進行渲染。網格對象提供了幾個屬性和方法用于改變它在場景中的位置和顯示效果。

如下:

還有一個屬性就是visible屬性,默認為true,如果設置為false,THREE.Mesh將不渲染到場景中。

mesh對象的前三個屬性position,rotation和scale有三種設置方法。

第一種,直接設置相關坐標軸

 cube.position.x = 5;
 cube.position.y = 6;
 cube.position.z = 7;

第二種,一次性設置x,y和z坐標的值

 cube.position.set(5,6,7); //效果同第一種

第三種,因為它們都是一個THREE.Vector3對象,所以我們可以直接賦值一個新的對象給它

 cube.position = new THREE.Vector3(5,6,7); //效果同上

為了形象的顯示這些效果,我書寫了一個案例:


這個效果是使用dat.GUI實現的效果,具體效果自己將代碼下載下來測試即可:

<!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="build/three.js"></script>
<script src="examples/js/controls/OrbitControls.js"></script>
<script src="examples/js/libs/stats.min.js"></script>
<script src="examples/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.shadowMap.enabled = true;
 renderer.shadowMap.type = THREE.PCFSoftShadowMap; // 默認的是,沒有設置的這個清晰 THREE.PCFShadowMap
 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, 100);
 camera.lookAt(new THREE.Vector3(0,0,0));
 }

 var scene;
 function initScene() {
 scene = new THREE.Scene();
 }

 //初始化dat.GUI簡化試驗流程
 var settings;
 function initGui() {
 //聲明一個保存需求修改的相關數據的對象
 settings = {
 positionX:0,
 positionY:5,
 positionZ:0,
 rotationX:0,
 rotationY:0,
 rotationZ:0,
 scaleX:1,
 scaleY:1,
 scaleZ:1,
 translateX:0,
 translateY:0,
 translateZ:0,
 translate:function () {
 //cube.translate(settings.translateX,settings.translateY,settings.translateZ);
 cube.translateX(settings.translateX);
 cube.translateY(settings.translateY);
 cube.translateZ(settings.translateZ);

 settings.positionX = cube.position.x;
 settings.positionY = cube.position.y;
 settings.positionZ = cube.position.z;
 },
 visible:true
 };

 //初始化gui
 var gui = new dat.GUI();

 var position = gui.addFolder("position");
 position.add(settings,"positionX",-30,30).listen();
 position.add(settings,"positionY",-30,30).listen();
 position.add(settings,"positionZ",-30,30).listen();
 var scale = gui.addFolder("scale");
 scale.add(settings,"scaleX",0.01,5);
 scale.add(settings,"scaleY",0.01,5);
 scale.add(settings,"scaleZ",0.01,5);
 var rotation = gui.addFolder("rotation");
 rotation.add(settings,"rotationX",-2*Math.PI,2*Math.PI);
 rotation.add(settings,"rotationY",-2*Math.PI,2*Math.PI);
 rotation.add(settings,"rotationZ",-2*Math.PI,2*Math.PI);
 var translate = gui.addFolder("translate");
 translate.add(settings,"translateX",-5,5);
 translate.add(settings,"translateY",-5,5);
 translate.add(settings,"translateZ",-5,5);
 translate.add(settings,"translate");
 gui.add(settings,"visible");
 }

 var light;
 function initLight() {
 scene.add(new THREE.AmbientLight(0x444444));

 light = new THREE.PointLight(0xffffff);
 light.position.set(15,30,10);

 //告訴平行光需要開啟陰影投射
 light.castShadow = true;

 scene.add(light);
 }

 var cube;
 function initModel() {

 //輔助工具
 var helper = new THREE.AxisHelper(10);
 scene.add(helper);

 //立方體
 var cubeGeometry = new THREE.CubeGeometry(10,10,10);
 var cubeMaterial = new THREE.MeshLambertMaterial({color:0x00ffff});

 cube = new THREE.Mesh(cubeGeometry, cubeMaterial);

 //告訴立方體需要投射陰影
 cube.castShadow = true;

 scene.add(cube);

 //底部平面
 var planeGeometry = new THREE.PlaneGeometry(100,100);
 var planeMaterial = new THREE.MeshStandardMaterial({color:0xaaaaaa});

 var plane = new THREE.Mesh(planeGeometry, planeMaterial);
 plane.rotation.x = - 0.5 * Math.PI;
 plane.position.y = -0;

 //告訴底部平面需要接收陰影
 plane.receiveShadow = true;

 scene.add(plane);

 }

 //初始化性能插件
 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 = false;
 //設置相機距離原點的最遠距離
 controls.minDistance = 100;
 //設置相機距離原點的最遠距離
 controls.maxDistance = 200;
 //是否開啟右鍵拖拽
 controls.enablePan = true;
 }

 function render() {
 renderer.render( scene, camera );
 }

 //窗口變動觸發的函數
 function onWindowResize() {

 camera.aspect = window.innerWidth / window.innerHeight;
 camera.updateProjectionMatrix();
 renderer.setSize( window.innerWidth, window.innerHeight );

 }

 function animate() {
 //更新控制器
 render();

 //更新性能插件
 stats.update();

 //更新相關位置
 cube.position.set(settings.positionX,settings.positionY,settings.positionZ);
 cube.scale.set(settings.scaleX,settings.scaleY,settings.scaleZ);
 cube.rotation.set(settings.rotationX,settings.rotationY,settings.rotationZ);
 cube.visible = settings.visible;

 controls.update();

 requestAnimationFrame(animate);
 }

 function draw() {
 initGui();
 initRender();
 initScene();
 initCamera();
 initLight();
 initModel();
 initControls();
 initStats();

 animate();
 window.onresize = onWindowResize;
 }
</script>
</html>

總結

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

Three.js中網格對象MESH的屬性與方法詳解

Three.js中網格對象MESH的屬性與方法詳解:前言 本文主要給大家介紹了關于Three.js網格對象MESH的屬性與方法,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹: 創建一個網格需要一個幾何體,以及一個或多個材質。當網格創建好之后,我們就可以將它添加到場景中并進行渲染。網格對象提
推薦度:
標簽: 屬性 three.js Mesh
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 一区二区视频在线观看 | 视频一区 中文字幕 | 福利视频一区二区牛牛 | 国产精品激情综合久久 | 看全色黄大色黄女片爽毛片 | 欧美精品国产综合久久 | 亚欧国产 | 国产免费高清视频在线观看不卡 | 又黄又爽无遮挡免费视频 | 女人与公拘交酡全过程 | 久久久久久久国产精品毛片 | 久久精品一区二区 | 国产成人高清亚洲一区久久 | 中文字字幕码一二三区 | 欧美日韩一 | 欧美日韩极品 | 九九51精品国产免费看 | 在线观看国产欧美 | 图片区 日韩 欧美 亚洲 | 亚洲午夜一区二区三区 | 久久久久久久国产a∨ | 欧美日韩亚洲国产 | 欧美亚洲综合在线 | 国产精美视频 | 日本全黄 | 可以看的毛片 | 欧美在线免费 | 国产成人在线免费视频 | 国产精品91av | 久久久久久久久国产 | 特级一级全黄毛片免费 | 欧美日韩亚洲综合另类ac | 可以看的毛片 | 精品国产一区二区三区在线观看 | 在线亚洲精品 | 视频一区久久 | 一级毛片真人不卡免费播 | 日韩网站 | 亚洲视频在线免费看 | 欧美日韩亚洲高清不卡一区二区三区 | 热久久伊人 |