gpt4 book ai didi

opengl - 使 opengl 工作(绘制)更快

转载 作者:行者123 更新时间:2023-12-02 03:50:43 25 4
gpt4 key购买 nike

我正在尝试绘制 512*512 点,每个点都使用其邻居。例如

glBegin(GL_TRIANGLE_STRIP);
glVertex(x,y,z);
glVertex(x+1,y,z);
glVertex(x,y,z+1);
glVertex(x+1,y,z+1);
glEnd();

问题是它运行得很慢,我知道我可以使用 VBO(也可以使用 CUDA),但我不确定如何定义 VBO 来与 GL_TRIANGLE_STRIP 一起使用以及如何设置顶点的绘制顺序。

最佳答案

使用 VBO 的一种方法(有多种变体,使用旧的 Vertex Array API,使用 glBufferData 直接上传数据以及其他好东西)。

GLuint vbo; // this variable becomes a handles, keep them safe
GLuint idx;

glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat)*512*512*3, NULL, GL_STATIC_DRAW);
GLfloat *vbuf = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE);
fill_with_vertex_data(vbo);
glUnmapBuffer(GL_ARRAY_BUFFER);

glGenBuffers(1, &idx);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLuint)*512*512*4, NULL, GL_STATIC_DRAW);
GLfloat *ibuf = glMapBuffer(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE);
GLuint restart_index = 0xffff;
fill_with_indices_restart(ibuf, restart_index); // 0xffff is the restart index to be used, delimiting each triangle strip.
glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER);

/* ... */

glEnableVertexAttribArray(vertex_position_location);

glBindBuffer(GL_ARRAY_BUFFER, vbo);
glVertexAttrxPointer(vertex_position_location, 3, GL_FLOAT, GL_FALSE, 0, 0);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, idx);
glPrimitiveRestartIndex(restart_index);
glDrawElements(GL_TRIANGLE_STRIP, 0, count, 0);

关于opengl - 使 opengl 工作(绘制)更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8292142/

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