日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Three.js中使用材质覆盖属性

發(fā)布時間:2025/3/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Three.js中使用材质覆盖属性 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

場景

Three.js中實現(xiàn)點擊按鈕添加刪除旋轉(zhuǎn)立方體:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119452536

在上面實現(xiàn)的效果都是添加的隨機(jī)顏色的立方體。

通過使用場景的overrideMaterial屬性,可以用來設(shè)置所有物體的材質(zhì)。

所有添加進(jìn)場景中的物體都會使用同樣的材質(zhì)。

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
關(guān)注公眾號
霸道的程序猿
獲取編程相關(guān)電子書、教程推送與免費下載。

實現(xiàn)

在新建scene場景后

scene.overrideMaterial = new THREE.MeshLambertMaterial({color: 0xffffff});

完整示例代碼

<!DOCTYPE html><html><head><title>場景中添加刪除方塊</title><script type="text/javascript" src="./js/three.js"></script><script type="text/javascript" src="./js/dat.gui.js"></script><style>body {/* 將邊距設(shè)置為0,溢出設(shè)置為隱藏,以實現(xiàn)全屏顯示 */margin: 0;overflow: hidden;}</style> </head> <body><!-- 顯示的div --> <div id="WebGL-output"> </div><script type="text/javascript">// 初始化的方法function init() {// 創(chuàng)建一個場景,它將包含我們所有的元素,如物體,攝像機(jī)和燈光var scene = new THREE.Scene();//使用材質(zhì)覆蓋屬性scene.overrideMaterial = new THREE.MeshLambertMaterial({color: 0xffffff});// 創(chuàng)建一個相機(jī),它定義了我們正在看的地方var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);// 創(chuàng)建渲染器并設(shè)置大小var renderer = new THREE.WebGLRenderer();//將renderer的背景色設(shè)置為接近白色renderer.setClearColor(new THREE.Color(0xEEEEEE,1.0));//設(shè)置大小renderer.setSize(window.innerWidth, window.innerHeight);renderer.shadowMapEnabled = true;// 創(chuàng)建平面,并定義平面的尺寸var planeGeometry = new THREE.PlaneGeometry(80, 40,1,1);//創(chuàng)建一個基本材質(zhì),并設(shè)置顏色var planeMaterial = new THREE.MeshBasicMaterial({color: 0xcccccc});//把兩個對象合并到Mesh網(wǎng)格對象var plane = new THREE.Mesh(planeGeometry, planeMaterial);plane.receiveShadow = true;// 設(shè)置平面繞x軸旋轉(zhuǎn)90度plane.rotation.x = -0.5 * Math.PI;// 設(shè)置平面的坐標(biāo)位置plane.position.x = 15;plane.position.y = 0;plane.position.z = 0;// 將平面添加進(jìn)場景scene.add(plane);// 定義相機(jī)的坐標(biāo),即懸掛在場景的上方camera.position.x = -30;camera.position.y = 40;camera.position.z = 30;//為了確保相機(jī)能夠拍攝到這些物體,使用lookat函數(shù)指向場景的中心camera.lookAt(scene.position);// 添加環(huán)境光var ambientLight = new THREE.AmbientLight(0x0c0c0c);scene.add(ambientLight);// spotLight光源是聚光燈光源,類似手電筒,會形成一種錐形效果的光,可以產(chǎn)生陰影var spotLight = new THREE.SpotLight(0xffffff);spotLight.position.set(-40, 60, -10);spotLight.castShadow = true;scene.add(spotLight);// 將renderer的輸出掛接到HTML終點div元素document.getElementById("WebGL-output").appendChild(renderer.domElement);var step = 0;var controls = new function () {//速度值this.rotationSpeed = 0.02;//立方體個數(shù)this.numberOfObjects = scene.children.length;this.removeCube = function () {var allChildren = scene.children;var lastObject = allChildren[allChildren.length - 1];//防止移除相機(jī)和光源if (lastObject instanceof THREE.Mesh) {scene.remove(lastObject);this.numberOfObjects = scene.children.length;}};this.addCube = function () {//隨機(jī)大小尺寸var cubeSize = Math.ceil((Math.random() * 3));// 生成立方體var cubeGeometry = new THREE.BoxGeometry(cubeSize, cubeSize, cubeSize);//創(chuàng)建新的MeshLambertMaterial實例,顏色隨機(jī)var cubeMaterial = new THREE.MeshLambertMaterial({color: Math.random() * 0xffffff});//合并var cube = new THREE.Mesh(cubeGeometry, cubeMaterial);cube.castShadow = true;cube.name = "cube-"+scene.children.length;// 生成隨機(jī)坐標(biāo)cube.position.x = -30 + Math.round((Math.random() * planeGeometry.parameters.width));cube.position.y = Math.round((Math.random() * 5));cube.position.z = -20 + Math.round((Math.random() * planeGeometry.parameters.height));// 方塊添加進(jìn)場景scene.add(cube);this.numberOfObjects = scene.children.length;};//輸出場景中的對象this.outputObjects = function () {console.log(scene.children);}};var gui = new dat.GUI();gui.add(controls, 'rotationSpeed', 0, 0.5);gui.add(controls, 'addCube');gui.add(controls, 'removeCube');gui.add(controls, 'outputObjects');gui.add(controls, 'numberOfObjects').listen();render();function render() {// 循環(huán)每個對象scene.traverse(function (e) {if (e instanceof THREE.Mesh && e != plane) {e.rotation.x += controls.rotationSpeed;e.rotation.y += controls.rotationSpeed;e.rotation.z += controls.rotationSpeed;}});// 動畫實現(xiàn)requestAnimationFrame(render);renderer.render(scene, camera);}}window.onload = init;</script> </body> </html>

