C++ 在平铺地图上绘制精灵

C++ 在平铺地图上绘制精灵,c++,opengl,C++,Opengl,因此,我有一个2D数组,作为绘制瓷砖的贴图 int sMap[12][20] = { {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, {1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1}, {1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1}, {1, 0, 1, 0,

因此,我有一个2D数组,作为绘制瓷砖的贴图

int sMap[12][20] = {
  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
  {1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1},
  {1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1},
  {1, 0, 1, 0, 1, 2, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1},
  {1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1},
  {1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
  {1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1},
  {1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 0, 1},
  {1, 1, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 1, 0, 1, 1, 2, 2, 2, 1},
  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1},
  {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
};
我的磁贴加载后,我使用此
函数()
放置磁贴:

for (int y = 0; y < 12; y++){
    for (int x = 0; x < 20; x++){
        if    (sMap[y][x] == 1)
            glBindTexture( GL_TEXTURE_2D, brick1);
        else if (sMap[y][x] == 2)
            glBindTexture( GL_TEXTURE_2D, brick2);
        else
            glBindTexture( GL_TEXTURE_2D, wall );

        glBegin(GL_QUADS);
        glTexCoord2f(0.0f, 0.0f); glVertex3f(float(x + offsetx),     float(MAP_SIZEY - (y + offsety)), 0.0f); 
        glTexCoord2f(1.0f, 0.0f); glVertex3f(float(x + 1 + offsetx), float(MAP_SIZEY - (y + offsety)), 0.0f); 
        glTexCoord2f(1.0f, 1.0f); glVertex3f(float(x + 1 + offsetx), float(MAP_SIZEY - (y + 1 + offsety)), 0.0f); 
        glTexCoord2f(0.0f, 1.0f); glVertex3f(float(x + offsetx),     float(MAP_SIZEY - (y + 1 + offsety)), 0.0f);
        glEnd();
    }
}
编辑:

调整屏幕大小:

glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,20.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
绘制场景:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(10.0f, 8.0f, 20.0f, 10.0f, 8.0f, 0.0f, 0.0f, 1.0f, 0.0f);
glTranslatef(5.0f,4.0f,0.0f);
draw_tiles();
draw_sprite();

在draw_tiles函数中,您可能传递了不正确的坐标-可能您应该将x和y值乘以您的平铺大小

还可以尝试关闭深度测试和背面剔除,以帮助解决您的黑屏问题

glDisable( GL_DEPTH_TEST );
glDisable( GL_CULL_FACE );

“坐标系”…什么坐标系?您既没有显示
GL\u投影
也没有显示
GL\u模型视图
矩阵。哎呀,很抱歉。我现在就编辑我的问题。谢谢
glDisable( GL_DEPTH_TEST );
glDisable( GL_CULL_FACE );