gpt4 book ai didi

user-interface - 使用 OpenGL 绘制一个点,但不是在即时模式下

转载 作者:行者123 更新时间:2023-12-02 02:35:19 26 4
gpt4 key购买 nike

所以我想在 OpenGL 中绘制一个 2D 点,但不是在即时模式中。好久没用 OpenGL 编程了,有点生疏了,红皮书上找不到。

感谢所有帮助。

谢谢!

最佳答案

如果“不在立即模式”是指将几何体上传到显卡并调用渲染它,那么有几种方法可以做到这一点。最简单的就是使用显示列表预编译一个OpenGL命令列表来执行

Gluint list = glGenLists(1);
// Release with glDeleteLists(list,1);
glNewList(list,GL_COMPILE);

// Drawing code here

glEndList();

然后渲染它

glCallList(list);

一种可能更灵活、更快速的方法是使用顶点缓冲区对象扩展(要访问扩展,请轻松查找 GLEW 库)。您可以将几何体预加载到 VBO 中,然后通过调用 OpenGL 来渲染它:

float data[2] = {...};

GLuint buffer;
glGenBuffersARB(1,&buffer);
// Release with glDeleteBuffersARB(1,&buffer);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffer);
glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(data), data, GL_STATIC_DRAW_ARB);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);

然后用类似的东西画画

GLuint indices[] = {0};

glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffer);
glVertexPointer(3, GL_FLOAT, sizeof(float)*2, ((GLubyte*)NULL)+0);
glEnableClientState(GL_VERTEX_ARRAY);
glDrawElements(GL_POINTS,sizeof(indices)/(sizeof(indices[0])),GL_UNSIGNED_INT,indices);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);

您可能还想查找使用索引缓冲区来上传索引(或其他绘图例程)。恐怕我的大脑记忆起使用顶点和索引缓冲区的所有不同方式有点晚了。

我想补充一点,如果你只是绘制一个点,那么大部分都是不必要的(你需要绘制 10s 或 100s of thousands of thousands for it was slow)并且只会使代码更难理解阅读、理解和维护。

关于user-interface - 使用 OpenGL 绘制一个点,但不是在即时模式下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2079549/

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