欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

three.js設(shè)置物體的縮放和旋轉(zhuǎn)代碼示例

 更新時間:2023年11月21日 09:38:22   作者:jieyucx  
最近在用three.js做三維模型的時候,需要通過鼠標滑輪向前來控制視角朝鼠標的位置放大,然后通過鼠標滑輪向后將視角復(fù)原,這篇文章主要給大家介紹了關(guān)于three.js如何設(shè)置物體的縮放和旋轉(zhuǎn)的相關(guān)資料,需要的朋友可以參考下

一、縮放物體介紹

1. 如何縮放

使用three.js設(shè)置物體的縮放可以通過對象的scale屬性來實現(xiàn)。例如,將一個立方體對象縮小一半的代碼如下:

var cube = new THREE.Mesh(new THREE.BoxGeometry(1, 1, 1), new THREE.MeshNormalMaterial());
cube.scale.set(0.5, 0.5, 0.5);

其中,scale屬性是一個THREE.Vector3類型的對象,包含了x、y、z三個方向的縮放比例。設(shè)置scale時,可以直接使用Vector3的set方法設(shè)置縮放比例,也可以分別設(shè)置x、y、z三個方向的縮放比例。

也可以使用變換的方法來縮放物體,例如將一個物體沿著x軸縮小一半,代碼如下:

var cube = new THREE.Mesh(new THREE.BoxGeometry(1, 1, 1), new THREE.MeshNormalMaterial());
cube.position.x = 2;
cube.rotation.y = Math.PI / 4;
var vector = new THREE.Vector3(0.5, 1, 1);
cube.scale.multiply(vector);

其中,Vector3的multiply方法將會對scale屬性進行按元素乘法,實現(xiàn)沿x軸縮小一半的效果。

  • 示例效果
// 創(chuàng)建幾何體
const geometry = new THREE.BoxGeometry(1, 1, 1)
// 創(chuàng)建材質(zhì)
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 })
// 根據(jù)幾何體和材質(zhì)創(chuàng)建物體
const cube = new THREE.Mesh(geometry, material)

// 縮放
cube.scale.set(1, 2, 3) // x軸縮放1倍,y軸縮放2倍,z軸縮放3倍

// 將物體添加到場景中
scene.add(cube)

未縮放前:

沿著x/y/z縮放比例1:2:3之后

二、旋轉(zhuǎn)物體介紹

1.如何旋轉(zhuǎn)

hree.js中旋轉(zhuǎn)一個物體需要使用物體的旋轉(zhuǎn)屬性(rotation),通過改變這個屬性的值來進行物體的旋轉(zhuǎn)。

下面是一個簡單的例子,假設(shè)你有一個立方體(cube):

var cube = new THREE.Mesh(new THREE.BoxGeometry(1, 1, 1), new THREE.MeshNormalMaterial());

// 將立方體添加到場景中
scene.add(cube);

// 旋轉(zhuǎn)立方體
cube.rotation.x += 0.01;    // 繞X軸旋轉(zhuǎn)
cube.rotation.y += 0.01;    // 繞Y軸旋轉(zhuǎn)

這個例子中,我們通過修改cube.rotation.xcube.rotation.y的值來旋轉(zhuǎn)立方體。對于旋轉(zhuǎn)角度的控制,可以使用弧度制或者角度制。例如,可以通過下面的方式將角度轉(zhuǎn)換為弧度:

// 將角度轉(zhuǎn)換為弧度
var angleInDegrees = 45;
var angleInRadians = angleInDegrees * Math.PI / 180;

// 使用弧度旋轉(zhuǎn)立方體
cube.rotation.z = angleInRadians;

2. 示例

我們讓物體一直旋轉(zhuǎn)

// 使用渲染器,通過相機渲染場景
function animate() {
    requestAnimationFrame( animate ); //幀動畫
    controls.update() //更新控制器
    cube.rotation.x += 0.01; //旋轉(zhuǎn)物體
    cube.rotation.y += 0.01; 
    renderer.render( scene, camera ); //渲染
}
animate();

三、完整代碼

// 導入three
import * as THREE from 'three'

// 導入軌道控制器
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'

// 創(chuàng)建場景
const scene = new THREE.Scene()

// 創(chuàng)建相機
// 參數(shù):視野角度,長寬比,近平面,遠平面
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000)

// 設(shè)置相機位置
// 參數(shù):x軸,y軸,z軸
camera.position.set(0, 0, 5)

// 將相機添加到場景中
scene.add(camera)

// 創(chuàng)建幾何體
const geometry = new THREE.BoxGeometry(1, 1, 1)
// 創(chuàng)建材質(zhì)
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 })
// 根據(jù)幾何體和材質(zhì)創(chuàng)建物體
const cube = new THREE.Mesh(geometry, material)

// 修改物體的位置
// cube.position.set(1, 1, 1)

// 縮放
// cube.scale.set(1, 2, 3) // x軸縮放1倍,y軸縮放2倍,z軸縮放3倍

// 將物體添加到場景中
scene.add(cube)

console.log('物體', cube)

