OpenGL i C++ - kamera

0

Witam. Zaczynam swoją przygodę z OpenGL+GLUT. Duże problemy mam z obsługą kamery.
Moim obiektem jest ( chwilowo ) taki trójkąt:

void renderScene(void) 
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glPushMatrix();
	glTranslatef(xpos,ypos,0.0);
    gluLookAt(xpos,ypos,0,0,-1,0,1,0);
	glBegin(GL_TRIANGLES);
		glVertex3f(-0.5,-0.5,0.0);
		glVertex3f(0.5,0.0,0.0);
		glVertex3f(0.0,0.5,0.0);
	glEnd();
	glPopMatrix();
	glutSwapBuffers();
}

Program w przyszłości przekształci się w prostą grę 2D z widokiem z góry. Chcę, aby kamera posuwała się wraz z moim trójkątem, dlatego wpisałem coś takiego:

void processSpecialKeys(int key, int x, int y) {

	if (key == GLUT_KEY_RIGHT)
				xpos = xpos+0.1;
				
	if (key == GLUT_KEY_LEFT)
				xpos = xpos-0.1;
				
	if ( key==GLUT_KEY_UP)
				ypos = ypos+0.1;
	
	if (key==GLUT_KEY_DOWN)
			    ypos = ypos-0.1;
			
}

I mam problem. Funkcja gluLookAt nie działa tak jakbym sobie tego życzył. Wydaje mi się że jej 3 pierwsze argumenty określają pozycję kamery a 3 kolejne - kierunek "patrzenia", jednak gdy chcę aby jej współrzędne zmieniały się tak jak współrzędne trójkąta, po kompilacji wygląda to tak jakby kamera obracała się wokół niego.
Moje drugie pytanie dotyczy zamiany trójkąta na jakiegoś GIFa. Niestety nie wiem jakiej funkcji do tego użyć.

0

zle glulookat

najpierw pozycja oka, a pozniej punkt na który patzrymy ) nie kierunek tylko punkt na ktory patrzymy w twoim wypadku tym punktem jest 0,0,-1

jak chcesz zeby patrzyl w tamta strone to oko.x-0,oko.y-0,oko.z-1)

0

gluLookAt(xpos,ypos,0,xpos,ypos,-1,0,1,0);

0

Dzięki. Można jeszcze wiedzieć co zrobić, żeby zamiast trójkąta, poruszać jakimś obrazkiem JPG? Obrazek wczytywany z pliku.

0

na trojakt naklada sie obrazek poruszasc scena mozna np. za pomoca

glTranslatef(x,y,z);

lub sztywno ustawiac mu inne vertexy (te glVertex3f) jak chcesz kod jak to ma wygladac to bedzie trudno bo ja ci go nie dam :F

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