簡體   English   中英

OpenGL在相機周圍移動場景

[英]OpenGL moving a scene around the camera

我正在3D小世界中工作,現在正在修理相機。

相機保持在世界上的固定位置,而可以使用鼠標和鍵盤在世界中移動相機(模擬相機在世界中移動)。

這是我的繪制函數中的代碼:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// store current matrix
glMatrixMode( GL_MODELVIEW );

glLoadIdentity();

glPushMatrix( );

GLfloat light_pos [] = {3, -1, 0, 1};
GLfloat light_dir [] = {0, 0, -1};

glLightfv(GL_LIGHT0, GL_POSITION, light_pos);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, light_dir);

glTranslated(-cam->getXPos(), -8, -cam->getZPos());
glRotated(cam->getYRot(), 1, 0, 0);
glRotated(cam->getXRot(), 0, 1, 0);

GLfloat diff [] = { .5, .5, .5, 1.0 };

glMaterialfv ( GL_FRONT, GL_DIFFUSE, diff );

glPushMatrix();
glTranslated(0, 0, -20);
glCallList(displayLists[LISTWALL]);
glPopMatrix();

// restore current matrix
glMatrixMode( GL_MODELVIEW );
glPopMatrix( );

只要我站着不動,只環顧四周,一切都很好。 另一方面,當我移動時,奇怪的事情開始發生。

首先,相機的Y坐標發生變化,但應將其固定為y = 8(這就是為什么我將場景轉換為-8的原因)

其次,當我嘗試在世界范圍內移動時,向前按壓只能沿z軸,但是您會到達相機所指向的位置(可能與第一個問題有關)

最后,當我在場景中四處移動時,周圍的景象開始變得怪異,看起來相機不僅圍繞自身旋轉,而且圍繞起點旋轉。 (這在完全3D的世界中顯而易見,而不是我在此處顯示的帶有1個多邊形的簡單示例)

在嘗試了一些隨機的事情后,我發現了解決方案,我只需要交換旋轉和平移,x和y旋轉必須在平移之前發生。

這就解決了我的問題中描述的每個問題,相機停留在y = 8處,旋轉不再圍繞起點發生,而是圍繞相機所在的點發生,移動也固定,當向前推動時相機沿着原始的Z軸。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM