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 .

从这个帖子设置z良好的距离,我可以做到(与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);

?

谢谢

最佳距离可以通过你已经链接的帖子中给出的公式计算(不确定你是如何得到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

最新更新