Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 6 odgovora
  • 3.534 pregleda

Najnovija ↓

OpenGL problem sa spojem dvije plohe 07.03.2005. u 21:42 · pre 263 meseca #1
Pokusam napraviti jednostavnu scenu sa dva predmeta jedan, dvije plohe koje formiraju slovo T. Problem je sto je ugao gdje se sastaju dvije plohe stepenicast ako gledam iz daljine a ako gledam izbliza nije. Ako nisam jasno opisao stavicu sliku.
Re: OpenGL problem sa spojem dvije plohe 08.03.2005. u 00:11 · pre 263 meseca #3
Mislim da je to problem sa z-bufferom. Napisi deo code-a u kome si postavio projektivnu matricu (gluPerspective).

yooyo
Re: OpenGL problem sa spojem dvije plohe 08.03.2005. u 23:27 · pre 263 meseca #4
Evo slike.

Kod je sljedeci ('gl' je panel):

SetupGLWindow(gl);
glViewport(0, 0, gl.Width, gl.Height);
glMatrixMode(GL_PROJECTION);
gluPerspective(5, gl.Width/gl.Height, 0.1, 120);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);
glEnable(GL_CULL_FACE);
glCullFace(GL_FRONT);


Kod za crtanje scene:

glLoadIdentity;
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

glPushMatrix;
gluLookAt(LookX.Position, 3, LookZ.Position, 0, 0, 0, 0, 1, 0);

Cube.Size.x := 0.018;
Cube.Size.y := 1.0;
Cube.Size.z := 0.4;
Cube.Position.x := 0;
Cube.Position.y := 0;
Cube.Position.z := 0;
CubeGL(Cube);

Cube.Size.x := 1.0;
Cube.Size.y := 0.018;
Cube.Size.z := 0.4;
Cube.Position.x := 0.509;
Cube.Position.y := 0.091;
Cube.Position.z := 0;
CubeGL(Cube);

Cube.Size.x := 0.018;
Cube.Size.y := 1.0;
Cube.Size.z := 0.4;
Cube.Position.x := 1.018;
Cube.Position.y := 0;
Cube.Position.z := 0;
CubeGL(Cube);
glPopMatrix;

SwapBuffers(wglGetCurrentDC);

Dio koda procedure CubeGL:

begin
glPushMatrix;
glTranslate(ACube.Position.x, ACube.Position.y, ACube.Position.z);
glBegin(GL_QUADS);
// These vertices create the Front Side
ColorGL(ACube.Color.Front);
glVertex3f(-ACube.Size.x/2, -ACube.Size.y/2, ACube.Size.z/2);
glVertex3f(-ACube.Size.x/2, ACube.Size.y/2, ACube.Size.z/2);
glVertex3f(ACube.Size.x/2, ACube.Size.y/2, ACube.Size.z/2);
glVertex3f(ACube.Size.x/2, -ACube.Size.y/2, ACube.Size.z/2);
...
...
glEnd;
glPopMatrix;


Kada se udaljavam od objekata cak se jedan vidi kroz drugi.
Re: OpenGL problem sa spojem dvije plohe 09.03.2005. u 12:55 · pre 263 meseca #5
Iz ovoga sto si mi poslao nemogu bas puno da zakljucim... Moram ti dati par generalnih saveta pa proveri tvoj code:

1. Kada je gl u matrix modu GL_PROJECTION onda matricu menjaj iskljucivo pomocu glLoadIdentity, gluPerspective, glFrustum ili glOrtho funkcijama. U GL_MODELVIEW mozes koristit sve ostale osim gluPerspective, glFrustum ili glOrtho. Ovo je jako bitno jer mnogi grese pa u projektivnu matricu ubace kompoziciju camera_matrix * projection_matrix. Ovakav nacin nije ispravan jer ce kasnije biti problema sa fog-om, svetlima, normalama,...

2. Postavio si near na 0.1 a far na 120. AKo su to npr mere u metrima tvoji objekti su suvise mali, tj. cube.size.x je 0.018m. Jednostavno dubinska rezolucija ne moze da podnese tako tanke objekte. Probaj da promenis far na 10 pa ce ti verovatno sve proraditi.

3. Kada si inicijalizovao opengl sta si izabrao za depth bits. 16, 24 ili 32 bit? AKo je 16bit probaj da promenis na 24 ili 32bit

4. u gluPerspective si postavio fov na 5. To je prilicno mala vrednost i slike ti vise izgledaju "izometrijski" nego "perspektivno". Probaj 45.

yooyo
Re: OpenGL problem sa spojem dvije plohe 09.03.2005. u 23:06 · pre 263 meseca #6
Svaka cast, majstore, pomoglo je. Ja inace ne poznajem opengl nego mi treba da vidim kako ce nesto izgledati.

Postoji li neka jednostavna mogucnost da ovaj prikaz bude antialiased (da rubovi ne budu nazubljeni). Citao sam u dokumentaciji pojasnjenje nekog postupka gdje bi izmedju ostalog trebalo da crtam objekte redom po dubini. Postoji li metod da ih crtam bilo kojim redom a da ivice ne budu nazubljene. Inace svi objekti bi bili ovakve plohe.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme