| Autor |
Beitrag |
Lindenbaum
Hält's aus hier
Beiträge: 10
|
Verfasst: Mo 06.10.08 14:28
Hallo liebe Experten,
ich muss in Open GL eine Würfelschlange machen, wobei die Würfel in einer unterschiedlichen Lage auf dem Bildschirm zu Anfang auftauchen sollten (also z.B. von oben rechts bis unten links insgesamt fünf Würfel) und zudem unterschiedlich groß sein sollen (oben rechts der Größte, danach folgen bis zur linken unteren Ecke immer kleiner werdende Würfel).
Danach sollten die Würfel in der Schlange sich über den Bildschirm bewegen. Kann mir jemand dabei helfen?
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 06.10.08 14:45
Hallo und  im Forum!
Womit arbeitest du denn? Um mit OpenGL zu arbeiten gibt es verschiedene Möglichkeiten. Und wie weit bist du denn bisher?
|
|
Lindenbaum 
Hält's aus hier
Beiträge: 10
|
Verfasst: Mo 06.10.08 16:01
Titel: Würfelschlange II
Hey,
also ich arbeite mit Delphi 7.0 und Open GL ganz normal. Das Problem ist, dass ich das Porgramm fast noch gar nicht kenne. Also ich kann einen Würfel zeichnen, der rotiert, aber keine Würfelschlange, mit unterschiedlicher Lage und Größe der Würfel, die sich dann in einer Reihe über den ganzen Bildschirm bewegen.
Kannst du mir dabei helfen?
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 06.10.08 16:05
Dann poste doch einfach mal was du hast, sonst kann man schlecht auf irgendwas aufbauen.
Die Frage ist, wo dabei das Problem liegt? In der Berechnung der Positionen? In der Anzeige selbst?
Ich selbst habe mit OpenGL bisher nicht besonders viel gemacht, da gibts andere hier, die sich da besser auskennen. Trotzdem könnte ich vielleicht, wenn ich Code sehe, auch was dazu sagen.
|
|
Lindenbaum 
Hält's aus hier
Beiträge: 10
|
Verfasst: Mo 06.10.08 18:12
Ja aber irgendwie andere interessieren sich hier nicht für mein Problem, der sich besser auskennt... Das Problem ist, dass ich mein Programm in der Schule auf meinem Account habe und nicht hier zu Hause verfügbar... Besonders die verschiedene Lage und die unetrschiedliche Lage der Würfel macht mir Probleme..
Hier so das Grundgerüst vom Würfel hab ich...
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| glBegin(GL_QUADS); glVertex3d(0.5, -0.5, 0.5); glVertex3d(-0.5, -0.5, 0.5); glVertex3d(-0.5, -0.5, -0.5); glVertex3d(0.5, -0.5, -0.5);
glVertex3d(-0.5, -0.5, -0.5); glVertex3d(-0.5, 0.5, -0.5); glVertex3d(0.5, 0.5, -0.5); glVertex3d(0.5, -0.5, -0.5);
glVertex3d(0.5, -0.5, -0.5); glVertex3d(0.5, 0.5, -0.5); glVertex3d(0.5, 0.5, 0.5); glVertex3d(0.5, -0.5, 0.5);
glVertex3d(-0.5, -0.5, 0.5); glVertex3d(-0.5, 0.5, 0.5); glVertex3d(0.5, 0.5, 0.5); glVertex3d(0.5, -0.5, 0.5);
glVertex3d(-0.5, -0.5, 0.5); glVertex3d(-0.5, 0.5, 0.5); glVertex3d(-0.5, 0.5, -0.5); glVertex3d(-0.5, -0.5, -0.5);
glVertex3d(-0.5, 0.5, 0.5); glVertex3d(0.5, 0.5, 0.5); glVertex3d(0.5, 0.5, -0.5); glVertex3d(-0.5, 0.5, -0.5); |
Danke übrigens für deine Hilfe
Moderiert von matze: Delphi-Tags hinzugefügt
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Mo 06.10.08 18:16
Hi,
Deinen Quelltext packst du am besten in Delphi-Tags: 1:
| <span class="inlineSyntax"><span class="codecomment">{PROTECTTAG22ee252e4b41464625bb80a8175ac404}</span></span> |
Einzelne Stellen markierst du mit dem | Highlight-Tag: |
[highlight] markierte Stelle [/highlight] |
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
Jann1k
      
