我昨天更新了我的问题,希望有人澄清这个问题!
当应用俯仰偏航(假设我们选择此顺序)角度来实现空中摄像机时,我认为我们可以像这样计算视图矩阵:
有些网站支持此观点,例如Using a camera and simple user input 和OpenGL Transformation,他们的代码风格如下:
// First, transform the camera (viewing matrix) from world space to eye space
// Notice all values are negated, because we move the whole scene with the
// inverse of camera transform
glRotatef(-roll, 0, 0, 1); // roll
glRotatef(-yaw, 0, 1, 0); //yaw
glRotatef(-pitch, 1, 0, 0); // pitch
glTranslatef(-cameraPosition[0], -cameraPosition[1], -cameraPosition[2]);
我确实认为这是对的。
Red book pilotView(7th edition),A C++ Camera Class for Simple OpenGL FPS Controls ,First Person Camera Control with LWJGL,Modern OpenGL 04 - Cameras, Vectors & Input 像这样的代码:
glRotatef(roll, 0, 0, 1); // roll
glRotatef(yaw, 0, 1, 0); //yaw
glRotatef(pitch, 1, 0, 0); // pitch
glTranslatef(-cameraPosition[0], -cameraPosition[1], -cameraPosition[2]);
它会起作用,而不会对用户互动产生太大影响,但从数学的角度来看,它不是那么正确。
为什么书籍和其他人选择第二种代码风格?请帮助澄清这个问题!
答案 0 :(得分:0)
我认为这是一个惯例问题。例如,当你的鼻子向上时,俯仰角是正的吗?两种方法都可以正常工作,您可能只需要根据您选择的惯例来否定角度。在现实世界中,我有关于什么" dip"和方位角"方位角"与地质学家一直意味着在地质学界似乎没有固定的惯例。
似乎您的Lloyd Goodall参考不会否定glTranslatef()调用中的摄像头位置。又一个惯例?
回答他们为什么选择代码风格的问题......我认为这有点武断,所以作者只会这样做。
答案 1 :(得分:0)
在OpenGL中,Camera矩阵是ModelView矩阵的一部分
要形成正确的ModelView
矩阵,您需要:
ModelView = Model * Inverse(View)