[opengl] Rysowanie 3D i antyaliasing

0

Witam

Mam problem z narysowaniem jakiegos prostokatu w 3D, tzn rysuje sie ale jak zmieniam 3 wartosc w funkcji glVertex3f() to dzieja sie glupoty na ekranie a nie widok bardziej oddalonego czy blizej widzianego wierzcholka czworokata :( mam pare tutkow ale cos nie wychodzi mi :( w kazdym inaczej jest to robione i sie pogobilem :( mam obsluge myszy itp

I jak moge zrobic jakis prosty antyaliasing czworokatow?

HELP :( nie wiem po prostu jak nagryzdac to jakos by rysowalo figure w przestrzeni 3D a nie 2D z jakimis zalamaniami w polowie scianki jak dam jakas 3 wartosc w funkcji glVertex3f()

Z gory dzieki!

o to glowne funkcje:

[cpp]

void initGL (void)
{

 glClearColor (0.0, 0.0, 0.0, 0.0);
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
 //glShadeModel(GL_SMOOTH);
 //glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);

}

int main(int argc, char** argv)
{
polozenie.rx = 640;
polozenie.ry = 480;
polozenie.z = WYSOKOSCWZROKU;

// wczytujemy plik
mapa();


glutInit(&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize (polozenie.rx, polozenie.ry);
glutInitWindowPosition (100, 100);
glutCreateWindow ("Animacja");
initGL ();
glutKeyboardFunc(klawiatura);
glutPassiveMotionFunc(myszka);
glutIdleFunc (DrawScene);
glutDisplayFunc (DrawScene);
glutReshapeFunc (Reshape);
ShowCursor(TRUE);


// uruchamiamy watek poruszania
unsigned long watek;
char * para = "pusto";
CreateThread(NULL,0,poruszanie,para,0,&watek);

char * para2 = "pusto";
unsigned long watek2;
CreateThread(NULL,0,fpsy,para2,0,&watek2);



glutMainLoop();
return 0;

}

[/cpp]

[cpp]

void DrawScene(void)
{
// czyscimy bufor koloru
glClearColor (1.0,1.0,1.0,1.0);
glClear(GL_COLOR_BUFFER_BIT);

// wypisanie wszystkich obiekow
ekran();

// wyswietlamy ile fpsow jest
fpsow();

// wyswietlamy
glFlush();
glutSwapBuffers();

}

void ekran(void)
{

 int pw = obiekty.obiektow;
 
 
 
 
 
 
 
 
 glPushMatrix();
 // kolor
glColor3f (1.0,0.0,0.0);
glBegin (GL_POLYGON);
//glHint (GL_POLYGON_SMOOTH_HINT, GL_NICEST);

// wierzcholki
glVertex3f (0.5, 0.5, 0.2);
glVertex3f (0.5, 0.0, 0.9);
glVertex3f (0.0, 0.0, 0.0);
glVertex3f (0.0, 0.5, 0.0);

glEnd ();
 glPopMatrix();
 
 
 
 
 
fps++;

}

[/cpp]

0

Też bawię się OpenGL'em i mogę jedynie polecić http://nehe.gamedev.net/ ;-). Tam są naprawdę dobre tutki. Zakładam, że znasz jako tako angielski ;-P.

0

Poczytalem i stwierdzilem ze sam recznie bede liczyl anie przez gotowe funkcje bo i tak sa ubogie.

Ale mam jeden problem bo trojkaty sie nie przenikaja tylko czarny sie wyswietla na kolorowym :( , mam podwojne buforowanie wlaczone, cos przegapilem ?

glLoadIdentity();							
//glTranslatef(-0.5f,0.0f,-0.0f);						
//glRotatef(rtri,0.0f,1.0f,0.0f);				
glBegin(GL_TRIANGLES);							
	glColor3f(1.0f,0.0f,0.0f);						
	glVertex3f( 0.0f, 1.0f, 0.0f);				
	glColor3f(0.0f,1.0f,0.0f);				
	glVertex3f(-1.0f,-1.0f, 0.0f);			
	glColor3f(0.0f,0.0f,1.0f);					
	glVertex3f( 1.0f,-1.0f, 0.0f);		
	
	
			glColor3f(0.0f,0.0f,0.0f);	
	glVertex3f( 0.0f, 1.0f, 0.5f);		
	glColor3f(0.0f,0.0f,0.0f);		
	glVertex3f(-1.0f,-1.0f, 0.5f);		
	glColor3f(0.0f,0.0f,0.0f);	
	glVertex3f( 1.0f,-1.0f, -0.7f);
glEnd();
0

na początku:
glEnable (GL_DEPTH_TEST);

przed rysowaniem:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

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