gpt4 book ai didi

c++ - OpenGL 第一人称相机旋转和平移

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

我正在尝试编写一个简单的迷宫游戏,而不使用任何已弃用的 OpenGL API(即没有即时模式)。我为迷宫中的每个图 block 使用一个顶点缓冲区对象,它本质上是四个 Vertex 的组合:

class Vertex {
public:
GLfloat x, y, z; // coords
GLfloat tx, ty; // texture coords

Vertex();
};

并像这样存储在 VBO 中:

void initVBO()
{
Vertex vertices[4];
vertices[0].x = -0.5;
vertices[0].y = -0.5;
vertices[0].z = 0.0;
vertices[0].tx = 0.0;
vertices[0].ty = 1.0;
vertices[1].x = -0.5;
vertices[1].y = 0.5;
vertices[1].z = 0.0;
vertices[1].tx = 0.0;
vertices[1].ty = 0.0;
vertices[2].x = 0.5;
vertices[2].y = 0.5;
vertices[2].z = 0.0;
vertices[2].tx = 1.0;
vertices[2].ty = 0.0;
vertices[3].x = 0.5;
vertices[3].y = -0.5;
vertices[3].z = 0.0;
vertices[3].tx = 1.0;
vertices[3].ty = 1.0;

glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(Vertex)*4, &vertices[0].x, GL_STATIC_DRAW);

ushort indices[4];
indices[0] = 0;
indices[1] = 1;
indices[2] = 2;
indices[3] = 3;

glGenBuffers(1, &ibo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(ushort) * 4, indices, GL_STATIC_DRAW);
}

现在,我陷入了相机运动的困境。在我的项目的先前版本中,我使用 glRotatefglTranslatef 平移和旋转场景,然后使用 glBegin() 渲染每个图 block /glEnd() 模式。但是这两个函数现在已被弃用,而且我没有找到任何关于在仅使用 VBO 的上下文中创建相机的教程。哪种方法是正确的?我是否应该在每个图 block 之间循环,根据新的相机位置修改顶点的位置?

最佳答案

But these two functions are now deprecated, and I didn't find any tutorial about creating a camera in a context using only VBOs.

IBO 与此无关。

立即模式和矩阵堆叠是两双不同的鞋子。 VBO 处理将几何数据获取到渲染器,矩阵堆栈处理在那里获取转换。只有几何数据会受到 VBO 的影响。

至于你的问题:你自己计算矩阵,通过uniform传递给shader。同样重要的是要了解 OpenGL 的矩阵函数从未被 GPU 加速(除了一台机器,SGI 的 Onyx),所以这甚至没有提供一些性能增益。实际上,使用 OpenGL 的矩阵堆栈对整体性能有负面影响,因为执行了冗余操作,这些操作也必须在程序的其他地方完成。

对于简单的矩阵数学库,请查看我的 linmath.h http://github.com/datenwolf/linmath.h

关于c++ - OpenGL 第一人称相机旋转和平移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8963223/

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