List OpenGL显示列表

List OpenGL显示列表,list,opengl,matrix,List,Opengl,Matrix,有人能告诉我如何修改OpenGL中的显示列表吗?例如,如何在其上实施矩阵变换 提前感谢。显示列表是不可变的;一旦创建,就不能更改它们。这就是他们的重点 如果要将几何图形构建到显示列表中,以便在矩阵定义的位置进行渲染,只需在显示列表中不放置矩阵命令即可。只需将绘图内容放入显示列表中。如果要渲染该几何体,请执行设置工作(包括矩阵填充),然后执行显示列表 您当前的代码如下所示: //Every frame glRotatef(...); glTranslatef(...); ///More setu

有人能告诉我如何修改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(...);
基于显示列表的代码应如下所示:

//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(...);

显示列表是不可变的;一旦创建,就不能更改它们。这就是他们的重点

如果要将几何图形构建到显示列表中,以便在矩阵定义的位置进行渲染,只需在显示列表中不放置矩阵命令即可。只需将绘图内容放入显示列表中。如果要渲染该几何体,请执行设置工作(包括矩阵填充),然后执行显示列表

您当前的代码如下所示:

//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(...);
基于显示列表的代码应如下所示:

//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(...);

尝试使用顶点缓冲区对象。尝试使用顶点缓冲区对象。这正是我不理解的!如何进行“设置工作”?你这到底是什么意思?你能扩展吗?(具体地说,我不知道你如何应用矩阵以及如何做)@user10607:你能在没有显示列表的情况下渲染东西吗?如果是的话,那就这样做。然后将所有
glBegin/End
内容放在显示列表中,并在使用
glBegin/End
的位置调用该列表。如果你不知道如何在没有显示列表的情况下渲染东西,那么你需要重新表述你的问题。不,我可以进入这一部分。但这就像渲染场景一样,如果我必须一直移动一个巨大的网格怎么办?大量的面和顶点,我听说可以将它们全部加载到一个显示列表中,然后你只需移动列表坐标(不知何故!),这非常快。比每帧向OpenGL提供顶点坐标要快得多;glCallList(…)通过这种方式,列表将使用指定的transform/rotate.Ok进行渲染,因此我提供了一个用于旋转的命令,但在旋转特定对象后,我必须取消该命令。一个人怎么能做到呢?还有克罗姆,是吗?我的代码在尝试glTransfrorm时出错(不管怎样!)。这正是我不理解的!如何进行“设置工作”?你这到底是什么意思?你能扩展吗?(具体地说,我不知道你如何应用矩阵以及如何做)@user10607:你能在没有显示列表的情况下渲染东西吗?如果是的话,那就这样做。然后将所有
glBegin/End
内容放在显示列表中,并在使用
glBegin/End
的位置调用该列表。如果你不知道如何在没有显示列表的情况下渲染东西,那么你需要重新表述你的问题。不,我可以进入这一部分。但这就像渲染场景一样,如果我必须一直移动一个巨大的网格怎么办?大量的面和顶点,我听说可以将它们全部加载到一个显示列表中,然后你只需移动列表坐标(不知何故!),这非常快。比每帧向OpenGL提供顶点坐标要快得多;glCallList(…)通过这种方式,列表将使用指定的transform/rotate.Ok进行渲染,因此我提供了一个用于旋转的命令,但在旋转特定对象后,我必须取消该命令。一个人怎么能做到呢?还有克罗姆,是吗?我的代码在尝试glTransfrorm时出错(不管怎样!)。