Beiträge: 866
Erhaltene Danke: 43
Win 7
TurboDelphi, Visual Studio 2010
|
Verfasst: Mo 06.10.08 20:45
Hi,
ich würde dir erstmal die Tutorials von delphigl.com empfehlen, die sind ziemlich gut und mit bisschen Interesse auch gut zu verstehen.
Was dir bei deinem problem helfen könnte (um Würfel an verschiedenen Positionen in versciedenen Lagen zu zeichnen) sind die Funktionen glTranslate und glRotate. Die erste Funktion verschiebt den Koordinatenursprung deiner OpenGl Welt (und alle Objekte die danac gezeichnet werden), der zweite dreht deine OpenGl Welt (und alle Objekte die danach gezeichnet werden).
MfG
Basti
|
|
Lindenbaum 
Hält's aus hier
Beiträge: 10
|
Verfasst: Di 07.10.08 13:27
Hey,
danke schonmal für eure Antworten... Dann werde ich das mal ausprobieren... Könnt ihr mir vielleicht noch sagen wie ich es schaffe wenn ich die Schlange gezeichnet habe, dass sie sich dann in einer Reihe über den Bildschirm bewegt? Und muss ich bei glTranslate danach nochmal den Quelltext für den Würfel (siehe oben) einfügen?
Ich danke euch schonmal
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 07.10.08 13:31
Ja, du drehst deine Koordinatenwelt und zeichnest den nächsten Würfel wenn ich das richtig verstanden habe.
|
|
Lindenbaum 
Hält's aus hier
Beiträge: 10
|
Verfasst: Di 07.10.08 18:51
Also zeichne ich erst einen Würfel wie ich es oben im Text schon einmal angegeben habe, dann sag ich als Anweisung einfach gltranslate und glrotate und dann füge ich nochmal den Text von oben ein. Hab ich das jetzt richtig verstanden? Krieg ich so jetzt auch unterschiedlich große Würfel hin ja? Und die Bewegung der Schlange?
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 07.10.08 18:55
Ohne den Befehl zu kennen würde ich sagen, dass glVertex3d die Koordinaten der Würfelteile übergeben bekommt, d.h. du musst nur diese entsprechend der Größe anpassen. 
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mi 08.10.08 08:46
HI,
ich würd mir da n array für die Würfel machen. z.b:
Delphi-Quelltext 1:
| wuerfel: array[0..5] of record Position, Scale, Rotation: glVector3f; end; |
damit speicherst du die Position, Größe und Rotation der Würfel, und kannst sie dann während der Laufzeit ändern.
Dann würd ich mir eine Prozedur schreiben, mit der du deinen Würfel in einer Standartgröße renderst, z.b. 1 (hast du ja schon gemacht):
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| procedure RenderCube; begin glBegin(GL_QUADS); glVertex3d(0.5, -0.5, 0.5); glVertex3d(-0.5, -0.5, 0.5); glVertex3d(-0.5, -0.5, -0.5); glVertex3d(0.5, -0.5, -0.5);
glVertex3d(-0.5, -0.5, -0.5); glVertex3d(-0.5, 0.5, -0.5); glVertex3d(0.5, 0.5, -0.5); glVertex3d(0.5, -0.5, -0.5);
glVertex3d(0.5, -0.5, -0.5); glVertex3d(0.5, 0.5, -0.5); glVertex3d(0.5, 0.5, 0.5); glVertex3d(0.5, -0.5, 0.5);
glVertex3d(-0.5, -0.5, 0.5); glVertex3d(-0.5, 0.5, 0.5); glVertex3d(0.5, 0.5, 0.5); glVertex3d(0.5, -0.5, 0.5);
glVertex3d(-0.5, -0.5, 0.5); glVertex3d(-0.5, 0.5, 0.5); glVertex3d(-0.5, 0.5, -0.5); glVertex3d(-0.5, -0.5, -0.5);
glVertex3d(-0.5, 0.5, 0.5); glVertex3d(0.5, 0.5, 0.5); glVertex3d(0.5, 0.5, -0.5); glVertex3d(-0.5, 0.5, -0.5); glEnd; end; |
und dann kannst du in der normalen Render Prozedur die einzellnen Würfel so zeichnen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| var i: Integer;
for i := 0 to 5 do glPushMatrix; glTranslatef(wuerfel[i].Position[0], wuerfel[i].Position[1], wuerfel[i].Position[2]); glRotatef(wuerfel[i].Rotation[0], wuerfel[i].Rotation[1], wuerfel[i].Rotation[2]); glScalef(wuerfel[i].Scale[0], wuerfel[i].Scale[1], wuerfel[i].Scale[2]); RenderCube; glPopMatrix; |
so in etwa sollte das funzen. habs aber noch nich getesten, bin zur zeit nich daheim, aber ich meld mich dann nochma!
wenn du befehle nachlesen willst guck einfach ma auf delphigl.com, wie Jann1k schon gesagt hat...
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Lindenbaum 
Hält's aus hier
Beiträge: 10
|
Verfasst: Di 04.11.08 16:59
HILFE!!!! Das Programm funktioniert überhaupt nicht und ich muss das Programm am Freitag schon in der Schule abgeben... Könnt ihr mir noch in irgendeiner Weise helfen? Alles was ich versucht habe zu implementieren hat nicht funktioniert... Ich bitte nochmals um Hilfe bei dem Würfelschlangenproblem... Also konkret könnt ihr mir jetzt noch sagen, wie ich die Würfel dazu bringe, dass sie sich hintereinander bewegen? Irgendwie funtkionhiert das mit den verschiedenen Größen der Würfel auch noch nicht und dass mehrere gezeichnet werden!?
Ihr seid meine letzte Rettung!
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Di 04.11.08 17:10
Hi,
Na, das hast du ja schön lange vor dir hergeschoben  und dein Beitrag - Kurz, mit Tippfehlern, in einem Block getippt und unpräzise, was du genau nicht verstehst - hast du ja auch mal eben in einer halben Minute geschrieben
Gut, jetzt einmal Ruhe bewahren. Versuche, dich einmal in uns hereinzuversetzen: Wie kannst du es so beschreiben, dass wir dein Problem wirklich verstehen können? So, wie du es oben beschrieben hast, könntest du uns wahrscheinlich auch nicht helfen
Mach' dir am besten auch schnell eine Liste, was am ehesten drin sein muss.
Im Zweifelsfall musst du jetzt vielleicht auch einfach einmal die Erfahrung machen, du hast es ja anscheinend bisher darauf angelegt  Merk' dir das besser für's nächste Mal..
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
Lindenbaum 
Hält's aus hier
Beiträge: 10
|
Verfasst: Mi 05.11.08 18:11
Ich muss sagen, dass ich das in meiner Verzweiflung wirklich alles schnell in einer Minute geschrieben habe und dabei unpräzise war...
Also konkret geht es darum, dass zu Beginn des Programms vier Würfel in unterschiedlicher Größe nacheinander auf dem Bildschirm auftauchen sollen... Wenn der Letzte der vier Würfel aufgetaucht ist, sollen alle vier gemeinsam in einer Schlange über den Bildschirm wandern.
Aber ich frage euch ja gerade deswegen noch einmal, weil ich halt nicht unbedingt in den sauren Apfel beißen will und nur ein halb fertiges Programm abgeben will...
Es wäre also ganz lieb, wenn ich noch einmal auf eure Hilfe zählen könnte und ich hoffe das Problem ist noch einmal etwas deutlicher geworden.
Danke schonmal
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Mi 05.11.08 18:23
Hi,
Gut, mit der Zusmmenfassung sind wir schonmal ein Stück weiter
Was funktioniert denn im Moment schon, welche Fehler treten auf und wo hängst du/Was ist als nächstes nötig?
E: Habe mir gerade alles noch einmal angesehen.
Am besten, du deklarierst eine Klasse "TWuerfel". Die hat dann die Eingenschaftten X, Y und eventuell z-Position.
Eine Würfelschlange ist dann im Prinzip nur eine Gruppe von Würfeln, die zeitversetzt über den gleichen Weg bewegt werden.
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
DK99
      
