OpenGL - mapa kafelkowa

0

Próbuje narysować mapę kafelkową jednak nic się nie wyświetla.
Tablica z mapą:

short map [10] [10] = {
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
};

Funkcja rysująca mapę:

void DrawMap()
{
    for( int x = 0; x > 9; x++ ) //Na osi x wyświetli 10 kafelków na raz
    {
        for( int y = 0; y > 9; y++ ) //Na osi y wyświetli 10 kafelków na raz
        {
            if( map[ x ][ y ] == 1 ) DrawImage2D(x * 32,y * 32,32,32,Grass);
        }
    }
}

Funkcja wyświetlająca:

void Display()
{
	// licznie ilosci wygenerowania sceny
	frames++;

    // ladowanie obrazu
	if(LT == 1){LoadTextures();LT = 0;}

	// kolor tła - zawartość bufora koloru
    glClearColor( 1.0, 1.0, 1.0, 1.0 );
    
	// włączenie testu bufora głębokości
    glEnable( GL_DEPTH_TEST );

	// włączenie mieszania
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
	glAlphaFunc( GL_ALWAYS, 0 );

	// wlaczenie teksturowania 
	glDisable(GL_TEXTURE_1D);
	glEnable(GL_TEXTURE_2D);

    // czyszczenie bufora koloru i bufora głębokości
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    // wybór macierzy modelowania
    glMatrixMode( GL_MODELVIEW );
   
    // macierz modelowania = macierz jednostkowa
    glLoadIdentity();
	
	/* Poczatek sceny 3D */
    /*
    // ustawienie obserwatora
    gluLookAt( eyex, eyey, eyez, centerx, centery, centerz, 0, 1, 0 );

	// wylaczenie teksturowanie
	glDisable(GL_TEXTURE_2D);

    // kolor krawędzi sześcianu
    glColor3f( 0.0, 0.0, 0.0 );
   
    // początek definicji krawędzi sześcianu
    glBegin( GL_LINES );
   
    // wspólrzędne kolejnych krawędzi sześcianu
    glVertex3f( 1.0, 1.0, 1.0 );
    glVertex3f( 1.0, - 1.0, 1.0 );
   
    glVertex3f( 1.0, - 1.0, 1.0 );
    glVertex3f( 1.0, - 1.0, - 1.0 );
   
    glVertex3f( 1.0, - 1.0, - 1.0 );
    glVertex3f( 1.0, 1.0, - 1.0 );
   
    glVertex3f( 1.0, 1.0, - 1.0 );
    glVertex3f( 1.0, 1.0, 1.0 );
   
    glVertex3f( - 1.0, 1.0, 1.0 );
    glVertex3f( - 1.0, - 1.0, 1.0 );
   
    glVertex3f( - 1.0, - 1.0, 1.0 );
    glVertex3f( - 1.0, - 1.0, - 1.0 );
   
    glVertex3f( - 1.0, - 1.0, - 1.0 );
    glVertex3f( - 1.0, 1.0, - 1.0 );
   
    glVertex3f( - 1.0, 1.0, - 1.0 );
    glVertex3f( - 1.0, 1.0, 1.0 );
   
    glVertex3f( 1.0, 1.0, 1.0 );
    glVertex3f( - 1.0, 1.0, 1.0 );
   
    glVertex3f( 1.0, - 1.0, 1.0 );
    glVertex3f( - 1.0, - 1.0, 1.0 );
   
    glVertex3f( 1.0, - 1.0, - 1.0 );
    glVertex3f( - 1.0, - 1.0, - 1.0 );
   
    glVertex3f( 1.0, 1.0, - 1.0 );
    glVertex3f( - 1.0, 1.0, - 1.0 );
   
    // koniec definicji prymitywu
    glEnd();

	// wlaczenie teksturowania
	glEnable(GL_TEXTURE_2D);
	
    // Zapisz macierzy rzutowania
    glMatrixMode (GL_PROJECTION);
    glPushMatrix ();
    */

	// wybór macierzy projekcji
	glMatrixMode(GL_PROJECTION);

    // macierz tekstury = macierz jednostkowa
	glLoadIdentity();

	// By kamera nie wyszła po za mape
	if(eyex <= 0)eyex=0;
	if(eyey <= 0)eyey=0;
	if(eyex >= (size_map_x - width))eyex=(size_map_x - width);
	if(eyey >= (size_map_y - height))eyey=(size_map_y - height);

	/* Przełączenie w tryb rzutowania ortogonalnego */
	//glOrtho(eyex,width + eyex,height + eyey,eyey,-100,100);
	gluOrtho2D(eyex,width + eyex,height + eyey,eyey);

	// wybór macierzy modelowania tekstury
	//glMatrixMode(GL_TEXTURE);

	// macierz modelowania = macierz jednostkowa
    //glLoadIdentity();

	/* rysowanie obiektów 2D */

	// rysowanie FPS itd.
	if(debug == true)DebugMode(eyex,eyey);

	// wybór macierzy modelowania
    glMatrixMode( GL_MODELVIEW );

	// macierz modelowania = macierz jednostkowa
    glLoadIdentity();

	// rysowanie mapy
	DrawMap();
	
	/*
    // powrót do trybu macierzy ModelView
    glMatrixMode (GL_MODELVIEW);

    // powrót starego prespective macierzy rzutowania
    glMatrixMode(GL_PROJECTION);
    glPopMatrix();
    glMatrixMode(GL_MODELVIEW);
	*/

    // skierowanie poleceń do wykonania
    glFlush();
   
    // zamiana buforów koloru
    glutSwapBuffers();
}

Czemu nic się nie wyświetla?

0

void DrawMap()
{
for( int x = 0; x > 9; x++ ) //tutaj powinno być x <=9 lub x < 10
{
for( int y = 0; y > 9; y++ ) //jak wyżej, x <= 9 lub x < 10
{
if( map[ x ][ y ] == 1 ) DrawImage2D(x * 32,y * 32,32,32,Grass);
}
}
}

0

Faktycznie, nie zauważyłem:

Teraz powiększyłem tablice:

short map [15] [20] = {
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
	{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
};

I tak rysuje:

void DrawMap()
{
    for( int x = 0; x <= 19; x++ ) //Na osi x wyświetli 20 kafelków na raz
    {
        for( int y = 0; y <= 14; y++ ) //Na osi y wyświetli 15 kafelków na raz
        {
            if( map[ x ][ y ] == 1 ) DrawImage2D(x * 32,y * 32,32,32,Grass);
        }
    }
}

Ale nie wiem dlaczego otrzymuje to:
s6b4pdargyxr_t.jpg
Dlaczego mapa nie jest zarysowana cała tylko w większości?

0

masz 15 wierszy i 20 kolumn a indeksujesz odwrotnie.
Spróbuj tak:
void DrawMap()
{
for( int x = 0; x <= 15; x++ ) //15 a nie 20
{
for( int y = 0; y <= 19; y++ ) // 20 a nie 15
{
if( map[ x ][ y ] == 1 ) DrawImage2D(x * 32,y * 32,32,32,Grass);
}
}
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1