Opengl Qt3D渲染32位颜色而不是24位颜色

Opengl Qt3D渲染32位颜色而不是24位颜色,opengl,qt3d,pyside2,Opengl,Qt3d,Pyside2,可以在Qt3D中渲染32位颜色 attr=Qt3DRender.QAttribute() 属性setAttributeType(Qt3DRender.QAttribute.VertexAttribute) 属性设置缓冲区(缓冲区) attr.setVertexBaseType(Qt3DRender.QAttribute.UnsignedByte) 属性setVertexSize(4)#4字节而不是3字节 属性设置偏移量(0) 属性setByteStride(4*1)#4字节而不是3字节 属性设置

可以在Qt3D中渲染32位颜色

attr=Qt3DRender.QAttribute()
属性setAttributeType(Qt3DRender.QAttribute.VertexAttribute)
属性设置缓冲区(缓冲区)
attr.setVertexBaseType(Qt3DRender.QAttribute.UnsignedByte)
属性setVertexSize(4)#4字节而不是3字节
属性设置偏移量(0)
属性setByteStride(4*1)#4字节而不是3字节
属性设置计数(计数)
attr.setName(Qt3DRender.QAttribute.defaultColorAttributeName())

渲染的颜色仅为24位

我需要32位颜色,因为我正在使用屏幕外渲染器(谢谢@florianblume())。我需要这个来捕捉点。到目前为止,它的作品,但只有24位的RGB颜色

#创建要渲染的纹理。
self.texture=Qt3DRender.QTexture2D(self.output)
self.texture.setFormat(Qt3DRender.QAbstractTexture.RGBA8_UNorm)
self.texture.setMinificationFilter(Qt3DRender.QAbstractTexture.Nearest)
self.texture.set放大过滤器(Qt3DRender.QAbstractTexture.Nearest)
我的着色器:

float byte = 256.;
float f_index = float(gl_VertexID);
float remainder = f_index - (byte*byte * floor(f_index/(byte*byte)));
float r = (f_index - remainder) / (byte*byte);
float b = remainder - (byte * floor(remainder/byte));
float g = (remainder - b) / byte;

r = r / (byte - 1.);
g = g / (byte - 1.);
b = b / (byte - 1.);

color = vec4(b, g, r, 1.0);

32位颜色是什么意思?顶点属性设置和它有什么关系?你想通过它实现什么?你知道普通的电脑屏幕只能显示24位的颜色吗?您需要专门的显示器才能看到更深的颜色。如果您想通过颜色识别它们,您也可以使用alpha通道。这将为您提供32位。alpha为0的点当然不可见。“渲染颜色只有24位。”:这可能意味着两件事:直接查看着色器输出值,或者查看监视器上的实际显示。您永远不会显示着色器,也不会显示渲染目标/窗口像素格式的设置。您将向我们显示着色器输入。为了控制实际输出,这两个部分是高度相关的。如何检索颜色?使用QRenderCapture?也许你可以把你的问题改写一下,让一切都更清楚。例如,您的句子“我需要32位颜色,因为我正在使用屏幕外渲染器”没有意义-您需要32位颜色的原因是因为您需要点捕捉。除此之外,我同意@derhass的观点,我们也需要你的着色器。我仍然不确定你到底想要实现什么。计算在着色器中做什么?那是你的碎片着色器?如果我理解正确:您希望从屏幕外渲染图像中检索顶点的ID,以便能够判断“在位置(x,y)处,我们渲染了ID为XXX的顶点”,对吗?如果是,为什么不滥用alpha通道,而不仅仅是RGB通道?你可以在那里再存储8位,然后从QImage获取alpha。