【发布时间】:2021-01-05 15:40:09
【问题描述】:
当我遇到问题时,我正试图在 PyOpenGL 中对立方体进行纹理处理。 PyOpenGL 仅支持 1.10、1.20、1.30、1.00 ES 和 3.00 ES。我至少需要 1.40 版本,因为在 1.40 中引入了layout,我需要使用layout 来获取纹理坐标。我正在尝试使用数组纹理对立方体的每一侧进行不同的纹理处理。如果需要,这是我的一些代码 sn-ps。
加载数组纹理:
def load_texture_array(path,width,height):
teximg = pygame.image.load(path)
texels = teximg.get_buffer().raw
texture = GLuint(0)
layerCount = 6
mipLevelCount = 1
glGenTextures(1, texture)
glBindTexture(GL_TEXTURE_2D_ARRAY, texture)
glTexStorage3D(GL_TEXTURE_2D_ARRAY, mipLevelCount, GL_RGBA8, width, height, layerCount)
glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, width, height, layerCount, GL_RGBA, GL_UNSIGNED_BYTE, texels)
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)
我的顶点着色器:
#version 130
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aColor;
layout (location = 2) in vec2 aTexCoord;
out vec3 color;
out vec2 TexCoord;
void main() {
gl_Position = vec4(aPos, 1.0);
color = aColor;
TexCoord = aTexCoord;
}
我的片段着色器:
#version 130
out vec4 FragColor;
in vec3 color;
in vec2 TexCoord;
uniform sampler2D texture;
void main()
{
FragColor = texture(texture, TexCoord);
}
如果您需要更多信息,请在 cmets 中询问,我会添加。
【问题讨论】:
标签: python opengl glsl textures pyopengl