我真的是新東西。我想製作一個簡單的3D場景,我可以在這裏與PointerLockControls一起飛行,但我也想要一些手電筒。所以聚光燈應該指向與相機相同的方向。點SpotLight在相機的方向three.js(手電筒)
我已經讓聚光燈跟隨相機,但它的目標是綁定到0,0,0。
達到此目的的最佳方法是什麼?
謝謝。
我真的是新東西。我想製作一個簡單的3D場景,我可以在這裏與PointerLockControls一起飛行,但我也想要一些手電筒。所以聚光燈應該指向與相機相同的方向。點SpotLight在相機的方向three.js(手電筒)
我已經讓聚光燈跟隨相機,但它的目標是綁定到0,0,0。
達到此目的的最佳方法是什麼?
謝謝。
該SpotLight
目標是Object3D
,而不是Vector3
。
spotlight.target = myObject;
你的情況最好的解決辦法是使用PointLight
代替,並使用此模式:如果你仍然想使用聚光燈
scene.add(camera);
camera.add(pointLight);
,然後做這樣的事情:
scene.add(camera);
camera.add(spotLight.target);
spotLight.target.position.set(0, 0, -1);
spotLight.position.copy(camera.position); // and reset spotlight position if camera moves
它一般不要求相機被添加作爲場景的一個孩子,但它需要在這種情況下,因爲光被添加爲相機的孩子。
three.js所r.69
我有我解決了同樣的問題如下:
flashlight = new THREE.SpotLight(0xffffff,4,40);
camera.add(flashlight);
flashlight.position.set(0,0,1);
flashlight.target = camera;
由於Spotlight的.TARGET需要是一個對象(而不是一個位置),我發現它精神上更容易簡單地把手電筒背後將相機直接,然後瞄準它在相機。因此,光線照在照相機上並照亮它前面的東西。
這個方法是好的,如果你所在的手電筒舉行靠近胸部一側(中央對身體),而不是關閉手電筒後的效果。
這對我工作感謝!一直試圖找到一些工作代碼。你知道聚光燈是否可以獨立於相機進行互動嗎?我在這裏問過一個問題:http://stackoverflow.com/questions/17827292/add-interactivity-to-a-spotlight-in-three-js – Paul 2013-07-24 23:08:58
通過WestLangley的解決方案的啓發上面,我發現spotlight.target和聚光燈本身可以作爲孩子相同的對象,無論是相機或其他物體,比如一輛汽車或槍。然後它們相對於父對象進行定位,因此不需要將位置從一個對象複製到另一個對象。
你可以,例如,做這樣的事情:
scene.add(camera);
camera.add(gun);
gun.position.set(-30,-30,0);
gun.add(spotlight);
spotlight.position.set(0,0,30);
gun.add(spotlight.target);
spotlight.target.position.set(0,0,31);
而現在的槍將,默認情況下,按照攝像頭,聚光燈將沿着槍亮起。如果槍因某種原因旋轉(偏轉子彈或在地面或其他地方爬行),聚光燈也會旋轉。 THREE是一款不錯的軟件。 :-)
如果將聚光燈的相機,並在相同的方向將相機指向它,不定位它遠離中心,則光錐看起來不斷循環。對於許多應用來說,它看起來更酷更實際,它在投影中動態改變形狀。一個小的偏移量就是它所需要的(例如在我上面的例子中,雖然我沒有測試過那個)。
是的,但PointLight不給我陰影。有沒有辦法讓他們與PointLight? – 2013-05-12 20:36:54
確實,pointLights不支持陰影。但是,如果光線位於相機所在的位置,則無論如何您都看不到陰影,因爲投射陰影的物體擋在了路上。 – WestLangley 2013-05-12 21:17:03
好吧,也許壞的例子 - 任務: 我想在node.js作爲服務器,(多人)同步場景中的兩個單位,我想閃光燈在每個單位,指向定義的方向。通過套接字發送此類信息的最佳方式是什麼? (通過接受按鈕的方式?:)) – 2013-05-14 14:49:28