Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » OpenGL » Zeichenreihenfolge nach Perspektive

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
28.07.2005, 16:51 Uhr
Lensflare



Hallo.

wie mache ich es, dass mein programm die objekte in der reihenfolge der perspektive zeichnet?
Also zuerst die hinteren, dann die vorderen.
Ich hab nämlich versucht ein würfel zu zeichnen, aber die 6 flächen werden nach der "normalen" reihenfolge wie im code geschrieben gezeichnet

danke.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.07.2005, 19:22 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


du musst DepthTest aktivieren, dann "sortiert" er dir (je nach objekten kostet das natürlich fps)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.07.2005, 19:39 Uhr
Lensflare



und wie aktiviere ich es? bzw was muss ich dazu schreiben?
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.07.2005, 19:58 Uhr
Drager



mit

glEnable(GL_DEPTH_TEST);

aktivierst du den z-test...

achso rein aus verständniss gründen, der z-test zeichnet nicht die hinteren zuerst dann die vorderen, sondern genau wie in dem code angegeben... vielmehr verwirft er pixel, die hinter den schon gesetzten liegen würden... (darum musst du auch bei transparenz oftmals die objekte per hand sortieren..)

Dieser Post wurde am 28.07.2005 um 20:01 Uhr von Drager editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.07.2005, 20:31 Uhr
Green Snake



hi

ich wollte für folgende frage kein neues thema aufmachen:

was ist eigentlich am besten für 3d(games) ?

OpenGL?
DirecX3D?

mir geht es um das typische preis/leistungs verhältniss, hier einfach in
schwierigkeit/qualität.

könnt ihr da was empfehlen?
--
Ich bin, der ich bin
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
28.07.2005, 20:38 Uhr
Oliver
S2-Pixelgeneral


Da kann man sich drüber streiten, sowas gabs schonmal: www.fun-soft.de/showtopic.php?threadid=9923&time=1122575837
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
28.07.2005, 22:24 Uhr
Lensflare



also mit glEnable(GL_DEPTH_TEST); sieht der würfel schon besser aus als vorher aber er wird glaub ich immer noch falsch gezeichnet.

jetzt hab ich ein neues problem:
wenn ich die kamera (oder den würfel selbst) in die Z-Richtung bewege, dann verschwindet er allmählig, als ob er sich in eine schwarze wand reinbewegen würde. Ich vermute, dass die sichtweite der kamere zu klein eingestellt ist. Ist es so? Wie verhindere ich es bzw. stelle die sichtweite höher?
Und bewegt sich mit dem folgenden code die kamera oder der würfel?


