Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以设置一个自定义函数来改变OpenGL中显示列表的颜色吗?_Opengl_Blending_Displaylist - Fatal编程技术网

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

我可以设置一个自定义函数来改变OpenGL中显示列表的颜色吗?,opengl,blending,displaylist,Opengl,Blending,Displaylist,我在显示列表中存储了几何体,但我希望能够绘制具有不同“色调”的相同显示列表。例如,如果我在显示列表中有一个黑白头骨,我希望设置红色色调并绘制头骨,然后设置蓝色色调并绘制头骨 如果我能得到RGBA值,我就知道如何变换它们,但我不确定在哪里可以截取它们。当前显示列表不包含纹理,但将来可能会包含纹理,因此如果答案适用于有纹理或无纹理,那就更好了。从概念上讲,显示列表只是一组在glCallList时执行的命令。因此,无论它包含什么,它都将如同您直接使用这些命令一样(但可能更有效)。因此,如果显示列表包含

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


如果我能得到RGBA值,我就知道如何变换它们,但我不确定在哪里可以截取它们。当前显示列表不包含纹理,但将来可能会包含纹理,因此如果答案适用于有纹理或无纹理,那就更好了。

从概念上讲,显示列表只是一组在
glCallList
时执行的命令。因此,无论它包含什么,它都将如同您直接使用这些命令一样(但可能更有效)。因此,如果显示列表包含一组几何体命令,如何为它们着色?是的,您猜对了,在调用列表之前使用通常的
glColor
命令:

glColor(...);
glCallList(...);
当您希望对象具有纹理且仍可着色时,您可以使用“设置纹理环境”来
GL\u MODULATE
(我猜您没有使用着色器,否则整个问题将非常过时)。如果你想让你的物体发光,当然可以将
glColor
改为
glMaterial


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

显示列表中已经有颜色,所以我开始使用片段着色器,我认为它可以解决问题。我第一次使用着色器是在昨晚,所以我不能100%确定我能用它们做什么。我可能会切换到VBOs,因为我没有意识到显示列表已被弃用。