2013-05-02 20 views
1

我是新的Direct3D,圖形,HLSL,C++,並且我試圖寫一個程序來呈現不同的幾何形狀的多維(例如超立方體),則程序假定給用戶之後從所述用戶接收的頂點定義了尺寸的數量,繪製,旋轉和平移形狀。Direct3D和HLSL不同大小的頂點和multiddimensional幾何對象?

  • 第一個問題是如何定義動態頂點結構(是否可以使用指針)。第二:在何處將形狀從x維投影到三維空間,我應該在代碼(CPU)中執行該操作,還是可以將對象頂點和投影矩陣傳遞給着色器(HLSL ),如果是的話(尤其是矩陣在運行時定義的大小)。

  • 與上述視圖矩陣相同的問題(假設對象是4-d我希望程序放大/縮小 - 接近或在x-4方向上移動)I想要處理物體的空間而不是投影的空間「)

  • 第三:如果上述所有內容在着色器中都不可能,我可以使用C++ amp(或其替代品)來加速執行在主程序中執行這些操作,否則會導致「Draw()」功能的性能下降。

我搜查了網絡和「Stackoverflow」,但我找不到任何使用。

+1

如果你的問題分解成單一的問題,你可能會得到更好的反應。但是FWIW,我敢肯定你不能在着色器中使用指針。 – LarsH 2013-05-03 00:00:02

+0

@LarsH感謝您的評論我不能將它分解成單個問題,因爲它們都是相關的,所有上述問題都來自同一個源,這是超維對象轉換的好地方,還有一件事很多「堆棧溢出」成員傾向於將實際問題視爲非建設性或其他問題,將上述問題分解爲兩個問題,一個問題涉及頂點,另一個問題涉及着色器,最有可能會使問題關閉。 – 2013-05-03 11:15:24

+0

還有一件事:如果我無法將不同長度的頂點傳遞給着色器,並且我想旋轉超立方體,那麼我應該旋轉它的四維頂點,將結果投影到三維空間並每幀重新註冊頂點?會不會導致性能下降? – 2013-05-03 14:35:27

回答

1

免責聲明:我不是在GPU和着色器的專家;並且我使用了OpenGL/WebGL/GLSL而不是Direct3D/HLSL。所以我只回答這個問題,因爲沒有其他人。 :-)

關於指針:我敢肯定你不能在GPU內使用指針,因爲您發送給GPU的數據將在GPU內存不可預知的地址(位置)。

但是關於動態數據結構(可變數量的維度),似乎可以通過改變傳遞給vertexAttribPointer()或等價物的「size」參數來實現。你傳入一個包含所有頂點座標的平面數組,每個頂點有n個座標;並使用size參數來告訴着色器n是什麼。

然後,在頂點着色器,可以從N個維度中的數據投影到3,使用在着色器從傳入參數構建的投影矩陣。

我想類似地,在片段(像素)着色器,您可以使用從傳入的參數在着色器中構建的視圖矩陣將項目中的數據從3維擴展到2。具體問題。說實話,我還沒有發現因此要爲生產用於獲取回答了有關問題的圖形的地方,因爲它是一些其他的話題,像Python。您可能在Direct3D特定的網站上運氣更好。

+2

謝謝,這肯定幫了我很多。 – 2013-05-03 23:35:54