国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Threejs入門(mén)之三:讓物體跟隨鼠標(biāo)動(dòng)起來(lái)

這篇具有很好參考價(jià)值的文章主要介紹了Threejs入門(mén)之三:讓物體跟隨鼠標(biāo)動(dòng)起來(lái)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

上一節(jié)我們創(chuàng)建了一個(gè)三維的立方體,將其放在了瀏覽器窗口中,但是目前來(lái)講它只是一個(gè)靜態(tài)的圖片,我們并不能通過(guò)鼠標(biāo)控制其旋轉(zhuǎn)、縮放和移動(dòng),這一節(jié)我們來(lái)實(shí)現(xiàn)用鼠標(biāo)控制物體的運(yùn)動(dòng)。
首先我們要了解一個(gè)概念,在三維場(chǎng)景中,我們要控制物體旋轉(zhuǎn),實(shí)際上不是物體在旋轉(zhuǎn),而是我們的相機(jī)(還記得上一節(jié)中說(shuō)的相機(jī)嗎)在圍繞物體旋轉(zhuǎn),就像電影中的鏡頭拉近一樣,是相機(jī)在動(dòng),不是物體在動(dòng),所以,在Threejs中要想讓我們的物探動(dòng)起來(lái),我們需要引入一個(gè)軌道控制器(OrbitControls),它可以使得相機(jī)圍繞目標(biāo)進(jìn)行軌道運(yùn)動(dòng),下面我們來(lái)實(shí)現(xiàn)下
1.導(dǎo)入軌道控制器OrbitControls
OrbitControls是ThreeJS的一個(gè)擴(kuò)展庫(kù),其本身不在threejs的基礎(chǔ)庫(kù)里面,其位于threejs—examples—jsm—controls文件夾下面,我們?cè)谏弦还?jié)引入threeJS的下面添加如下代碼進(jìn)行引入

"three/addons/": "../../three.js/examples/jsm/"

完整代碼如下

<script type="importmap">
    {
      "imports":{
        "three":"../../three.js/build/three.module.js",
        "three/addons/": "../../three.js/examples/jsm/"

      }
    }
  </script>

2.在index.js中使用導(dǎo)入OrbitControls

// 引入軌道控制器擴(kuò)展庫(kù)OrbitControls.js
import { OrbitControls } from 'three/addons/controls/OrbitControls.js'

3.創(chuàng)建一個(gè)軌道控制器對(duì)象

// 設(shè)置相機(jī)控件軌道控制器OrbitControls
const controls = new OrbitControls(camera,renderer.domElement)

軌道控制器對(duì)象里面有兩個(gè)參數(shù),第一個(gè)是你要控制的是哪一個(gè)相機(jī),第二個(gè)是用于事件監(jiān)聽(tīng)的HTML元素,也就是你要控制的范圍。
4.相機(jī)設(shè)置完成后,我們運(yùn)行瀏覽器,點(diǎn)擊鼠標(biāo)控制物體發(fā)現(xiàn)物體依然沒(méi)有旋轉(zhuǎn),這是因?yàn)槲覀冸m然用鼠標(biāo)控制物體旋轉(zhuǎn)了,但是我們的畫(huà)布沒(méi)有重新渲染導(dǎo)致的,我們前面提到過(guò),要想將場(chǎng)景中物體展示到容器中,需要用渲染器進(jìn)行渲染后展示,所以,我們還需要通過(guò)監(jiān)聽(tīng)事件來(lái)監(jiān)聽(tīng)OrbitControls的change事件,在監(jiān)聽(tīng)到OrbitControls的change事件改變時(shí),我們重新渲染場(chǎng)景就可以了

// 監(jiān)聽(tīng)軌道控制器的change事件,監(jiān)聽(tīng)到改變時(shí),重新執(zhí)行渲染操作渲染三維場(chǎng)景
controls.addEventListener('change',function(){
  renderer.render(scene,camera)
})

