gpt4 book ai didi

c++ - 在 OpenGL 中移动相机

转载 作者:行者123 更新时间:2023-11-30 00:39:31 25 4
gpt4 key购买 nike

我正致力于在 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 坐标,也就是相机所在的位置。第二个 3 个参数是中心的 XYZ 坐标,这是相机从眼睛看的点。它永远是屏幕的中心。第三个 3 个参数是 UP vector 的 XYZ 坐标,它从眼睛垂直指向上方。通过操纵这 3 个 XYZ 坐标,您可以模拟您想要的任何相机运动。

看看这个 link .

更多详情:

- 例如,如果您想围绕一个物体旋转,您可以围绕向上 vector 旋转您的眼睛。-如果你想向前或向后移动,你可以添加或减去眼睛以及中心点。-如果你想向左或向右倾斜相机,你可以围绕你的视线 vector 旋转你的向上 vector ,其中你的视线 vector 是中心 - 眼睛。

gluLookAt 在已弃用的固定函数管道上运行,因此您应该改用 glm::lookAt。

关于c++ - 在 OpenGL 中移动相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8671888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com