gpt4 book ai didi

c - 调用 glBindBuffer 后具有奇怪顶点位置的简单 openGL 应用程序

转载 作者:行者123 更新时间:2023-11-30 15:53:58 30 4
gpt4 key购买 nike

我写这个是为了测试如何使用opengl缓冲区绘图,这是初始化的函数:

#include "GL/glew.h"
#include "GL/glfw.h"

int main ( int argc, char* argv[] )
{
//init glfw
glfwInit();

glfwOpenWindow ( 1024, 768, 8, 8, 8, 8, 24, 0, GLFW_WINDOW );

//init extension
glewInit();

//i
glGenBuffers ( 1, &buffID );
//init test buffer
for ( int i = 0 ; i < 15; i ++ ) {
testBuffer[i][0] += 1 + i * i;
testBuffer[i][1] += 1 + i + i * i;
testBuffer[i][2] = 0;
}

do {
render_loop();
} while ( glfwGetWindowParam ( GLFW_OPENED ) );

glfwTerminate();
}

这是 render_loop 函数:

GLuint buffID;
static GLfloat testBuffer[15][3];

void render_loop()
{
glClearColor ( .7, .1, .1, 1.0f );
glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glViewport ( 0, 0, 1024, 768 );
glMatrixMode ( GL_PROJECTION );

glLoadIdentity();
glOrtho ( 0, 1024, 768, 0, 0, -1 );
glMatrixMode ( GL_MODELVIEW );
glLoadIdentity();

//draw a test point
glPointSize ( 10 );
glBegin ( GL_POINTS );
glColor4f ( 1, 1, 1, 1 );
glVertex3f ( 512, 384, 0 );
glEnd();

glBindBuffer(GL_ARRAY_BUFFER,buffID);
glBufferData(GL_ARRAY_BUFFER,3 * sizeof(GLfloat) * 15, testBuffer,GL_DYNAMIC_DRAW);

glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3,GL_FLOAT,0,testBuffer);
glDrawArrays(GL_POINTS,0,15);
glBindBuffer(GL_ARRAY_BUFFER,0);
glDisableClientState(GL_VERTEX_ARRAY);

glfwSwapBuffers();

}

所有 15 个顶点都位于窗口左上角的 0,0 位置,在我从循环中删除这 3 行之后,我可以看到那里的白点:

glBindBuffer(GL_ARRAY_BUFFER,buffID);
glBufferData(GL_ARRAY_BUFFER,sizeof(GLfloat) * 15, testBuffer,GL_DYNAMIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER,0);

一切都按我的预期进行,我有几个问题:

1.什么改变了顶点缓冲区的位置?

2.顺便问一下,使用这些调用可以获得多少性能提升?

最佳答案

必须这样称呼:

glBindBuffer(GL_ARRAY_BUFFER,0);

glBufferData函数之后。

我还发现我需要改变这一点:

//added this line before glVertexPointer:
glBindBuffer(GL_ARRAY_BUFFER,buffID);
//glVertexPointer(3,GL_FLOAT,0,testBuffer); change last param to 0:
glVertexPointer(3,GL_FLOAT,0,0);

添加后,一切似乎都运行良好。

关于c - 调用 glBindBuffer 后具有奇怪顶点位置的简单 openGL 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13397531/

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