Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi OpenGL bewegen von Objekten geht schief (https://www.delphipraxis.net/144224-opengl-bewegen-von-objekten-geht-schief.html)

Chefx 2. Dez 2009 20:21


OpenGL bewegen von Objekten geht schief
 
hey leute ,

warum verschwindet das meshobjekt immer wenn man die kamera verändert?
irgendwie hab ich das mit der translatation nicht kapiert:
also wenn ich ein objekt erstelle und das korodinatensystem reinzeichne z.b:
Delphi-Quellcode:
glTranslated(1,0,1);
macht der an der position weiter ? ja, wenn ich das richtig verstanden haben (wenn nicht hab ich ein denkfehler und schreibt mir)
also mach ich an dem punkt p(1;0;1) weiter:
Delphi-Quellcode:
glTranslated(1,0,2);
also müsste er bei der position P(2;0;3) sein oder ? (sieht zumindest so aus^^)

so wenn ich jetzt das mache und die rotation noch davor schreibe dreht sich das zweite objekt "komisch" mit! :cry:
hier mal mein quelltext:
Delphi-Quellcode:
  glTranslated(0,0,-200);
  glRotatef(zoom, 1, 0, 0); // zoom verändert hier bloß den winkel ()
  glRotatef(zk, 0, 1, 0);
  glTranslated(xk/15+xap+zoom/5,0,zk/15+zap+zoom/5);

  glPushMatrix();
      glCallList(list[0]);
      glEnable(GL_CULL_FACE);
      glCullface(GL_back);

      mesh.AdvanceAnimation;
      mesh.Render;  // erstes objekt

      glTranslated(0,0,-7);
      glRotated(-90,1,0,0);
      haus.AdvanceAnimation;
      haus.Render; // zweites objekt

  glPopMatrix();
es ist vielleicht ein bissel komisch erklärt also wenn ihr noch ein paar infos braucht bin ich immer offen :mrgreen:

danke im voraus

MfG
Chefx

Chefx 3. Dez 2009 20:58

Re: OpenGL bewegen von Objekten geht schief
 
Liste der Anhänge anzeigen (Anzahl: 2)
hey leute ich hab mal das programm hier angehangen ^^
die steuerung:
nach links und rechts: <- und -> (pfeiltasten links, rechts)
nach oben und nach unten: /\ und \/ (pfeiltasten oben, unten)
und objekte drehen: scrollen ^^ (hier kommt der misteriöse effekt)

die kiste hab ich zu erst gezeichnet(mesh.render) und dann das haus (haus.render)
und mit ein bissel scrollen sieht man die kiste warum bloß? :(

der quelltext ist der gleiche vielleicht seht ihr jetzt den fehler oder steht genauso da wie ich :shock:

ihr müsst noch das eine bild in den tex odner rein kopieren!

Corpsman 4. Dez 2009 05:27

Re: OpenGL bewegen von Objekten geht schief
 
Als Linux User kann ich deine "exe" leider nicht testen.

Was mir aber auffällt ist das

glRotatef(zoom, 1, 0, 0);

nicht richtig sein kann, denn in Abhängigkeit vom Zoom die ganze Szene zu drehen erscheint mir doch sehr merkwürdig.

außerdem würde ich an deiner Stelle mal ein wenig mehr push's und pop's einbauen. in etwa so :
Delphi-Quellcode:
// Anfahren der Kamera Pos
  glLoadIdendity;
  glTranslated(xk/15+xap,0,zk/15+zap-200);
//  glRotatef(zoom, 1, 0, 0); // zoom verändert hier bloß den winkel ()
  glRotatef(zk, 0, 1, 0);
  glTranslated(zoom/5,0,zoom/5);

// Rendern der Objecte
glPushMatrix();
      glCallList(list[0]);
glPopMatrix();    
      glEnable(GL_CULL_FACE);
      glCullface(GL_back);
glPushMatrix();
      mesh.AdvanceAnimation;
      mesh.Render;  // erstes objekt
glPopMatrix();
glPushMatrix();
      glTranslated(0,0,-7);
      glRotated(-90,1,0,0);
      haus.AdvanceAnimation;
      haus.Render; // zweites objekt
glPopMatrix();
Denn nur so kannst du die Objekte einzeln und unabhängig verschieben.

So ich da mir nicht ganz klar war was nun genau dein Problem ist, sage ich einfach mal Probiere mal das hier aus, evtl. hilft es ja ;).

Chefx 4. Dez 2009 21:12

Re: OpenGL bewegen von Objekten geht schief
 
Liste der Anhänge anzeigen (Anzahl: 1)
hey,
danke für deine tipps aber leider ist es genauso wie es vorher war ich hab es jetzt geändert.
Ich hab hier noch ein bild hinzufügt was die sache gut beschreibt. Ich hab es mir schon vorgestellt das die beschreibung sehr dubios klingt ^^ :lol:

das bild geht von front-ansicht bis seiten-ansicht und das merkwürdige ist das bei der seiten-ansicht der würfel sichtbar ist und bei der front-ansicht sieht man den würfel nicht aber rein theoretisch müsste man ihn sehen aber nein^^:-D

Corpsman 4. Dez 2009 21:24

Re: OpenGL bewegen von Objekten geht schief
 
Also leider kann ich dir so nicht mehr groß helfen,

Evtl wäre es nützlich wenn, du das ganze in ein Sample exportierst, dessen Source du hier dann auch posten kannst.

Am Besten für mich zum "debuggen" unter Linux wäre natürlich , wenn so wenig wie möglich drum rum ist, dann müste ich nicht so viel umschreiben. Dein Screenshot sieht ja nach ein paar einfach zu ladenden Texturen und 8 vertices aus, die dann entsprechend vor einer Kamera stehen ...

Evtl hilft dir ja auch eines meiner OpenGL Samples weiter. In diesen benutze ich ständig derartige Transformationen.

Im Leveleditor von Balanced habe ich das Übrigens so gemacht :
Delphi-Quellcode:
  glClearColor(0, 0, 0, 0); // Black Background
  glClear(GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;
  glEnable(GL_NORMALIZE); // -- Die Sichtposition

// Anfahren der Cameraposition
    glTranslatef(0.0, -5.0 + max(min(viewer.Zoom, 5), 0), -15.0 + viewer.Zoom); // -- Die Sichtposition
    glRotatef(Viewer.nick, 1, 0, 0); // -- Die Sichtposition
    glRotatef(Viewer.Rotation, 0, 1, 0); // -- Die Sichtposition
    glTranslatef(Viewer.x, Viewer.y, Viewer.z); // -- Die Sichtposition

  Level.Render; // zeichnen des Levels
  OpenGLControl1.SwapBuffers;

Chefx 4. Dez 2009 21:47

Re: OpenGL bewegen von Objekten geht schief
 
Liste der Anhänge anzeigen (Anzahl: 1)
hier der gesamte quellcode .
achtet das die 3ds objekte und die texturen noch von oben benutzt werden müssen.
hier die ganzen dateien die fehlen (die man oben downloaden muss:-D):
Code:
    |--object
    |     |--cube.3ds
    |     |--haus.3ds
    |--tex
    |    |---haus.bmp
    |    |---kiste.bmp
    |
    |--oben.jpg
    |--seiten.jpg
    |--unten.jpg
so das müsste alles gewesen sein^^

blablab 4. Dez 2009 22:06

Re: OpenGL bewegen von Objekten geht schief
 
so wie ich das verstanden hab dreht er bei rotate alles was du bis jetzt gezeichnet hast um den angegebenen winkel, genauso funktionierts mit translate usw.
das bedeutet wenn du noch nix gezeichnet hast und rotate/translate/scale machst bringt das überhaupt nix.

Lumpiluk 5. Dez 2009 11:16

Re: OpenGL bewegen von Objekten geht schief
 
Zitat:

das bedeutet wenn du noch nix gezeichnet hast und rotate/translate/scale machst bringt das überhaupt nix.
Doch, natürlich!
Wenn man nämlich schon gezeichnet hat, wird das Objekt auch an die entsprechende Stelle gezeichnet. Schätze, das ist ungefähr so, als würdest du auf ein Papier ein Rechteck malen, dann überlegen, wohin es soll, das alte wegradieren und das gleiche nochmal an die neue position setzen. :)

Das Problem wird wahrscheinlich tatsächlich sein, dass du in rotate und translate dieselben Variablen benutzt. Heißt: Wenn du die Variable zum Nach-Links-Verschieben bei [<-] änderst, dreht sich auch gleich das ganze Objekt...

z.B. auch hier:
Delphi-Quellcode:
glTranslated(xk/15+xap,0,zk{!}/15+zap-200);
//  glRotatef(zoom, 1, 0, 0); // zoom verändert hier bloß den winkel ()
  glRotatef(zk{!}, 0, 1, 0);
Hoffe, ich konnte helfen ;)