Beiträge: 46
Win Vista (64 Bit) + W7 Up
(Delphi 7,) Java 6 (Eclipse+ BlueJ), OpenGL2.0
|
Verfasst: Do 13.11.08 17:14
Also falls du noch ne Antwort brauchst (der Freitag is ja schon vorbei) versuch ichs mal:
Als erstes würde ich mal eine Klasse oder Unit (oder einfach nur eine procedure)schreiben die das zeichnen von Würfeln übernimmt (also mit Variablen drin)
Also etwa so:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| procedure Quad(Breite,Höhe,Tiefe : real); begin glBegin(GL_Quads); glVertex3f( 0 , 0 , 0); glVertex3f( Breite, 0 , 0); glVertex3f( Breite, Höhe, 0); glVertex3f( 0 , Höhe, 0); glEnd; glBegin(GL_Quads); glVertex3f( 0 , 0 , Tiefe); glVertex3f( Breite, 0 , Tiefe); glVertex3f( Breite, Höhe, Tiefe); glVertex3f( 0 , Höhe, Tiefe); glEnd;
glBegin(GL_Quads); glVertex3f( Breite, 0 , 0 ); glVertex3f( Breite, 0 , Tiefe); glVertex3f( Breite, Höhe, Tiefe); glVertex3f( Breite, Höhe, 0 ); glEnd;
glBegin(GL_Quads); glVertex3f( 0, 0 , 0 ); glVertex3f( 0, Höhe, 0 ); glVertex3f( 0, Höhe, Tiefe); glVertex3f( 0, 0 , Tiefe); glEnd; end; |
So diese Funktion rufst du dann in deiner Render (Zeichnen) Procedure auf und verschiebst die jeweils erstellten Würfel mit glTranslatef(x,y,z); sodass sie z.B. hintereinander auf der x-Achse aufgereit sind.
Also z.B. so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| glTranslatef(0,0,0);Quad(1,1,1); glTranslatef(2,0,0);Quad(1,1,1); glTranslatef(2,0,0);Quad(1,1,1); |
Anschließend kannst du sie bewegen indem du einen Wert von glTranslatef(); bei jedem Render Durchgang erhöhst.
Du kannst die Würfel zum Beispiel auf der x-Achse entlang bewegen wie eine Schlange indem du bei jedem Durchgang den x-Wert von glTranslatef(); um einen bestimmten Wert erhöhst.
Mit einer Bewegung auf der x-Achse sähe dass dann so aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| glTranslatef(x,0,0);
glPushMatrix(); glTranslatef(0,0,0); Quad(1,1,1); glTranslatef(2,0,0); Quad(1,1,1); glTranslatef(2,0,0); Quad(1,1,1); glPopMatrix();
x := x+1; |
So hoffe dass ich dir jetz wenigstens nen bissl weiterhelfen konnte.
LG
_________________ "Sometimes it pays to stay in bed on Monday, rather than spending the rest of
the week debugging Monday's code."-- Dan Salomon
|
|
|