我尝试为粒子磁盘的完整视图设置一个良好的距离,同时有一个有效的线刻度,它代表磁盘刻度的当前值,作为使用鼠标缩放的函数。
场景具有以下参数:
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);
gluLookAt
和glScalef
的上述值已大致选择,即手动无需精确计算。
我想只有磁盘的完整视图(白色粒子)。
为此,我知道磁盘的(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 :(得分: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°和棕褐色(45°)= 1的情况下,最佳解决方案是
distance = 25