2015-09-14 71 views
2

我嘗試爲粒子磁盤的完整視圖設置好距離,並且同時有一個有效的線性比例表示磁盤比例的當前值作爲函數用鼠標放大。OpenGL - 在沒有glScalef的情況下設置好距離

場景具有以下參數:

w_width = 600; 
w_height = 600; 
g_nearPlane = 0.1f; 
g_farPlane = 1000.0f; 

我用下面的代碼樣品的3D場景的圖形初始化:

// Reset line scale value 
lineScaleValue = 100.0f; 
// Initialize View 
glViewport(0, 0, w_width, w_height); 

glMatrixMode(GL_PROJECTION); // Select The Projection Matrix 
glLoadIdentity(); // Reset The Projection Matrix 

// Perspective with angle set to 45 degrees 
gluPerspective(45.0f, (float) w_width/w_height, g_nearPlane, g_farPlane); 

glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix 
glLoadIdentity(); // Reset The Modelview Matrixi 

gluLookAt (0.0, 0.0, 3, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); 
glScalef(0.03f, 0.03f, 0.03f); 

上述數值爲gluLookAtglScalef已經選擇近似即手動無需精確計算。

我想只有磁盤(白色顆粒)的完整視圖。爲此,我知道磁盤的(x,y)平面的最大值和最小值: -25 < x <25-22 < y < 22

從此信息set z good distance,我可以做(用Fov的/ 2 = 45度):

z_distance = 25*tan(pi/4) + dist = 50 

dist = 25是在盤的前面。

所以我可以在我的示例代碼(而不是

gluLookAt (0.0, 0.0, 3, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); 
    glScalef(0.03f, 0.03f, 0.03f); 

)直接做:

gluLookAt (0.0, 0.0, 50, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); 

感謝

+0

什麼是磁盤的確切尺寸,以及您在哪個世界空間位置上繪製它? – derhass

+0

圓盤的確切尺寸是-25 youpilat13

回答

0

的最佳距離可以通過在你已經鏈接的帖子中給出的公式計算(不知道你是如何來到z_distance方程?):

visible_range = 2 * tan(fov/2) * distance 

在您的情況:

visible_range = 50 (-25 to 25) 
=> 
50 = 2 * tan(fov/2) * distance 
distance = 50/(2 * tan(fov/2)) = 25/tan(fov/2) 

由於半視場是在你的情況下45°和tan(45°)= 1,則最優解是

distance = 25 
相關問題