2015-11-26 106 views
0

我需要此代码的帮助。 我想使用我已有的文件“grass.bmp”渲染草地纹理。 这是加载图像的代码。PyOpenGL中的地形纹理未渲染

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() 

这些码是仍产生格栅地板,而不是纹理渲染地板的代码。 请帮我展示渲染楼层。 在此先感谢。

回答

0

我看到一些问题。首先glPolygonMode()调用是要求线框(你告诉它你想要线框,你可能想要填充,这是默认的)。

其次,你最终必须以某种方式放入一些纹理坐标。看起来您正在编程OpenGL 1.0或2.0,因此您可以查看glTexCoord2f或相关的TexCoord函数。

+0

感谢Ned Zepplin为您的帮助... 现在我已经改变了glPolygonMode()来填充你所说的,是的,地板变成了绿色,但草地仍然没有渲染..只是给绿色。 和关于glTexCoord2f,我应该在哪里把这些函数我的代码?你能为我指点吗?因为我是PyOpenGL中的新手。在此先感谢:D – Leo

+0

每个顶点应具有纹理坐标。纹理坐标必须在glVertex调用之前给出。所以glTexCoord2f(); glVertex3f(); glTexCoord2f(); glVertex3f(); –