Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL-在没有glScalef的情况下设置良好的距离_Opengl_Zooming_Glulookat - Fatal编程技术网

OpenGL-在没有glScalef的情况下设置良好的距离

OpenGL-在没有glScalef的情况下设置良好的距离,opengl,zooming,glulookat,Opengl,Zooming,Glulookat,我尝试为粒子磁盘的全视图设置一个合适的距离,同时具有一个有效的线比例,它表示磁盘比例的当前值,作为鼠标缩放的函数 场景具有以下参数: 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 = 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);
gllookat
glScalef
的上述值是近似选择的,即在没有精确计算的情况下手动选择的

我只想有一个磁盘(白色粒子)的完整视图。 为此,我知道磁盘(x,y)平面上的最大值和最小值:
-25
就你而言:

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

磁盘的确切尺寸是多少?在哪个世界空间位置绘制?磁盘的确切尺寸是-25gluLookAt (0.0, 0.0, 50, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
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)
distance = 25