[英]Moving Camera in OpenGL
我正在用OpenGL渲染地形。 我的代碼如下:
void Render_Terrain(int k)
{
GLfloat angle = (GLfloat) (k/40 % 360);
//PROJECTION
glm::mat4 Projection = glm::perspective(45.0f, 1.0f, 0.1f, 100.0f);
//VIEW
glm::mat4 View = glm::mat4(1.);
//ROTATION
//View = glm::rotate(View, angle * -0.1f, glm::vec3(1.f, 0.f, 0.f));
//View = glm::rotate(View, angle * 0.2f, glm::vec3(0.f, 1.f, 0.f));
//View = glm::rotate(View, angle * 0.9f, glm::vec3(0.f, 0.f, 1.f));
View = glm::translate(View, glm::vec3(0.f,0.f, -4.0f)); // x, y, z position ?
//MODEL
glm::mat4 Model = glm::mat4(1.0);
glm::mat4 MVP = Projection * View * Model;
glUniformMatrix4fv(glGetUniformLocation(shaderprogram, "MVP_matrix"), 1, GL_FALSE, glm::value_ptr(MVP));
//Transfer additional information to the vertex shader
glm::mat4 MV = Model * View;
glUniformMatrix4fv(glGetUniformLocation(shaderprogram, "MV_matrix"), 1, GL_FALSE, glm::value_ptr(MV));
glClearColor(0.0, 0.0, 0.0, 1.0);
glDrawArrays(GL_LINE_STRIP, terrain_start, terrain_end );
}
我可以繞X,Y,Z軸旋轉,縮放地形,但是找不到移動相機的方法。 我正在使用OpenGL 3+,對圖形有點陌生。
最好的移動照相機的方法是使用gluLookAt(),它可以模擬照相機的移動,因為照相機無法移動。 該函數有9個參數。 前3個是相機准確定位的眼睛的XYZ坐標。 后三個參數是中心的XYZ坐標,即相機從眼睛看到的點。 它始終將成為屏幕的中心。 第三個參數是UP向量的XYZ坐標,該向量從眼睛垂直向上指向。 通過操縱這3個XYZ坐標,您可以模擬所需的任何相機運動。
查看此鏈接 。
更多詳情:
-例如,如果要圍繞對象旋轉,則將眼睛圍繞上矢量旋轉。 -如果要向前或向后移動,請在眼睛上加上或減去中心點。 -如果要向左或向右傾斜相機,請在外觀向量為中心-眼睛的情況下圍繞外觀向量旋轉上向量。
gluLookAt在不贊成使用的固定功能管道上運行,因此應改用glm :: lookAt。
您當前正在使用常量向量進行翻譯。 在注釋掉的代碼(我假設您用來測試旋轉)中,您使用angle
來調整旋轉。 您應該有一個類似的變量進行翻譯。 然后,您可以將glm::translate
調用更改為:
View = glm::translate(View, glm::vec3(x_transform, y_transform, z_transform)); // x, y, z position ?
並獲得翻譯。
您可能應該將多個參數傳遞到Render_Terrain
,因為平移和旋轉至少需要六個參數。
在OpenGL中,相機始終處於(0,0,0)。 您需要將矩陣模式設置為GL_MODELVIEW,然后使用glTranslate,glRotate,glLoadMatrix等修改或設置模型/視圖矩陣,以使攝像機看起來已經移動了。 如果您使用的是GLU,則可以使用gluLookAt將相機指向特定的方向。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.