[opengl] Rysowanie 3D i antyaliasing

Odpowiedz Nowy wątek
2006-10-20 20:31
Stefann
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 poprostu 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]

Pozostało 580 znaków

2006-10-20 20:41
Keymax
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.

Pozostało 580 znaków

2006-10-21 20:25
Stefann
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();

Pozostało 580 znaków

2006-10-23 23:01
bim
0

na początku:
glEnable (GL_DEPTH_TEST);

przed rysowaniem:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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