Autor Beitrag
Lindenbaum
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 06.10.08 14:45 
Hallo und :welcome: im Forum!

Womit arbeitest du denn? Um mit OpenGL zu arbeiten gibt es verschiedene Möglichkeiten. Und wie weit bist du denn bisher?
Lindenbaum Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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...

ausblenden volle Höhe Delphi-Quelltext
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); //dieser Befehl zeichnet einen Würfel.

glVertex3d(0.5, -0.5, 0.5); //Linke Seite
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); //Rückseite
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); //Oberseite
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); //Vorderseite
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); //Boden / Unterseite
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); //Rechte Seite
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 user profile iconmatze: Delphi-Tags hinzugefügt
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Mo 06.10.08 18:16 
Hi,

Deinen Quelltext packst du am besten in
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: Mi 08.10.08 08:46 
HI,

ich würd mir da n array für die Würfel machen. z.b:

ausblenden 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):
ausblenden volle Höhe Delphi-Quelltext
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); //dieser Befehl zeichnet einen Würfel.
  glVertex3d(0.5, -0.5, 0.5); //Linke Seite
  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); //Rückseite
  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); //Oberseite
  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); //Vorderseite
  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); //Boden / Unterseite
  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); //Rechte Seite
  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:
ausblenden 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;  //Matrix speichern
      glTranslatef(wuerfel[i].Position[0],
                   wuerfel[i].Position[1],
                   wuerfel[i].Position[2]); //zeichenstift verrücken
      glRotatef(wuerfel[i].Rotation[0],
                wuerfel[i].Rotation[1], 
                wuerfel[i].Rotation[2]); //würfel drehen
      glScalef(wuerfel[i].Scale[0],
               wuerfel[i].Scale[1], 
               wuerfel[i].Scale[2]); //größe ändern
      RenderCube; //würfel zeichnen
    glPopMatrix;   //Matrix laden

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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Di 04.11.08 17:10 
Hi,

Na, das hast du ja schön lange vor dir hergeschoben :roll: 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 :zwinker: 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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46

Win Vista (64 Bit) + W7 Up
(Delphi 7,) Java 6 (Eclipse+ BlueJ), OpenGL2.0
BeitragVerfasst: 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:
ausblenden volle Höhe Delphi-Quelltext
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);//Vorderseite
     glVertex3f( 0     , 0   , 0);
     glVertex3f( Breite, 0   , 0);
     glVertex3f( Breite, Höhe, 0);
     glVertex3f( 0     , Höhe, 0);
   glEnd;
   
   glBegin(GL_Quads);//Rückseite
     glVertex3f( 0     , 0   , Tiefe);
     glVertex3f( Breite, 0   , Tiefe);
     glVertex3f( Breite, Höhe, Tiefe);
     glVertex3f( 0     , Höhe, Tiefe);
   glEnd;

   glBegin(GL_Quads);//rechts außen
     glVertex3f( Breite, 0   , 0    );
     glVertex3f( Breite, 0   , Tiefe);
     glVertex3f( Breite, Höhe, Tiefe);
     glVertex3f( Breite, Höhe, 0    );
   glEnd;

   glBegin(GL_Quads);//links außen
     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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
glTranslatef(0,0,0);//bei 0,0,0 wird der Würfel gezeichnet
Quad(1,1,1);
glTranslatef(2,0,0);//nächsten Würfel 2 Stellen weiter rechts zeichnen
Quad(1,1,1);
glTranslatef(2,0,0);//wieder 2 STellen weiter rechts
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:
ausblenden 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