0

我将几何图形存储在显示列表中,但我希望能够绘制具有不同“色调”的相同显示列表。例如,如果我在显示列表中有一个黑白头骨,我想设置一个红色色调并绘制一个头骨,然后设置一个蓝色色调并绘制头骨。

如果我能得到 RGBA 值,我就知道如何转换它们,但我不确定在哪里可以截取它们。目前显示列表不包含纹理,但它们可能会在未来出现,所以如果答案在有或没有纹理的情况下工作会很好。

4

1 回答 1

0

从概念上讲,显示列表只是您执行时执行的一堆命令glCallList。因此,无论它包含什么,就好像您直接使用了这些命令(但可能性能更高)。因此,如果您的显示列表包含一堆几何命令,您如何为它们着色?是的,你猜对了,glColor在调用列表之前使用常用命令:

glColor(...);
glCallList(...);

当您希望您的对象具有纹理并且仍然可以着色时,您可以使用设置纹理环境来GL_MODULATE(我猜您没有使用着色器,否则整个问题无论如何都会过时)。如果您希望您的对象被点亮,当然可以更改glColorglMaterial

但是如果你在显示列表中设置颜色,你就没有机会得到它并改变它。但无论如何,我不建议您使用显示列表。如果您使用它们来存储几何图形并减少 CPU-GPU 副本和 drawcall 开销,那么为什么不使用 VBO 它正是为此而设计的(并且不会遭受这种不确定的实现)。

于 2012-03-13T09:25:02.697 回答