// 創(chuàng)建渲染器
const renderer = new THREE.WebGLRenderer()
// 設(shè)置渲染器大小
renderer.setSize(window.innerWidth, window.innerHeight)
// console.log(renderer)
// 將渲染器添加到頁面中
document.body.appendChild(renderer.domElement)

// 創(chuàng)建軌道控制器
// 參數(shù):相機,渲染器dom元素
const controls = new OrbitControls(camera, renderer.domElement)
controls.enableDamping = true; // 開啟阻尼效果
controls.rotateSpeed = 0.5; // 旋轉(zhuǎn)速度
controls.target.set(0, 0, 0); // 查看物體時的中心點

// 添加坐標軸輔助器
// 參數(shù):坐標軸長度
const axesHelper = new THREE.AxesHelper(5)
scene.add(axesHelper)

// 使用渲染器,通過相機渲染場景
function animate() {
    // 讓物體沿著y軸往返運動
    // cube.position.y += 0.01
    // if (cube.position.y > 5) {
    //     cube.position.y = -1
    // }

    requestAnimationFrame( animate ); //幀動畫
    controls.update() //更新控制器
    cube.rotation.x += 0.01; //旋轉(zhuǎn)物體
    cube.rotation.y += 0.01; 
    renderer.render( scene, camera ); //渲染
}
animate();

總結(jié) 

到此這篇關(guān)于three.js設(shè)置物體的縮放和旋轉(zhuǎn)的文章就介紹到這了,更多相關(guān)three.js物體縮放和旋轉(zhuǎn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 微信小程序?qū)崿F(xiàn)圓形進度條動畫

    微信小程序?qū)崿F(xiàn)圓形進度條動畫

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)圓形進度條動畫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • 詳解微信小程序中數(shù)據(jù)雙向綁定如何實現(xiàn)

    詳解微信小程序中數(shù)據(jù)雙向綁定如何實現(xiàn)

    最近在小程序的開發(fā)過程中,需要用到雙向綁定,遇到報錯才知道微信本身是不支持對象雙向綁定的,鏖戰(zhàn)一番找到解決方案,下面這篇文章主要給大家介紹了關(guān)于微信小程序中數(shù)據(jù)雙向綁定如何實現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • 移動端a標簽下載文件重命名(download)不生效解決辦法

    移動端a標簽下載文件重命名(download)不生效解決辦法

    在移動端使用a標簽下載文件時,文件重命名可能不生效,尤其是在APP內(nèi)嵌頁面中,這通常是因為跨域問題導致的,文中將解決辦法介紹的非常詳細,需要的朋友可以參考下
    2024-10-10
  • 支持多瀏覽器(IE、Firefox、Opera)剪切板復(fù)制函數(shù)_腳本之家修正版

    支持多瀏覽器(IE、Firefox、Opera)剪切板復(fù)制函數(shù)_腳本之家修正版

    有朋友要剪切板復(fù)制函數(shù),可網(wǎng)上的好多代碼都是不能運行的,各種其它符號,導致了腳本的不可運行,腳本之家站長特整理了下,修正了錯誤。
    2008-12-12
  • async/await實現(xiàn)Promise.all()的方式

    async/await實現(xiàn)Promise.all()的方式

    Promise.all() 方法接收一個 promise 的 iterable 類型的輸入,并且只返回一個Promise實例,并且輸入的所有 promise 的 resolve 回調(diào)的結(jié)果是一個數(shù)組,對async/await實現(xiàn)Promise.all()相關(guān)知識感興趣的朋友一起看看吧
    2022-12-12
  • JS獲取當前日期時間并定時刷新示例

    JS獲取當前日期時間并定時刷新示例

    這篇文章主要介紹了JS如何獲取當前日期時間并執(zhí)行定時刷新,示例代碼如下,需要的朋友不要錯過
    2014-06-06
  • 一起來寫段JS drag拖動代碼

    一起來寫段JS drag拖動代碼

    記得幾年前剛接觸前端的時候,覺得能在網(wǎng)頁上拖移元素是一件很爽的事,能寫一段這樣的代碼是件很了不起的事情,于是乎google,baidu蠻多代碼來學習,大致明白了思路,總結(jié)如下
    2010-12-12
  • js異步之a(chǎn)sync和await實現(xiàn)同步寫法

    js異步之a(chǎn)sync和await實現(xiàn)同步寫法

    本文主要介紹了js異步之a(chǎn)sync和await實現(xiàn)同步寫法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • JavaScript數(shù)組去重的幾種方法效率測試

    JavaScript數(shù)組去重的幾種方法效率測試

    JavaScript數(shù)組去重是前端面試酷愛的問題,問題簡單而又能看出程序員對計算機程序執(zhí)行過程的理解如何。數(shù)組去重的方法有很多,到底哪種是最理想的我不清楚。于是我測試了下數(shù)組去重的效率。測試二十萬個數(shù)據(jù),隨著數(shù)據(jù)越多效率很明顯的就體驗了出來。下面來一起看看吧。
    2016-10-10
  • 取得元素的左和上偏移量的方法

    取得元素的左和上偏移量的方法

    利用offsetParent屬性在Dom層次中逐級向上回溯,將每個層次偏移量合計,需要的朋友可以參考下
    2014-09-09

最新評論