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

Aktuelle Zeit: Fr Jul 18, 2025 00:47

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Di Jun 05, 2007 22:18 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Hi,
hier sieht man bei den Cubes, die aus Quads gebaut sind, blöde schwarze Linien an den Rändern.
http://stud.fh-wedel.de/~minf8180/pacman.jpg
Tritt je nach Grafikkarte weniger schlimm bis garnicht auf?
Unter Linux in der FH z.B. garnicht. Hier auf dem Notebook mit der Centrino-Intel-Onboard-Mistkrams das gezeigte Ergebnis. :/
Es müssen definitiv die Cubes auf die Art gezeichnet werden, da führt kein Weg mit Quadstrip oder ähnlichem dran vorbei. Aber gibt es vielleicht einen OpenGL-Parameter, den man nur umbiegen müsste und schon ist die Welt schön?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 06, 2007 00:01 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Wenn die wirklich nicht anders gezeichnet werden dürfen, wäre eine Lösung immer volle Würfel zu zeichnen. D.h. auch die nutzlosen Wände zwischen zwei angrenzenden Würfeln. Dann wird der Fehler vermutlich übermalt. Die Geschwindigkeitseinbußen sollten sich in Grenzen halten.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 06, 2007 00:14 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Genau das passiert hier schon. Das sind volle Würfel mit 6 Seiten. Von wegen Seiten weglassen, das hatte mich eben auf die Idee gebracht, das Culling auszuschalten, so dass (unsichtbar) auch die Rückwände gezeichnet werden. Das hatte aber keinen Effekt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 06, 2007 06:43 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Also auf den ersten (geübten) Blick würde ich sagen, dass das am Aufbau des Levels liegt. Schau dir mal im Code an, ob aufeinander folgende Würfel wirklich eine Seite gemeinsam/an der gleichen Position haben.

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 06, 2007 07:47 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Sep 23, 2005 20:31
Beiträge: 212
Wohnort: Sachsen/ Vogtland
Wenn sich die Fehlerursache schwer identifizieren läßt, dann könntest du auch testweise die "Kameraposition" variabel machen und die Szene aus anderen Blickwinkeln betrachen. Vielleicht sieht man dann, unter welchen Bedingungen es zum Fehler kommt.

Grüße, DNA

_________________
Heute code ich, morgen debug ich, und übermorgen caste ich die Königin auf int.
http://www.2ndmoon.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 06, 2007 08:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Wenn du mal mit einer Bildschirmlupe ganz genau schaust wirst du sehen, dass du zwischen sehr vielen Felder Fehler hat. Die sind nur nicht immer schwarz sondern teilweise nur geringfügig anders verfärbt.

Teile aber die Meinung von La Boda. Schau dir mal genau deinen Code an und evtl sogar mal die tatsächlichen Werte im Debugger. Tippe nämlich mal darauf, dass die Punkte nicht genau aufeinander liegen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 06, 2007 11:55 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Dann müssten das irgendwelche Rundungsfehler oder ähnliches im Treiber sein, denn die Positionen werden mit einfachen glTranslatef gesetzt ohne großartig was zu berechnen (Achtung, C ;)):
Code:
  1.  
  2. void drawLevel(void) {
  3.     int x, z;
  4.        
  5.     glPushMatrix();
  6.        
  7.         /* Durch die Levelkacheln iterieren. */
  8.         for (z = 0 ; z < LEVEL_HEIGHT; ++z) {
  9.             glPushMatrix();
  10.                 for (x = 0; x < LEVEL_WIDTH; ++x) {
  11.                     /* Je nach Levelkachel das entsprechende zeichnen. */
  12.                     switch (getTile(x, z)) {
  13.                         /* Wand */
  14.                         case w:
  15.                             glMaterialfv (GL_FRONT, GL_AMBIENT, wMaterial);
  16.                             glMaterialfv (GL_FRONT, GL_DIFFUSE, wMaterial);
  17.                             glCallList(cubeListId);
  18.                         break;
  19.                         /* Leer oder eingesammelte Muenze */
  20.                         case e:
  21.                         case cl:
  22.                             glMaterialfv (GL_FRONT, GL_AMBIENT, fMaterial);
  23.                             glMaterialfv (GL_FRONT, GL_DIFFUSE, fMaterial);
  24.                             glPushMatrix();
  25.                                 glScalef(1.0f, 0.1f, 1.0f);
  26.                                 glCallList(cubeListId);
  27.                             glPopMatrix();
  28.                         break;
  29.                         /* Muenze */
  30.                         case c:
  31.                             /* Muenze */
  32.                             glMaterialfv (GL_FRONT, GL_AMBIENT, cMaterial);
  33.                             glMaterialfv (GL_FRONT, GL_DIFFUSE, cMaterial);
  34.                             glPushMatrix();
  35.                                 glTranslatef(0.5f, 0.8f, 0.5f);
  36.                                 glRotatef(getCoinStep(), 0.0f, 1.0f, 0.0f);
  37.                                 glScalef(0.2f, 0.2f, 0.2f);
  38.                                 glCallList(coinListId);
  39.                             glPopMatrix();
  40.                            
  41.                             /* Boden */
  42.                             glMaterialfv (GL_FRONT, GL_AMBIENT, fMaterial);
  43.                             glMaterialfv (GL_FRONT, GL_DIFFUSE, fMaterial);
  44.                             glPushMatrix();
  45.                                 glScalef(1.0f, 0.1f, 1.0f);
  46.                                 glCallList(cubeListId);
  47.                             glPopMatrix();
  48.                         break;
  49.                     }
  50.                     glTranslatef(1.0f, 0.0f, 0.0f);
  51.                 }
  52.             glPopMatrix();
  53.             glTranslatef(0.0f, 0.0f, 1.0f);
  54.         }
  55.     glPopMatrix();
  56. }
  57.  

Das ganze wird unter Windows mit Dev-Cpp compiliert und unter Linux mit dem gcc, wenn das was zur Sache tut.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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.008s | 16 Queries | GZIP : On ]