C 是否可以写入OpenGL纹理4个不同的平面

C 是否可以写入OpenGL纹理4个不同的平面,c,opengl,C,Opengl,我正在尝试将不同平面的数据写入opengl纹理,可能吗 我尝试了以下代码 glTexImage2D(GL_纹理_2D,0,GL_RGBA,1,1,0,GL_RGBA,GL_无符号_字节,0); glTexSubImage2D(GL_纹理_2D、0、0、1、1、GL_红色、GL_无符号_字节(void*)和像素); glTexSubImage2D(GL_纹理_2D、0、0、1、1、GL_绿色、GL_无符号_字节(void*)和像素); 它不像我预期的那样工作,三角形是绿色而不是黄色,像素值是25

我正在尝试将不同平面的数据写入opengl纹理,可能吗

我尝试了以下代码

glTexImage2D(GL_纹理_2D,0,GL_RGBA,1,1,0,GL_RGBA,GL_无符号_字节,0);
glTexSubImage2D(GL_纹理_2D、0、0、1、1、GL_红色、GL_无符号_字节(void*)和像素);
glTexSubImage2D(GL_纹理_2D、0、0、1、1、GL_绿色、GL_无符号_字节(void*)和像素);

它不像我预期的那样工作,三角形是绿色而不是黄色,像素值是255。

不,它不是。丢失的通道“填充”为0.0表示红色、绿色和蓝色,分别为1.0表示alpha通道

见:

[…]将每个组转换为一个由4个元素组成的组,如下所示:如果组中不包含a元素,则添加a并将其设置为1(整数组件)或1.0(浮点组件)。如果组中缺少R、G或B中的任何一个,则将添加每个缺少的元素,并为整数组件指定一个值0,或为浮点组件指定一个值0.0


但当我使用GL_绿色纹理时green@NocturnalCoder007:是的。因为如果将颜色设置为(0,X,0,1),那么除非X为零,否则结果将是一些绿色。关键是你没有上传到一个频道。你正在向所有频道写信;只是有些频道会被你没有提供的数据填满。GL_绿色和GL_蓝色是有效的格式。若我使用GL_绿色三角形是绿色,GL_蓝色,三角形是蓝色,我可以关闭这个问题,OpenGL中的纹理必须以线性格式存储,因为它是着色器操作的快速格式。这是不可能的。