簡體   English   中英

4D到3D透視投影

[英]4D to 3D perspective projection

我正在嘗試計算3D世界中4D點的位置。 我從2D開始,嘗試將其擴展到3D,然后擴展到4D。 首先,我發現它很容易計算2D點在直線上的投影位置。

Whoops, there should be () in the first equation: x/(a+y)

現在我發現,如果我將P(X,Y,Z)拆分為P1(X,Z)和P2(Y,Z),計算它們的Q,然后建立一個點,則在3D世界中同樣適用P'(Q1,Q2)(假設Im從C(0,-a)點看Z軸正無窮大並渲染到XY平面)。

nx = (a*x)/(a+z);
ny = (a*y)/(a+z);

然后我認為它就像添加下一個點P3一樣簡單,並提出了

nx = (a*x)/(a+z);
ny = (a*y)/(a+z);
nw = (a*w)/(a+z);

我覺得這很奇怪,因為W(新軸)實際上僅影響最后一點的Z,並且在提及tesseract時,它應該影響所有尺寸...

這是行不通的,所以我想問一下您是否可以提供一些有關Im做錯了什么的詳細信息。 我非常確定這是“點拆分”問題,方程式應該更復雜。 請不要用矩陣和四元數來攻擊我。 我只想在(0,-1)擁有一個簡單的靜態相機,看着(0,0)...

謝謝你的幫助!

  • 2D (x,y)中,y = 0上的投影表示線與線的交點:

     x'/a = x/(a+y) 
  • 3D (x,y,z)中,z = 0上的投影表示線與平面的交點:

     for y=0: x'/a = x/(a+z) for x=0: y'/a = y/(a+z) 
  • 4D (x,y,z,w)中,投影到w = 0表示線與超平面的交點:

     for y=0, z=0: x'/a = x/(a+w) for x=0, z=0: y'/a = y/(a+w) for x=0, y=0: z'/a = z/(a+w) 
  • ...等等

或者,可以使用參數形式來計算直線和超平面的交點,其中直線的描述如下:

[px,py,pz,pw] = [p0x,p0y,p0z,p0w] + t * [p1x,p1y,p1z,p1w]

其中參數t是任何數字

超平面的描述如下:

[hx,hy,hz,hw] = [h0x,h0y,h0z,h0w] + a * [h1x,h1y,h1z,h1w] + b * [h2x,h2y,h2z,h2w] + c * [h3x,h3y,h3z,h3w]

現在可以通過求解找到交點:

[px,py,pz,pw] = [hx,hy,hz,hw]

或更明確:

[p0x,p0y,p0z,p0w] + t * [p1x,p1y,p1z,p1w] = [h0x,h0y,h0z,h0w] + a * [h1x,h1y,h1z,h1w] + b * [h2x,h2y,h2z,h2w] + c * [h3x,h3y,h3z,h3w]

除非線平行於超平面,否則可以求解4個方程(每個x,y,z,w維一個)和4個未知數(a,b,c,t)。

上面的想法受4D分析幾何的約束(其中w分量代表自己單獨的維),不應將它們與齊次坐標混合(其中w分量用於將平移/投影集成到4D矩陣中並被丟棄)在圖形流水線的末端附近按透視圖划分)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM