我是新來的openGL,我對模型視圖轉換非常困惑。我理解所有的轉換過程,但是當涉及到投影矩陣時,我迷失了:(我的問題是,如果我有一個點P(x,y,z),我該如何檢查這個點是否會平行剪輯音量或透視剪裁體積或者定義的剪裁捲上如何界定呢?這是什麼過程背後的數學背景?如何檢查一個對象是否位於OpenGL的裁剪區域之外?
感謝,
我是新來的openGL,我對模型視圖轉換非常困惑。我理解所有的轉換過程,但是當涉及到投影矩陣時,我迷失了:(我的問題是,如果我有一個點P(x,y,z),我該如何檢查這個點是否會平行剪輯音量或透視剪裁體積或者定義的剪裁捲上如何界定呢?這是什麼過程背後的數學背景?如何檢查一個對象是否位於OpenGL的裁剪區域之外?
感謝,
模型 - 視圖 - 投影矩陣僅僅適用於對象,然後檢查如果它超出邊剪輯的座標圓臺,這是由飛機定義:
-w < x < w
-w < y < w
0 < z < w
所以,如果你有一個點p是一個vec3和模型視圖投影矩陣M,那麼在GLSL中它看起來像這樣:
bool in_frustum(mat4 M, vec3 p) {
vec4 Pclip = M * vec4(p, 1.);
return abs(Pclip.x) < Pclip.w &&
abs(Pclip.y) < Pclip.w &&
0 < Pclip.z &&
Pclip.z < Pclip.w;
}
好方法,所以+1 ... – 2011-06-16 12:24:09
我猜你測試邊界框使用8檢查爲每個角落? – TheJosh 2014-01-05 10:56:19
要確定給定的點會顯示在屏幕上,你測試對viewing frustum請參見本域剔除教程:
您想要了解涉及的數學,還是隻想知道如何獲得答案? – 2011-06-10 02:02:20
@Jerry Coffin:我也想學習數學背景知識。我搜索了一下,發現我可以使用反饋模式來檢查,但收益是性能,所以我認爲數學解釋會更有用。謝謝。 – Chan 2011-06-10 02:05:57
一個起點將是OpenGL規範。例如,OpenGL 2.0的2.11節,位於:http://www.opengl.org/documentation/specs/version2.0/glspec20.pdf。儘管作爲規範的一部分,但這部分主要是教程,完成一個相當不錯的圖表,使用的確切矩陣乘法等。 – 2011-06-10 02:16:46