Chefx 5. Dez 2009 14:10

Re: OpenGL bewegen von Objekten geht schief
 
hey,

das porblem ist immer noch:
Delphi-Quellcode:
 
  glTranslated(xk/15+xap,0,zk/15+zap-200);
  glRotatef(zoom, 0, 1, 0); // zoom nur zum test erst mal genutzt
wenn ich das so schreib (ist ja keine dopplung der varibalen mehr vorhanden) aber es ist das problem immer noch vorhanden^^
mir ist auch aufgefallen wenn ich das auf der x achse drehe sieht man auch erst das haus und dann kommt erst wieder dieser
würfel zum vorschein.:-D

vielleicht mal anders rum, wie würdet ihr das machen? :lol:
wenn ihr das haus und den würfel mit rot und trans verändern möchtet.
vielleicht kann man dann den fehler "raus lesen"? :gruebel:

Lumpiluk 5. Dez 2009 14:24

Re: OpenGL bewegen von Objekten geht schief
 
Ich weiß im Moment leider nicht genau, wie du das ganze drehen möchtest. Es gäbe ja einige Möglichkeiten, vielleicht sogar mehr: Würfel und Haus zusammen um die Y-Achse (in etwa so, als wäre der Würfel fest im "Garten" des Hauses installiert und man dreht sich darum), Würfel und Haus seperat um z.B. Y-Achse (würde mehrere Tasten zum Drehen erfordern) oder nur eins von beiden...

Es könnte aber auch nützlich sein, wenn du den Quellcode von der Tastaturabfrage mal posten würdest. Vielleicht kann man dann was im Zusammenhang erkennen oder der Fehler liegt evtl. sogar da.

Manchmal hilft auch einfach 'rumprobieren ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz