我使用 OpenGL/SDL 创建了这个基本的 3D 演示。我处理了键盘回调,因此我可以使用“a”和“s”向左和向右“扫射”,并使用“s”和“w”向前和向后移动。
但是,我现在想制作它,这样我就可以根据我的鼠标移动来控制我的相机“看”的方向。就像在 FPS 射击游戏中一样,当您四处移动鼠标时,它会使相机环顾各个方向。
有人知道我如何在移动鼠标时利用鼠标回调来正确“指向”相机类吗?
#include "SDL.h"
#include "Camera.h"
Camera cam;
Scene scn;
//<<<<<<<<<<<<<<<<<myKeyboard>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void myKeyboard(unsigned char key, int x, int y)
{
switch(key)
{
case 's': cam.slide(0.0, 0.0, 0.2); break;
case 'w': cam.slide(0.0, 0.0, -0.2); break;
case 'a': cam.yaw(-1.0); break;
case 'd': cam.yaw(1.0); break;
case 27: exit(0);
}
glClear(GL_COLOR_BUFFER_BIT);
glutPostRedisplay();
}
void displaySDL( void )
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
scn.drawSceneOpenGL();
glFlush();
glutSwapBuffers();
}
int main( int argc, char* argv[] )
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(640, 480);
glutInitWindowPosition(100, 100);
glutCreateWindow("SDL Sence With Camera");
glutKeyboardFunc(myKeyboard);
glutDisplayFunc(displaySDL);
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
glEnable(GL_NORMALIZE);
glViewport(0, 0, 640, 480);
scn.read("fig5_63.dat");
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
scn.makeLightsOpenGL();
cam.set(2.3, 1.3, 2.0, 0, 0.25, 0, 0, 1, 0);
cam.setShape(30.0f, 64.0f/48.0f, 0.5f, 50.0f);
glutMainLoop();
return 0;
}
这是一个包含我的 SDL 文件、我在上面粘贴的文件和我的相机类的 tar。 http://www.filedropper.com/fpsdemotar
如果有人能给我一些提示,告诉我在处理指向相机的鼠标回调时应该使用什么算法,我将不胜感激。
谢谢!
最佳答案
鼠标上下移动 -> 俯仰,鼠标左右移动 -> 偏航。
我不相信让你的 'a' 和 'd' 键偏航是准确的。
实际上,您的整个设置对我来说有点奇怪,因为从几何的角度来看,我将坐标视为 (x, y, z)。您将 s 和 w 设置为“向上”和“向下”(z),而不是“向前”和“向后”(y)。我把它看作是一个平放在 table 上的 xy 图,你是从上面看的。靠近它会降低从平面出来的 z。
这里是我将如何设置它:
w -> slide(0, 0.2, 0); // y
s -> slide(0, -0.2, 0);
a -> slide(-0.2, 0, 0); // x
d -> slide(0.2, 0, 0);
//The following goes in your mouse event handler or something:
pitch(newMouseLocation.y - oldMouseLocation.y); // mouse y is related to pitch
yaw(newMouseLocaiton.x - oldMouseLocation.x); // mouse x is related to yaw
我知道你不需要遵循这个坐标约定,但对我来说它似乎更直观。
希望对您有所帮助。
关于c++ - 如何使用 OpenGL/SDL 让我的鼠标像 FPS 一样控制相机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/784247/