Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Sa Jul 19, 2025 12:30

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Problem mit Tiefenpuffer
BeitragVerfasst: Do Mai 17, 2007 17:35 
Offline
DGL Member

Registriert: So Jul 17, 2005 12:59
Beiträge: 89
Hi,

ich hab ein Problem mit dem Tiefenpuffer:
Ich habe ein kleines Koordinatensystem, in das der Anweder Würfel legen kann. Soweit kein Problem und alles ok.
Nun kann der Anweder aber auch Y-Ebenen durchscheinend machen, so das alle Würfel, die über dieser Y-Ebene liegen, durchscheinend gemacht werden. Und dann bekomme ich leider folgenden Bildfehler:

Bild

Betrachte ich es von der anderen Seite, funktionier es:

Bild

D.h. die Zeichenreihenfolge der Würfel wird trotz

Code:
  1.  
  2.   glEnable(GL_DEPTH_TEST);
  3.   glDepthFunc(GL_LEQUAL);
  4.  


noch immer berücksichtigt.. Was mache ich falsch :( ?

Danke + Grüße
Passi


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 16, 2007 13:09 
Offline
DGL Member

Registriert: So Jul 17, 2005 12:59
Beiträge: 89
Kann mir da niemand helfen :( ?

Hab inzwischen mal vor dem Zeichnen der Würfel den Tiefenpuffer wieder geleert, aber das hat auch nicht geholfen..

Hier mal der Code der die Würfel zeichnet:

Code:
  1.  
  2. procedure drawPlayerQuad();       // 3D-Würfel zeichnen
  3. begin
  4.  
  5.   glBegin(GL_QUADS);
  6.     glColor4f(quadr-0.3,quadg-0.3,quadb-0.3,quadalpha);
  7.     glVertex3f(0,0,0);
  8.     glVertex3f(1,0,0);
  9.     glColor4f(quadr,quadg,quadb,quadalpha);
  10.     glVertex3f(1,1,0);
  11.     glVertex3f(0,1,0);
  12.  
  13.     glColor4f(quadr-0.3,quadg-0.3,quadb-0.3,quadalpha);
  14.     glVertex3f(0,0,0);
  15.     glVertex3f(0,0,1);
  16.     glColor4f(quadr,quadg,quadb,quadalpha);
  17.     glVertex3f(0,1,1);
  18.     glVertex3f(0,1,0);
  19.  
  20.     glColor4f(quadr-0.3,quadg-0.3,quadb-0.3,quadalpha);
  21.     glVertex3f(1,0,0);
  22.     glVertex3f(1,0,1);
  23.     glColor4f(quadr,quadg,quadb,quadalpha);
  24.     glVertex3f(1,1,1);
  25.     glVertex3f(1,1,0);
  26.  
  27.     glColor4f(quadr-0.3,quadg-0.3,quadb-0.3,quadalpha);
  28.     glVertex3f(0,0,1);
  29.     glVertex3f(1,0,1);
  30.     glColor4f(quadr,quadg,quadb,quadalpha);
  31.     glVertex3f(1,1,1);
  32.     glVertex3f(0,1,1);
  33.  
  34.     glColor4f(quadr,quadg,quadb,quadalpha);
  35.     glVertex3f(0,1,0);
  36.     glVertex3f(1,1,0);
  37.     glVertex3f(1,1,1);
  38.     glVertex3f(0,1,1);
  39.  
  40.     glColor4f(quadr-0.3,quadg-0.3,quadb-0.3,quadalpha);
  41.     glVertex3f(0,0,0);
  42.     glVertex3f(1,0,0);
  43.     glVertex3f(1,0,1);
  44.     glVertex3f(0,0,1);
  45.   glEnd();
  46.  
  47.  
  48.  
  49.   glColor4f(0,0,0,quadalpha);
  50.   glLineWidth(2);
  51.   glBegin(GL_LINES);
  52.     glVertex3f(0,0,0);
  53.     glVertex3f(1,0,0);
  54.     glVertex3f(0,0,0);
  55.     glVertex3f(0,0,1);
  56.     glVertex3f(1,0,0);
  57.     glVertex3f(1,0,1);
  58.     glVertex3f(0,0,1);
  59.     glVertex3f(1,0,1);
  60.     glVertex3f(0,1,0);
  61.     glVertex3f(1,1,0);
  62.     glVertex3f(0,1,0);
  63.     glVertex3f(0,1,1);
  64.     glVertex3f(1,1,0);
  65.     glVertex3f(1,1,1);
  66.     glVertex3f(0,1,1);
  67.     glVertex3f(1,1,1);
  68.     glVertex3f(0,0,0);
  69.     glVertex3f(0,1,0);
  70.     glVertex3f(1,0,0);
  71.     glVertex3f(1,1,0);
  72.     glVertex3f(0,0,1);
  73.     glVertex3f(0,1,1);
  74.     glVertex3f(1,0,1);
  75.     glVertex3f(1,1,1);
  76.   glEnd();
  77. end;
  78.  
  79.  
  80. procedure Render();
  81. begin
  82.  
  83.   glClear(GL_DEPTH_BUFFER_BIT);
  84.  
  85.   for i := 0 to koordsize-1 do
  86.   begin
  87.     for j := 0 to koordsize-1 do
  88.     begin
  89.       for k := 0 to koordsize-1 do
  90.       begin
  91.  
  92.           glPushMatrix();
  93.           glLoadIdentity();
  94.           gltranslatef(1.5,1,-camposx/10);
  95.           glrotatef(camposz,1,0,0);
  96.           glrotatef(camposy,0,1,0);
  97.  
  98.           quadalpha := 0.9;
  99.           quadr:=1;
  100.           quadg:=0.5;
  101.           quadb:=0;
  102.  
  103.           glTranslatef(koordstart+i, koordstart+k, -1+koordstart+(koordsize-j));
  104.           drawPlayerQuad();
  105.           glPopMatrix();
  106.  
  107.       end;
  108.     end;
  109.   end;
  110. end;
  111.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 16, 2007 15:37 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Transparente Flächen wirst du wohl oer übel der Tiefe nach sortieren müssen. Da führt wohl kein Weg wirklich sinnvoll dran vorbei. Ich kann dir allerdings nicht sagen wie du das anstellen musst. So genau hatte ich mich damit nie beschäftigt. Aber ich meine dazu gabe es schon so das ein oder andere Thema.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 17, 2007 18:38 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Solange es nur wenige objekte sind, ist wohl das einfachste ihren z wert durch multiplikation mit der modelviewmatrix zu bestimmen und sie in eine liste zu schmeißen. Die dann einfach sortieren. Anschließens von hinten nach vorne rendern.
Wenn es VIEL würfel sind, gibt es auch die möglichkeit die schleife die die würfel rendert so anzupassen dass sie automatisch in der richigen reihenfolge gerendert werden. Das ist allerdings etwas aufwändiger. Würde ich erst bei weit über 1000 würfeln machen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 23, 2007 16:59 
Offline
DGL Member

Registriert: So Jul 17, 2005 12:59
Beiträge: 89
Jepp,
Danke das war's. Nun funktioniert es wunderbar :)

Da es maximal 1000 Würfel sind, habe ich die Methode mit der Multiplikation mit der ModelViewMatrix gewählt.

Grüße
Passi


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 16 Queries | GZIP : On ]