呈现灰色纹理而不是颜色

时间:2019-07-08 02:24:00

标签: python python-3.x opengl pyopengl

我正在移植《 Superbible 7th ed。》第11章ch11中的无边界纹理示例。对象呈现良好,但是,正如您在上载的gif文件中注意到的那样,我得到的结果中的颜色为灰色。我想让颜色在每个对象上都起作用。有什么想法可能导致问题吗?谢谢。

预期输出:

expected output

我得到的输出:

enter image description here

支持文件:bindlesstexures_support.zip

源代码:

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
    var valueDto = (DateTimeOffset)(DateTime)value;
    var milliseconds = (valueDto).ToUnixTimeMilliseconds();
    writer.WriteValue(milliseconds);
}

尝试从bindlesstex.cpp

进行移植

1 个答案:

答案 0 :(得分:1)

有2个问题。第一个问题是纹理数据的转换:

  
for j in range(0, 32 * 32):
   mutated_data[j] = ( tex_data[j] & r) | 0x20202020

请参阅原始的c ++代码:

  
mutated_data[j] = (((unsigned int *)tex_data)[j] & r) | 0x20202020;

在c ++代码中,unsigned char tex_data[];被强制转换为(unsigned int *)。这样就可以一次读取字节数组的4个元素。

在python中,您必须使用numpy.frombuffer重新解释数组:

mutated_data = np.frombuffer(np.array(tex_data, dtype=np.byte), dtype=np.uint32)
for j in range(0, 32 * 32):
    mutated_data[j] = (mutated_data[j] & r) | 0x20202020

第二个问题是,在指定二维纹理图像之前,您必须将类型unsigned int的数组解释为字节数组:

byte_buffer = np.frombuffer(mutated_data, dtype=np.byte)
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, TEXTURE_SIZE, TEXTURE_SIZE, GL_RGBA,
    GL_UNSIGNED_BYTE, byte_buffer)