gpt4 book ai didi

c++ - 我的 VBO 有问题

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

我正在尝试准确模拟游戏如何设置 VBO 并将其绘制到屏幕上。我以前从未设置过,所有教程都展示了如何使用 glDrawArrays 进行设置,但我想使用 glDrawElements。

我想到了以下内容:

glViewport(0, 0, 765, 553);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 765, 553, 0.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

xCast(ptr_glActiveTextureARB, ptr_wglGetProcAddress("glActiveTextureARB"));
xCast(ptr_glMultiTexCoord2fARB, ptr_wglGetProcAddress("glMultiTexCoord2fARB"));
xCast(ptr_glGenBuffersARB, ptr_wglGetProcAddress("glGenBuffersARB"));
xCast(ptr_glBindBufferARB, ptr_wglGetProcAddress("glBindBufferARB"));
xCast(ptr_glBufferDataARB, ptr_wglGetProcAddress("glBufferDataARB"));

struct PointInfo
{
float Pos[3];
float Colour[3];
};

const int NumVerts = 3, NumInds = 3;
std::vector<PointInfo> Vertices;
Vertices.push_back({{0.0f, 1.0f, 0.0f}, {1, 1, 1}}); ///top left;
Vertices.push_back({{0.5f, 0.0f, 0.0f}, {1, 1, 1}}); ///bottom middle;
Vertices.push_back({{1.0f, 1.0f, 0.0f}, {1, 1, 1}}); ///top right;

std::vector<std::uint32_t> Indices = {0, 1, 2};

std::uint32_t VBO = 0, IBO = 0;
ptr_glGenBuffersARB(1, &VBO);
ptr_glGenBuffersARB(1, &IBO);

///Put Vertices In.
ptr_glBindBufferARB(GL_ARRAY_BUFFER, VBO);
ptr_glBufferDataARB(GL_ARRAY_BUFFER, sizeof(PointInfo) * NumVerts, &Vertices[0], GL_STATIC_DRAW);
Log(glGetError());

///Put Indices In.
ptr_glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER, IBO);
ptr_glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER, sizeof(int) * NumInds, &Indices[0], GL_STATIC_DRAW);
Log(glGetError());

我在程序开始时只运行一次上面的代码。然后在我的 while 循环中,我运行:

glPushMatrix();
glClearColor(0.0f, 1.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Log(glGetError());

ptr_glBindBufferARB(GL_ARRAY_BUFFER, VBO);
Log(glGetError());
glVertexPointer(3, GL_FLOAT, sizeof(PointInfo), (void*) offsetof(PointInfo, Pos));
Log(glGetError());
glColorPointer(3, GL_FLOAT, sizeof(PointInfo), (void*) offsetof(PointInfo, Colour));
Log(glGetError());
ptr_glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER, IBO);
Log(glGetError());
glDrawElements(GL_TRIANGLES, NumInds, GL_UNSIGNED_INT, 0);
Log(glGetError());

glPopMatrix();
SwapBuffers(DC);
Sleep(1);

但唯一发生的事情是我的屏幕清除。我根本看不到我的三角形 :S 我认为这可能是我通过 glOrtho 设置的 View ,但我不确定。我做的有什么问题吗? glGetError 只打印 0.. 没有错误 :S

最佳答案

你指定的三角坐标很小。三角形仅占据屏幕左上角的一半像素。尝试将其缩放 100。

此外,我认为您缺少使用 GL_VERTEX_ARRAYGL_COLOR_ARRAY 调用 glEnableClientState

作为一般方法,我建议一次采取一个步骤。从即时模式 glVertex 开始,以确保您获得正确的坐标和相机设置。然后添加着色器。然后使用 DrawArrays 转换为仅位置 VBO。然后添加顶点颜色。然后转换为 DrawElements。这样您就可以更好地了解问题出在哪里。

您可能还对 glload 库感兴趣 here摆脱这些 ptr_ 前缀。

关于c++ - 我的 VBO 有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17768490/

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