在 ModernGL 中使用 TextureArray
Using a TextureArray in ModernGL
我最近开始使用 ModernGL,今天我想开始使用纹理数组。我只是想知道如何在 Moderngl 中传递各个子纹理?在 OpenGL 中,我会调用 glTexSubImage3D
。但是,在 ModernGL 文档中,Context.texture_array
有 3 个参数:size
、components
和 data
。我觉得data
应该是所有的图片叠起来吧?我将如何使用 PIL 和可能的 numpy 来解决这个问题?
您可以单独阅读每张图片并将图片附加到列表中。最后将列表转换为 numpy.array
.
在以下代码片段中,imageList
是文件名列表,width
和 height
是单个图像的大小(所有图像的大小必须相同):
def createTextureArray(imageList, width, height)
depth = len(imageList)
dataList = []
for filename in imageList:
image = Image.open(filename)
if width != image.size[0] or height != image.size[1]:
raise ValueError(f"image size mismatch: {image.size[0]}x{image.size[1]}")
dataList.append(list(image.getdata()))
imageArrayData = numpy.array(dataList, numpy.uint8)
components = 4 # 4 for RGBA, 3 for RGB
context.texture_array((width, height, depth), components, imageArrayData)
我最近开始使用 ModernGL,今天我想开始使用纹理数组。我只是想知道如何在 Moderngl 中传递各个子纹理?在 OpenGL 中,我会调用 glTexSubImage3D
。但是,在 ModernGL 文档中,Context.texture_array
有 3 个参数:size
、components
和 data
。我觉得data
应该是所有的图片叠起来吧?我将如何使用 PIL 和可能的 numpy 来解决这个问题?
您可以单独阅读每张图片并将图片附加到列表中。最后将列表转换为 numpy.array
.
在以下代码片段中,imageList
是文件名列表,width
和 height
是单个图像的大小(所有图像的大小必须相同):
def createTextureArray(imageList, width, height)
depth = len(imageList)
dataList = []
for filename in imageList:
image = Image.open(filename)
if width != image.size[0] or height != image.size[1]:
raise ValueError(f"image size mismatch: {image.size[0]}x{image.size[1]}")
dataList.append(list(image.getdata()))
imageArrayData = numpy.array(dataList, numpy.uint8)
components = 4 # 4 for RGBA, 3 for RGB
context.texture_array((width, height, depth), components, imageArrayData)