我可以设置一个自定义函数来改变OpenGL中显示列表的颜色吗?

时间:2012-03-13 08:37:13

标签: opengl blending displaylist

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

如果我能获得RGBA值,我确切知道如何转换它们,但我不确定在哪里可以拦截它们。目前显示列表不包含纹理,但它们可能会在将来使用,所以如果答案适用于纹理或不使用纹理,那将会很好。

1 个答案:

答案 0 :(得分:0)

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

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

当您希望对象具有纹理并且仍然可以着色时,您可以使用设置纹理环境GL_MODULATE(我猜你不使用着色器,否则整个问题都会过时,无论如何) 。如果您希望对象亮起,请将glColor改为glMaterial,当然。

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