現(xiàn)在我們通過(guò)鼠標(biāo)來(lái)控制物體放大縮小、旋轉(zhuǎn)移動(dòng)都可以了。
threejs鼠標(biāo)移動(dòng)物體,ThreeJS,javascript,3d,html5
附上完整代碼如下
index.html的代碼

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }
    #webgl {
      width: 400px;
      height: 300px;
      margin: 0 auto;
      border: 1px solid #ccc;
    }
  </style>
</head>
<body>
  <div id="webgl" ></div>
  <script type="importmap">
    {
      "imports":{
        "three":"../../three.js/build/three.module.js",
        "three/addons/": "../../three.js/examples/jsm/"

      }
    }
  </script>
  <script type="module" src="./index.js">
  </script>
</body>
</html>

index.js的代碼如下文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-680460.html

import * as THREE from 'three'
// 引入軌道控制器擴(kuò)展庫(kù)OrbitControls.js
import { OrbitControls } from 'three/addons/controls/OrbitControls.js'

// 創(chuàng)建一個(gè)三維場(chǎng)景,相當(dāng)于一個(gè)畫(huà)布
const scene = new THREE.Scene()

// 創(chuàng)建一個(gè)幾何體,相當(dāng)于在畫(huà)布上想要呈現(xiàn)的物體
const geometry = new THREE.BoxGeometry(50,50,50)

// 創(chuàng)建材質(zhì),相當(dāng)于畫(huà)畫(huà)時(shí)的顏料
const material = new THREE.MeshBasicMaterial({
  color:0xff0000,//設(shè)置顏色
  transparent:true,//開(kāi)啟透明
  opacity:0.5//設(shè)置透明度
})
// 添加輔助坐標(biāo)軸
// const axeshelper = new THREE.AxesHelper(100)
// scene.add(axeshelper)

// 創(chuàng)建物體,相當(dāng)于在畫(huà)物體的過(guò)程,將上面的幾何體和材質(zhì)結(jié)合起來(lái)形成物體
const mesh = new THREE.Mesh(geometry,material)
// 設(shè)置物體在場(chǎng)景中的位置
mesh.position.set(0,10,0)
// 將物體添加到場(chǎng)景中,相當(dāng)于將物體添加到畫(huà)布匯總
scene.add(mesh)
// console.log(mesh);

// 創(chuàng)建一個(gè)相機(jī),相機(jī)相當(dāng)于畫(huà)家的眼睛,
// PerspectiveCamera 透視相機(jī):有四個(gè)參數(shù),fov:視角,aspect:寬高比,一般定位為相機(jī)照射物體的寬高比值,
// near:近端點(diǎn),離相機(jī)最近的點(diǎn),far:遠(yuǎn)端點(diǎn),離相機(jī)最遠(yuǎn)的點(diǎn)
const width = 400
const height = 300
const camera = new THREE.PerspectiveCamera(30,width/height,0.1,3000)
// 設(shè)置相機(jī)的位置,即畫(huà)家的眼睛離畫(huà)布的位置
camera.position.set(200,200,200)
// 設(shè)置相機(jī)要看的位置,即眼睛要看的物體的位置
// 相機(jī)看原點(diǎn)
// camera.lookAt(0,0,0)
// 相機(jī)看向物體
camera.lookAt(mesh.position)
// 創(chuàng)建webgl渲染器
const renderer = new THREE.WebGLRenderer()
// canvas畫(huà)布寬高
renderer.setSize(width,height)
// 執(zhí)行渲染操作,將scene和camera關(guān)聯(lián)起來(lái),
// 相當(dāng)于太陽(yáng),你有一個(gè)空間scene,空間中有物體,有人的眼睛camera,但是沒(méi)有光是看不到物體的
renderer.render(scene,camera)
// 把渲染結(jié)果canvas畫(huà)布,添加到網(wǎng)頁(yè)上
// document.body.appendChild(renderer.domElement)
document.getElementById('webgl').appendChild(renderer.domElement)