運行效果

?

總結(jié)

以上是生活随笔為你收集整理的Three.js中使用材质覆盖属性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲av无码一区二区二三区 | 成人夜间视频 | 国产内射一区二区 | 成人午夜淫片100集 伊人久久国产 | 欧美日韩伦理片 | 久久精品一区二区 | 青娱乐免费在线视频 | 少妇太紧太爽又黄又硬又爽小说 | 亚洲av永久无码精品一区二区国产 | 国产精品第7页 | 精品无码一区二区三区蜜臀 | 欧美一区高清 | 玉女心经是什么意思 | 国产午夜三级一区二区三 | 日韩精品免费一区二区夜夜嗨 | 午夜网页| 天天视频黄 | 高清国产一区 | 国产乱码一区二区三区播放 | 精品午夜福利视频 | 12av在线 | 成人亚洲一区二区 | 麻豆视频一区 | 麻豆乱淫一区二区三区 | 中文字幕校园春色 | 欧美久久影院 | 日本美女性高潮 | 四季av日韩精品一区 | 日本激情一区二区三区 | 国产福利视频一区二区三区 | 精品少妇一区二区三区免费观看 | 国产免费内射又粗又爽密桃视频 | 亚洲精品视频在线观看免费 | 麻豆成人91精品二区三区 | 国产成人精品一区二区 | 超碰caoporen| 久草电影网站 | www精品一区二区三区 | 91香蕉国产在线观看 | 精品无人国产偷自产在线 | 波多野结衣中文字幕在线播放 | 日本黄xxxxxxxxx100 | 99国产精品久久久久久久 | 91免费在线视频 | 午夜写真片福利电影网 | 喷潮在线观看 | 人妻av无码一区二区三区 | 免费超碰在线 | 色播久久| 亚洲手机av | 国产高清视频一区二区 | 亚洲国产成人一区二区 | 成人在线午夜 | 成年人性生活免费视频 | 丰腴饱满的极品熟妇 | 国产精品亚洲欧美在线播放 | 蜜桃av鲁一鲁一鲁一鲁俄罗斯的 | 99精品欧美一区二区三区综合在线 | 青春草网站| 人人澡人人看 | 中国国语农村大片 | 国产乱女淫av麻豆国产 | 欧美另类激情 | 超碰青青操| 久久免费视频网站 | 香蕉视频成人在线观看 | 韩产日产国产欧产 | 性奶老妇 视频 | 91精品网站| 亚洲一区二区三区三州 | 在线观看黄色动漫 | 三级网站在线 | 亚洲精品在线观看网站 | 激情五月网站 | 伊人久久综合 | 无码人妻久久一区二区三区 | 欧美综合在线视频 | 超碰97国产| 亚洲综合精品 | 国产一区激情 | 亚洲免费影院 | 成人久色 | 成人在线观看h | 九九九九九热 | 成人片片| 亚洲黄色激情 | 欧美性受xxxxx | 日韩精品影院 | 无码丰满熟妇 | 国产巨乳在线观看 | 五月天中文字幕 | 国产suv一区二区 | 丰满少妇一区二区三区视频 | japanesehdxxxx| 99热日本 | 欧美日比视频 | 色久影院 | 欧美精品99久久 | 日韩av电影网 |