2009-10-08 40 views
3

在我的Java3D應用程序中,我有一個可移動的查看平臺(例如感謝「OrbitBehavior」和「KeyNavigatorBehavior」行爲),因此我可以將視角改變爲場景。 現在,我想添加一個對我的視圖「靜態」的對象,即當我移動視圖時(例如,像FPS中的播放器的槍),總是以同樣的方式查看對象。 現在,我嘗試了以下兩種方法來解決這個問題,但是他們都沒有工作。在Java3D中將對象附加到視圖平臺

1/將我的對象直接附加到ViewingPlatform(通過專用BranchGroup加上TransformGroup)。 在這種情況下,我的對象根本不顯示(我絕對不確定它實際上可以執行這樣的操作......)。這是我的這部分代碼:

代碼:(與view的ViewingPlatform中)

BranchGroup fixedBG = new BranchGroup(); 
TransformGroup fixedTG = new TransformGroup(); 
fixedTG.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); 
fixedTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); 
Transform3D transfo = new Transform3D(); 
transfo.setTranslation(new Vector3f(0.2f, 0.0f, -1.0f)); 
fixedTG.setTransform(transfo); 
ColorCube fixedCube = new ColorCube(0.2); 
fixedTG.addChild(fixedCube); 
view.addChild(fixedBG); 

2/適用於我的對象相同的變換(旋轉+翻譯;經由getTransform()檢索getViewPlatformTransform() - 我也嘗試了一些更復雜的東西,這些轉換之間的操作以及視圖PF和對象的初始位置)作爲查看平臺的一部分。我通過專門的行爲(與修改視圖位置的行爲相同的喚醒條件)實時執行所有操作。 這裏,當我移動視圖時,我的對象消失,並且有時在使用KeyNavigator的放大/縮小操作時(但實際上不穩定),我的對象有時會再次出現。

我敢肯定,我想要做的是可行的,可能很簡單,但現在,我沒有一個線索...

感謝由您的幫助

(PS:由於英語不是我的母語,我可以解釋我的問題相當混亂:不要猶豫,問我寫再次未理解的部分)

+0

我還沒有嘗試過,但如果您在完成所有轉換之後再附加此選項,以免影響。 – 2009-10-08 13:29:21

+0

我幾年沒有看過Java3d,但將對象附加到查看平臺聽起來對我來說是正確的。嘗試翻譯一下,以確保你沒有找到它在相機後面? – Mikeb 2009-10-08 13:32:30

+0

@詹姆斯布萊克:問題是我的視圖轉換是由用戶在運行時完成的。 @Mikeb:我在一個非常基本的例子(只有一個ColorCube)上嘗試了幾種翻譯(兩種情況下都是+ z/-z):不是這樣。 – Sobe 2009-10-08 13:36:57

回答

2

我不是100%肯定,如果這會工作,但我查看了一些文檔 - (http://graphcomp.com/info/specs/java3d/j3dguide/Intro.doc.html#47470),例如,我認爲你必須顛倒順序在場景圖中。因此,通常情況下,您的視圖平臺掛起掛起掛起語言環境的分支組的轉換組。轉換組是決定視圖的方向。如果您將ColorCube附加到該變換組,然後將視圖平臺附加到該顏色的多維數據集,則視圖和多維數據集應該一起移動。我認爲,您可以設置另一個轉換組來抵消視圖中的多維數據集。控制相機的用戶正在操縱分支上方的變換組。

+0

是的! 事實上,ViewPlatform實際上是ViewPlatformTransform節點的一個子節點,所以通過將我的對象(多維數據集)附加到這個變換組中,它可以正常工作。 非常感謝您的幫助。 – Sobe 2009-10-08 14:25:05