Я создал эту базовую 3D-демонстрацию, используя OpenGL / SDL. Я обработал обратный вызов клавиатуры, чтобы я мог «пролистать» влево и вправо, используя «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;
}
Это tar с моим файлом SDL, файлом, который я вставил выше, и моим классом Camera.
http://www.filedropper.com/fpsdemotar
Если кто-то может дать мне несколько советов о том, какой алгоритм мне следует использовать при обработке обратных вызовов мыши с точки зрения наведения камеры, я был бы признателен за это.
Спасибо!