【发布时间】:2011-12-26 03:53:45
【问题描述】:
有人可以向我解释一下如何在编译后修改 OpenGL 中的显示列表吗?我该如何强制执行,例如对其进行矩阵转换?
提前致谢。
【问题讨论】:
-
尝试使用顶点缓冲对象。
有人可以向我解释一下如何在编译后修改 OpenGL 中的显示列表吗?我该如何强制执行,例如对其进行矩阵转换?
提前致谢。
【问题讨论】:
显示列表是不可变的;一旦创建,您就无法更改它们。这就是他们的重点。
如果您想将几何图形构建到可以在矩阵定义的位置呈现的显示列表中,您只需不要将矩阵命令放在显示列表中。只需将绘图内容放在显示列表中即可。当您要渲染该几何图形时,请进行设置工作(包括矩阵内容),然后执行显示列表。
您当前的代码如下所示:
//Every frame
glRotatef(...);
glTranslatef(...);
///More setup work.
glBegin(...);
glVertex/TexCoord/Color/etc(...);
...
glEnd();
您的基于显示列表的代码应如下所示:
//Initialization. Done once.
glBeginList(...);
glBegin(...);
glVertex/TexCoord/Color/etc(...);
...
glEnd();
glEndList();
//Every frame
glRotatef(...);
glTranslatef(...);
...
glCallList(...);
【讨论】:
glBegin/End 的内容放在一个显示列表中,并在您将使用glBegin/End 的地方调用该列表。如果您不知道如何在没有显示列表的情况下呈现内容,那么您需要重新表述您的问题。
glTransform(..)/glRotate(..); glCallList(..); 这样你的列表将使用指定的变换/旋转呈现。