2009-09-07 36 views
0

我有一個3D建模問題,與XNA等3D框架無關。 換句話說,我必須自己運行計算(使用某些框架功能即可)。3D建模問題

我有一組N個3D點,我們稱它們爲p1到pN。 雖然這些點是未知的,但當相機具有由單位矢量U1描述的方位時,我知道他們的投影2D位置是什麼(pp1到ppN)。

如何通過不同的向量U2描述相機的方向不同時如何找出這些點的投影?

任何幫助表示讚賞:)

感謝

回答

1

你不能。當您只知道攝像機的位置和方向以及某個點的投影時,您不知道該點的實際位置 - 它可能位於從攝像機通過投影平面到無窮遠線的任何位置。因此,你甚至無法告訴(在一般情況下)該點是否在不同的位置和方向上對相機可見。

但是,如果您知道有關點的信息 - 例如它們形成已知大小的立方體 - 您可以使用這些知識和點的投影來計算點的位置,然後找到點的投影用於其他相機位置和方向。

+0

嗯...感謝回覆時,我在編輯你的回覆時編輯了我的問題,以防萬一kes有什麼區別。 如果我們假設所有這些點在當前相機位置都有Z = 0會怎樣? – georgiosd 2009-09-07 17:29:40

+0

OP在給出不同的方向時詢問點的投影位置,但不是位置。位置保持不變。 – strager 2009-09-07 17:30:37

+0

如果您知道點的z座標(或任何其他座標),則可以根據投影計算它的位置。 – 2009-09-07 17:34:37

1

我可能在這裏完全錯了,因爲我很長時間沒有碰過3D數學或矩陣。

取決於http://www.songho.ca/opengl/gl_transform.html

的公式:

D * M * P * W * V = S 
Data * Model * Perspective * W * Viewport = Screen 

你知道M1P1W1V1S1
您正在尋找S2給定M2P2=P1W2=W1,V2=V1
另外,您知道D1=D2(3D點不移動)。

D1 * M1 * P1 * W1 * V1 = S1 
D1 * M2 * P1 * W1 * V1 = S2 

解決D1和把它們等同起來:

D1 = S1 * M1^-1 * P1^-1 * W1^-1 * V1^-1 
D1 = S2 * M2^-1 * P1^-1 * W1^-1 * V1^-1 
S1 * M1^-1 * P1^-1 * W1^-1 * V1^-1 = S2 * M2^-1 * P1^-1 * W1^-1 * V1^-1 

刪除同類項:

S1 * M1^-1 = S2 * M2^-1 

現在解決S2:

S1 * M1^-1 * M2 = S2 
+2

當然,你可以反演計算,但當且僅當你有兩個投影座標和z /深度值。但是如果你的基地只是一個形象,你不再有第三個座標,並且運氣不好。 – 2009-09-07 18:18:12