C++:
  glTranslatef(0.0f,0.0f,my_move_z);
  glRotatef(my_rotate_x,0.0f,1.0f,0.0f);
  glRotatef(my_rotate_y,1.0f,0.0f,0.0f);
  glRotatef(my_rotate_z,0.0f,1.0f,1.0f);
  
  glBegin(GL_QUADS);
    glColor3f(0.0f,1.0f,0.0f);    // Color Blue
    glVertex3f( 1.0f, 1.0f,-1.0f);    // Top Right Of The Quad (Top)
    glVertex3f(-1.0f, 1.0f,-1.0f);    // Top Left Of The Quad (Top)
    glVertex3f(-1.0f, 1.0f, 1.0f);    // Bottom Left Of The Quad (Top)
    glVertex3f( 1.0f, 1.0f, 1.0f);    // Bottom Right Of The Quad (Top)
    glColor3f(1.0f,0.5f,0.0f);    // Color Orange
    glVertex3f( 1.0f,-1.0f, 1.0f);    // Top Right Of The Quad (Bottom)
    glVertex3f(-1.0f,-1.0f, 1.0f);    // Top Left Of The Quad (Bottom)
    glVertex3f(-1.0f,-1.0f,-1.0f);    // Bottom Left Of The Quad (Bottom)
    glVertex3f( 1.0f,-1.0f,-1.0f);    // Bottom Right Of The Quad (Bottom)
    glColor3f(1.0f,0.0f,0.0f);    // Color Red    
    glVertex3f( 1.0f, 1.0f, 1.0f);    // Top Right Of The Quad (Front)
    glVertex3f(-1.0f, 1.0f, 1.0f);    // Top Left Of The Quad (Front)
    glVertex3f(-1.0f,-1.0f, 1.0f);    // Bottom Left Of The Quad (Front)
    glVertex3f( 1.0f,-1.0f, 1.0f);    // Bottom Right Of The Quad (Front)
    glColor3f(1.0f,1.0f,0.0f);    // Color Yellow
    glVertex3f( 1.0f,-1.0f,-1.0f);    // Top Right Of The Quad (Back)
    glVertex3f(-1.0f,-1.0f,-1.0f);    // Top Left Of The Quad (Back)
    glVertex3f(-1.0f, 1.0f,-1.0f);    // Bottom Left Of The Quad (Back)
    glVertex3f( 1.0f, 1.0f,-1.0f);    // Bottom Right Of The Quad (Back)
    glColor3f(0.0f,0.0f,1.0f);    // Color Blue
    glVertex3f(-1.0f, 1.0f, 1.0f);    // Top Right Of The Quad (Left)
    glVertex3f(-1.0f, 1.0f,-1.0f);    // Top Left Of The Quad (Left)
    glVertex3f(-1.0f,-1.0f,-1.0f);    // Bottom Left Of The Quad (Left)
    glVertex3f(-1.0f,-1.0f, 1.0f);    // Bottom Right Of The Quad (Left)
    glColor3f(1.0f,0.0f,1.0f);    // Color Violet
    glVertex3f( 1.0f, 1.0f,-1.0f);    // Top Right Of The Quad (Right)
    glVertex3f( 1.0f, 1.0f, 1.0f);    // Top Left Of The Quad (Right)
    glVertex3f( 1.0f,-1.0f, 1.0f);    // Bottom Left Of The Quad (Right)
    glVertex3f( 1.0f,-1.0f,-1.0f);    // Bottom Right Of The Quad (Right)
  glEnd();

  if(KEY_DOWN(VK_RIGHT)) my_rotate_x += 0.5;
  if(KEY_DOWN(VK_LEFT))  my_rotate_x -= 0.5;
  if(KEY_DOWN(VK_UP))    my_rotate_y += 0.5;
  if(KEY_DOWN(VK_DOWN))  my_rotate_y -= 0.5;
  if(KEY_DOWN('A')) my_move_z -= 0.1;
  if(KEY_DOWN('Q')) my_move_z += 0.1;


--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 28.07.2005 um 22:25 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
28.07.2005, 22:28 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


kommt drauf an wie du sie initialisierst, sag mal die zeile mit gluPerspective. Wahrscheinlich haste da die Faktoren einfach zu klein eingestellt, 0.1, 100 ist immer ganz gut.

Ansonsten würde ich dir empfehlen mal "GL_LINE_LOOP" zu verwenden, dann siehste nämlich ob dein Vertexes in der richtigen Reihenfolge sind. (es sollten dann auch quadratische seiten sein, und nicht z.b "X"e
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
28.07.2005, 23:22 Uhr
Drager



@lensflare

also in deinem code rotiert der würfel um sein zentrum..

du musst einfach von unten nach oben lesen..

sprich in deinem code rotierst du erst, und verschiebst dann -> er rotiert an der stelle

würdest dus genau andersrum machen, würde sich der würfel um die kamera drehn..
(so wie halt in 3d shootern)

an sich bewegt sich die kamera nie! es bewegen sich immer nur die objekte, aber man kann die illusion erzeugen ,als das sich die kamera drehn würde...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
29.07.2005, 01:55 Uhr
Lensflare



@FloSoft

Zitat:
kommt drauf an wie du sie initialisierst, sag mal die zeile mit gluPerspective.
so eine zeile habe ich garnicht. es werden 4 parameter an die funktion übergeben, richtig? Was bewirken die? Oder was sin zum Beispiel vernünftige werte?


Zitat:
Ansonsten würde ich dir empfehlen mal "GL_LINE_LOOP" zu verwenden
damit sieht der würfel schonmal richtig aus. Ich nehm das einfach mal so hin. Vielleicht verstehe ich später wieso es so ist Ich verstehe nämlich nicht was du mit Vertexes und den quadratischen seiten meinst

@Drager
hmmm, ist wirklich komisch. Ich hab irgendwie ein problem damit mir vorzustellen wieso es einen unterschied macht, ob ich zuerst den würfel drehe und dann bewege oder umgekehrt.

ausserdem finde ich es komisch, dass ich bei den funktionen für das drehen und bewegen nicht hinschreibe, was ich bewegen will. Wie kann ich denn 2 verschiedene objekte unabhängig voneinander drehen?
Oder ist es vieleicht so gedacht, dass ich damit die ganze welt drehe oder bewege (was als ersatz für die bewegung der kamera dient) und für einzelne objekte muss ich dann die koordinaten der eckpunkte verschieben um sie zu drehen/bewegen? *grübel*
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ OpenGL ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: