我已經使用OpenGL/SDL創建了這個基本的3D演示。我處理了鍵盤迴調,因此我可以使用'a'和's'向左和向右「移動」,並使用's'和'w'向前和向後移動。如何使用OpenGL/SDL將鼠標控制爲像FPS一樣的攝像頭?
但是,我現在想做到這一點,所以我可以控制我的相機根據我的鼠標移動「尋找」的方向。就像在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
如果有人可以給我一些技巧,我應該用什麼算法來處理鼠標回調方面的照相機,我將不勝感激。
謝謝!
感謝您輸入CookieOfFortune。我偶然發現一些指南,建議將鼠標置於屏幕中央。你認爲我應該這樣做嗎? – KingNestor 2009-04-24 02:15:40