AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi OpenGL bewegen von Objekten geht schief
Thema durchsuchen
Ansicht
Themen-Optionen

OpenGL bewegen von Objekten geht schief

Ein Thema von Chefx · begonnen am 2. Dez 2009 · letzter Beitrag vom 5. Dez 2009
Antwort Antwort
Seite 1 von 2  1 2      
Chefx

Registriert seit: 13. Jun 2009
Ort: Radebeul
241 Beiträge
 
Turbo Delphi für Win32
 
#1

OpenGL bewegen von Objekten geht schief

  Alt 2. Dez 2009, 21:21
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:
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:
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!
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

danke im voraus

MfG
Chefx
ein Sprichwort für Programmierer:
"Viele wege fürn zur EXE, aber ob sie funktioniert ist die andere Frage."
schau mal bei www.xlite.de.tc vorbei
  Mit Zitat antworten Zitat
Chefx

Registriert seit: 13. Jun 2009
Ort: Radebeul
241 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: OpenGL bewegen von Objekten geht schief

  Alt 3. Dez 2009, 21:58
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

ihr müsst noch das eine bild in den tex odner rein kopieren!
Angehängte Dateien
Dateityp: zip tex_168.zip (2,86 MB, 19x aufgerufen)
Dateityp: zip programm_112.zip (607,2 KB, 26x aufgerufen)
ein Sprichwort für Programmierer:
"Viele wege fürn zur EXE, aber ob sie funktioniert ist die andere Frage."
schau mal bei www.xlite.de.tc vorbei
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#3

Re: OpenGL bewegen von Objekten geht schief

  Alt 4. Dez 2009, 06:27
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 .
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Chefx

Registriert seit: 13. Jun 2009
Ort: Radebeul
241 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: OpenGL bewegen von Objekten geht schief

  Alt 4. Dez 2009, 22:12
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 ^^

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^^
Miniaturansicht angehängter Grafiken
bildfolge_112.jpg  
ein Sprichwort für Programmierer:
"Viele wege fürn zur EXE, aber ob sie funktioniert ist die andere Frage."
schau mal bei www.xlite.de.tc vorbei
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#5

Re: OpenGL bewegen von Objekten geht schief

  Alt 4. Dez 2009, 22:24
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;
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Chefx

Registriert seit: 13. Jun 2009
Ort: Radebeul
241 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: OpenGL bewegen von Objekten geht schief

  Alt 4. Dez 2009, 22:47
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):
Code:
    |--object
    |     |--cube.3ds
    |     |--haus.3ds
    |--tex
    |    |---haus.bmp
    |    |---kiste.bmp
    |
    |--oben.jpg
    |--seiten.jpg
    |--unten.jpg
so das müsste alles gewesen sein^^
Angehängte Dateien
Dateityp: zip scoure_109.zip (299,0 KB, 10x aufgerufen)
ein Sprichwort für Programmierer:
"Viele wege fürn zur EXE, aber ob sie funktioniert ist die andere Frage."
schau mal bei www.xlite.de.tc vorbei
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: OpenGL bewegen von Objekten geht schief

  Alt 4. Dez 2009, 23:06
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.
  Mit Zitat antworten Zitat
Benutzerbild von Lumpiluk
Lumpiluk

Registriert seit: 25. Dez 2008
110 Beiträge
 
#8

Re: OpenGL bewegen von Objekten geht schief

  Alt 5. Dez 2009, 12:16
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
  Mit Zitat antworten Zitat
Chefx

Registriert seit: 13. Jun 2009
Ort: Radebeul
241 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: OpenGL bewegen von Objekten geht schief

  Alt 5. Dez 2009, 15:10
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.

vielleicht mal anders rum, wie würdet ihr das machen?
wenn ihr das haus und den würfel mit rot und trans verändern möchtet.
vielleicht kann man dann den fehler "raus lesen"?
ein Sprichwort für Programmierer:
"Viele wege fürn zur EXE, aber ob sie funktioniert ist die andere Frage."
schau mal bei www.xlite.de.tc vorbei
  Mit Zitat antworten Zitat
Benutzerbild von Lumpiluk
Lumpiluk

Registriert seit: 25. Dez 2008
110 Beiträge
 
#10

Re: OpenGL bewegen von Objekten geht schief

  Alt 5. Dez 2009, 15:24
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 Uhr.
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