PyOpenGL 中的地形纹理未渲染
Terrain Texture in PyOpenGL not Rendered
我需要此代码的帮助。
我想使用我已有的文件 "grass.bmp" 渲染草纹理。
这是加载图片的代码。
texsurfGrass = pygame.image.load('grass.bmp')
imageGrass = pygame.image.tostring(texsurfGrass, "RGB", 1)
texID = glGenTextures(1)
glBindTexture(GL_TEXTURE_2D,texID)
这是绘图模式下的代码(为地板绘制纹理和网格)
# set drawing mode
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) # POINT, LINE, FILL
glPushMatrix()
glTranslate(-ground_gridsize/2,ground_gridsize/2,0)
glTexImage2D(GL_TEXTURE_2D, 0, 3, texsurfGrass.get_width(), texsurfGrass.get_height(), 0, GL_RGB, GL_UNSIGNED_BYTE, imageGrass)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) # GL_LINEAR
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
glColor3f(0.0, 1.0, 0.0)
for i in range(-ground_size/2, (ground_size/2)+ground_gridsize, ground_gridsize):
for j in range (-ground_size/2, (ground_size/2)+ground_gridsize, ground_gridsize):
glPushMatrix()
glTranslate(i,j,0)
glEnable(GL_TEXTURE_2D)
glBindTexture(GL_TEXTURE_2D,texID)
glBegin(GL_QUADS)
glColor3f(0.0, 0.5, 0.0)
glVertex3f(0, 0, 0)
glVertex3f(ground_gridsize, 0, 0)
glVertex3f(ground_gridsize, -ground_gridsize, 0)
glVertex3f(0, -ground_gridsize, 0)
glEnd()
glDisable(GL_TEXTURE_2D)
glPopMatrix()
glPopMatrix()
这些代码仍然生成网格地板而不是纹理渲染地板。
请帮我展示渲染的地板。
提前致谢。
我发现了几个问题。首先 glPolygonMode() 调用要求线框(你告诉它你想要线框,你可能想要填充,这是默认设置)。
其次,您最终必须以某种方式输入一些纹理坐标。看来你是用 OpenGL 1.0 或 2.0 编程的,所以你可以看看 glTexCoord2f 或相关的 TexCoord 函数。
我需要此代码的帮助。 我想使用我已有的文件 "grass.bmp" 渲染草纹理。 这是加载图片的代码。
texsurfGrass = pygame.image.load('grass.bmp')
imageGrass = pygame.image.tostring(texsurfGrass, "RGB", 1)
texID = glGenTextures(1)
glBindTexture(GL_TEXTURE_2D,texID)
这是绘图模式下的代码(为地板绘制纹理和网格)
# set drawing mode
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) # POINT, LINE, FILL
glPushMatrix()
glTranslate(-ground_gridsize/2,ground_gridsize/2,0)
glTexImage2D(GL_TEXTURE_2D, 0, 3, texsurfGrass.get_width(), texsurfGrass.get_height(), 0, GL_RGB, GL_UNSIGNED_BYTE, imageGrass)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) # GL_LINEAR
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
glColor3f(0.0, 1.0, 0.0)
for i in range(-ground_size/2, (ground_size/2)+ground_gridsize, ground_gridsize):
for j in range (-ground_size/2, (ground_size/2)+ground_gridsize, ground_gridsize):
glPushMatrix()
glTranslate(i,j,0)
glEnable(GL_TEXTURE_2D)
glBindTexture(GL_TEXTURE_2D,texID)
glBegin(GL_QUADS)
glColor3f(0.0, 0.5, 0.0)
glVertex3f(0, 0, 0)
glVertex3f(ground_gridsize, 0, 0)
glVertex3f(ground_gridsize, -ground_gridsize, 0)
glVertex3f(0, -ground_gridsize, 0)
glEnd()
glDisable(GL_TEXTURE_2D)
glPopMatrix()
glPopMatrix()
这些代码仍然生成网格地板而不是纹理渲染地板。 请帮我展示渲染的地板。 提前致谢。
我发现了几个问题。首先 glPolygonMode() 调用要求线框(你告诉它你想要线框,你可能想要填充,这是默认设置)。
其次,您最终必须以某种方式输入一些纹理坐标。看来你是用 OpenGL 1.0 或 2.0 编程的,所以你可以看看 glTexCoord2f 或相关的 TexCoord 函数。