// 設(shè)置相機(jī)控件軌道控制器OrbitControls
const controls = new OrbitControls(camera,renderer.domElement)
// 監(jiān)聽(tīng)軌道控制器的change事件,監(jiān)聽(tīng)到改變時(shí),重新執(zhí)行渲染操作渲染三維場(chǎng)景
controls.addEventListener('change',function(){
  renderer.render(scene,camera)
})

到了這里,關(guān)于Threejs入門(mén)之三:讓物體跟隨鼠標(biāo)動(dòng)起來(lái)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • threejs(6)-操控物體實(shí)現(xiàn)家居編輯器
  • ThreeJS-3D教學(xué)三:平移縮放+物體沿軌跡運(yùn)動(dòng)

    ThreeJS-3D教學(xué)三:平移縮放+物體沿軌跡運(yùn)動(dòng)

    我們?cè)陧?xiàng)目中會(huì)有一些這樣的需求,我們可視化一個(gè)場(chǎng)景,需要俯視、平移、縮放,方便觀察場(chǎng)景中的數(shù)據(jù)或者模型,之所以把這個(gè)案例拿出來(lái) 1、這是個(gè)很實(shí)用的需求,我相信很多人會(huì)用到 2、我自己認(rèn)為在實(shí)際案例中我們可以學(xué)習(xí)相關(guān)知識(shí)點(diǎn)更易吸收些 為了豐富本篇文章

    2024年02月03日
    瀏覽(20)
  • ThreeJS-移動(dòng)(三)

    ThreeJS-移動(dòng)(三)

    關(guān)鍵代碼 通過(guò)設(shè)置定位信息進(jìn)行移動(dòng) mesh.position.set(0, 0, 0); 拖動(dòng)物體:按住ctrl+按住鼠標(biāo)左鍵 進(jìn)行拖動(dòng) 代碼:? template ? div id=\\\"three_div\\\" ? /div /template ? script import * as THREE from \\\"three\\\"; import {OrbitControls } from \\\'three/examples/jsm/controls/OrbitControls\\\' export default { ? name: \\\"HOME\\\", ? components:

    2024年02月10日
    瀏覽(19)
  • ThreeJs的場(chǎng)景實(shí)現(xiàn)鼠標(biāo)拖動(dòng)旋轉(zhuǎn)控制

    ????????前面一個(gè)章節(jié)中已經(jīng)實(shí)現(xiàn)在場(chǎng)景中放置一個(gè)正方體,并添加燈光使得正方體可見(jiàn)。但是由于是靜態(tài)的還不能證明是3D的,我們需要添加一些控制器,使得通過(guò)鼠標(biāo)控制正方體可以動(dòng)起來(lái),實(shí)現(xiàn)真正的3D效果,由此引入OrbitControls組件,他實(shí)質(zhì)是改變相機(jī)的位置,實(shí)現(xiàn)

    2024年02月07日
    瀏覽(20)
  • threejs 實(shí)現(xiàn)場(chǎng)景漫游效果(相機(jī)沿著自定義軌道移動(dòng))

    threejs 實(shí)現(xiàn)場(chǎng)景漫游效果(相機(jī)沿著自定義軌道移動(dòng))

    效果視頻: Video_22-06-15_18-10-11 實(shí)現(xiàn)思路:先創(chuàng)建一條曲線curve作為運(yùn)動(dòng)路線,然后使用const points = curve.getPoints(n)方法將curve分成n-1段;我們可以通過(guò)points[n] 獲取第n個(gè)點(diǎn)的坐標(biāo)位置;將相機(jī)的位置設(shè)置為這個(gè)坐標(biāo),在動(dòng)畫(huà)中不斷地修改n的值達(dá)到移動(dòng)的效果;具體操作如下:

    2024年02月11日
    瀏覽(93)
  • Threejs入門(mén)之四:Threejs中的光

    Threejs入門(mén)之四:Threejs中的光

    前面我們用Threejs創(chuàng)建了一個(gè)3D立方體到瀏覽器,并使其跟隨鼠標(biāo)旋轉(zhuǎn)和縮放,但是,上帝說(shuō)要有光,于是就有了光~~~額,好吧,這一節(jié)我們來(lái)認(rèn)識(shí)下Threejs中的燈光,Threejs提供了很多燈光的API,這里我們主要了解下環(huán)境光(AmbientLight)、點(diǎn)光(PointLight)、平行光(DirectionalLight)、和聚

    2024年02月12日
    瀏覽(23)
  • threejs 相機(jī)控制camera-controls鼠標(biāo)和觸摸

    npm i?camera-controls 官網(wǎng)地址:相機(jī)控制 - npm (npmjs.com) three.js 的相機(jī)控件,類(lèi)似于 THREE。OrbitControls 還支持平滑過(guò)渡和 es6 導(dǎo)入。 相機(jī)移動(dòng) 用戶(hù)輸入 軌道旋轉(zhuǎn) 鼠標(biāo)左鍵拖動(dòng)/觸摸:?jiǎn)沃敢苿?dòng) 多莉(變焦) 鼠標(biāo)中鍵拖動(dòng),或鼠標(biāo)滾輪/觸摸:雙指捏合或捏出 卡車(chē)(平底鍋) 鼠標(biāo)

    2024年01月24日
    瀏覽(28)
  • Threejs入門(mén)之二十四:Threejs中的Animation動(dòng)畫(huà)

    Threejs入門(mén)之二十四:Threejs中的Animation動(dòng)畫(huà)

    Threejs為我們提供了強(qiáng)大的動(dòng)畫(huà)系統(tǒng)接口API,通過(guò)這些接口,我們可以很輕松的實(shí)現(xiàn)物體的移動(dòng)、旋轉(zhuǎn)、縮放、顏色變化、透明度變化等各種效果,今天我們就來(lái)了解下Threejs中的動(dòng)畫(huà)系統(tǒng)。 首先我們先了解幾個(gè)在Threejs動(dòng)畫(huà)系統(tǒng)中比較重要的組件 關(guān)鍵幀軌道(KeyframeTrack)是關(guān)鍵

    2024年02月10日
    瀏覽(23)
  • Threejs入門(mén)之十四:Threejs中的組(Group)對(duì)象

    Threejs入門(mén)之十四:Threejs中的組(Group)對(duì)象

    組其實(shí)就是一個(gè)集合,將不同的物體添加到一個(gè)組中,就形成了一個(gè)集合; 比如我們可以創(chuàng)建兩個(gè)物體,然后將這兩個(gè)物體使用group.add方法添加到同一個(gè)組中 Group的特性 在Threejs的官方文檔中介紹Group時(shí)說(shuō)它幾乎與Object3D相同,因此,Group的屬性和Object3D的相同 .children屬性 使用

    2024年02月06日
    瀏覽(22)
  • CSS實(shí)現(xiàn)鼠標(biāo)跟隨 3D 旋轉(zhuǎn)效果,讓交互活起來(lái)

    CSS實(shí)現(xiàn)鼠標(biāo)跟隨 3D 旋轉(zhuǎn)效果,讓交互活起來(lái)

    一淘模板(56admin.com)給大家介紹一下如何使用CSS實(shí)現(xiàn)有意思的鼠標(biāo)跟隨 3D 旋轉(zhuǎn)效果,讓交互更加生動(dòng),希望對(duì)大家有所幫助! 今天,群友問(wèn)了這樣一個(gè)問(wèn)題,如下所示的鼠標(biāo)跟隨交互效果,如何實(shí)現(xiàn): 簡(jiǎn)單分析一下,這個(gè)交互效果主要有兩個(gè)核心: 借助了 CSS 3D 的能力 元

    2024年02月10日
    瀏覽(37)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包