我正在移植《 Superbible 7th ed。》第11章ch11中的无边界纹理示例。对象呈现良好,但是,正如您在上载的gif文件中注意到的那样,我得到的结果中的颜色为灰色。我想让颜色在每个对象上都起作用。有什么想法可能导致问题吗?谢谢。
预期输出:
我得到的输出:
支持文件: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);
}
进行移植
答案 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)