Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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 看看为什么上方向向量而不是角度_Opengl_Graphics_Camera_Glulookat - Fatal编程技术网

Opengl 看看为什么上方向向量而不是角度

Opengl 看看为什么上方向向量而不是角度,opengl,graphics,camera,glulookat,Opengl,Graphics,Camera,Glulookat,我知道在OpenGL中,我们使用gluLookAt将相机相对于世界放置,从而定义将要绘制的图像 “眼睛”指定相机的位置,“中心”指定相机指向的点。一旦我们知道了这两个,我们就可以从眼睛到中心画一条直线。摄像机平面将垂直于这条线 因为我们知道这个平面,上方向向量指定了相机的顶部-基本上这个平面的哪个方向是向上的。因此,上方向向量始终与连接中心和眼睛的向量正交 我的问题是,当我们只想知道关于连接“中心”和“眼睛”的线的旋转角度时,为什么我们需要全向量。这背后的原因是我不知道的计算优势吗?如果有人指定

我知道在OpenGL中,我们使用gluLookAt将相机相对于世界放置,从而定义将要绘制的图像

“眼睛”指定相机的位置,“中心”指定相机指向的点。一旦我们知道了这两个,我们就可以从眼睛到中心画一条直线。摄像机平面将垂直于这条线

因为我们知道这个平面,上方向向量指定了相机的顶部-基本上这个平面的哪个方向是向上的。因此,上方向向量始终与连接中心和眼睛的向量正交


我的问题是,当我们只想知道关于连接“中心”和“眼睛”的线的旋转角度时,为什么我们需要全向量。这背后的原因是我不知道的计算优势吗?如果有人指定了一个错误的上方向向量,它与视线方向不正交,该怎么办?

您传入的上方向向量用于指示上方向,但它与叉积一起使用。我认为gluLookAt的目的是简化用户所需的计算,因此,例如,您只需通过(0,1,0)即可指示所需的向上方向是沿着正Y轴


如果你想要更高的效率,你可以完全避免GluLook,我同意它是用来简化计算的,但是它可以只是1个角度,而不需要整个向量。这个问题显示了叉积(),它将法线与上向量交叉,然后再次与法线交叉。这似乎是多余的。我不明白为什么?原始的上方向向量并不意味着与视图方向正交-它只是确定了向上的一般方向,例如y轴。如果将正交上方向向量与视图交叉,或将近似上方向向量与视图交叉,则将得到相同的边向量。由于gluLookAt不期望正交上方向向量,因此它将边向量与视图交叉以获得正交上方向向量。如果你使用一个角度,你会旋转哪个轴?视线方向?这需要您根据视图方向调整角度。我建议您根据什么来阅读此角度?如果没有
眼睛
向量,在调用
gluLookAt(…)
(Z轴)时,实际上只有3D向量空间的一个轴,即使这个轴也不会直接传递给函数,而是从原点和中心位置计算出来的。我再说一遍,这个角度到底是相对于什么的?如果它是相对于Z轴的,那么有无限多可能的
向上
向量可以满足你的角度,这根本没有用。