我有一個特定的模型,可以在查看器中充當控件。用戶可以點擊它的不同部分來對查看器中的另一個模型執行轉換(如Unity或Blender等應用程序中的控件/控制柄)。呈現相同尺寸的3D模型,無論相機位置如何
無論如何放大/縮小相機,我們都希望控件保持相同的大小。我試圖根據物體和相機之間的距離縮放它的尺寸,但它不太正確。有沒有完成這樣的事情的標準方式?
控件使用固定管道渲染,但我們有其他組件使用可編程管線。
我有一個特定的模型,可以在查看器中充當控件。用戶可以點擊它的不同部分來對查看器中的另一個模型執行轉換(如Unity或Blender等應用程序中的控件/控制柄)。呈現相同尺寸的3D模型,無論相機位置如何
無論如何放大/縮小相機,我們都希望控件保持相同的大小。我試圖根據物體和相機之間的距離縮放它的尺寸,但它不太正確。有沒有完成這樣的事情的標準方式?
控件使用固定管道渲染,但我們有其他組件使用可編程管線。
最簡單的答案是「使用可編程管線」,因爲它並不難寫
if(normalObject) {
gl_Position = projection * view * model * vertex;
} else {
gl_Position = specialMVPMatrix * vertex;
}
而你會花更多的代碼,試圖讓這個在固定功能,流水線工作並有更多的CPU週期渲染它。
與固定管道,要做到這一點最簡單的方法是,當你呈現的控件根本就沒有應用任何轉換:
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
// draw controls
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
的glPushMatrix()
/glPopMatrix()
通話將確保之前的矩陣在恢復此代碼片段的結尾。
根本沒有變換,映射到窗口的座標範圍在兩個座標方向都是[-1.0 .. 1.0]。如果您需要其他任何東西,則可以在開始繪製控件之前應用必要的轉換。
我不太確定這裏的問題是什麼。我假設你知道視角和正射投影之間的區別?聽起來你所需要的只是後者。 –