gpt4 book ai didi

Python 从 float 组到纹理

转载 作者:太空宇宙 更新时间:2023-11-04 06:17:34 25 4
gpt4 key购买 nike

我需要从浮点矩阵 ([0..1]) 创建纹理。纹理应该显示灰色方 block ,但只显示白色矩形:(

我有这个代码:

def _generate_image(self):
i_len = len(self._data)*Config().get_pixels_per_tile()
j_len = len(self._data[0])*Config().get_pixels_per_tile()
data = ''.join([ chr(int(c*255)) for f in self._data for c in f for _ in range(3*Config().get_pixels_per_tile()) ])
print data
return ImageFromData(data, j_len, i_len, GL_RGB, GL_UNSIGNED_BYTE)


class ImageFromData(object):
def __init__(self, data, width, height, colors, type_):
self.w = width
self.h = height
self.image = glGenTextures(1)
glBindTexture(GL_TEXTURE_2D, self.image)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
glTexImage2D( GL_TEXTURE_2D, 0, colors, width, height, 0, colors, type_, data )

谢谢!

最佳答案

我认为您在将图像转换为嵌套的那组看起来很讨厌的字符串时可能会犯错误 for 循环 :-)

所以您的原始数据是像素行和列的浮点强度值的两个嵌套列表,您要将它们复制三次以填充 RGB channel ?我想你想要这个:

def pixlist2string(pixlist):
tmp = []
for row in pixlist:
for pix in row:
for channel in xrange(3):
tmp.append(chr(int(255*pix)))
return ''.join(ss for ss in tmp)

不过,这是一种非常迂回的做事方式。不需要转换为 8 位整数 - 只需告诉 glTexImage2D 输入数据类型为 GL_FLOAT 并为其指定 0 到 1 之间的规范化值。同样,无需重复输入如果将输入格式设置为单 channel (GL_INTENSITYGL_LUMINANCEGL_RED 等),像素将填充 RGB channel 。

我还强烈建议使用 Numpy 数组来保存您的输入像素数据。然后您可以将数组本身传递给 glTexImage2D,而无需进行字符串转换。

关于Python 从 float 组到纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14535565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com