Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 04, 2025 22:22

Foren-Übersicht » DGL » News
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 19 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
BeitragVerfasst: Do Sep 29, 2005 13:40 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Nachdem in den letzten Tagen verstärkt Fragen von OpenGL Einsteigern zum Thema "Positionieren von Objekten in OpenGL" auftauchten, hat Flash sich entschlossen dazu ein Tutorial zu verfassen.

Bild

Das neue Tutorial erklärt welche Matrizen es in OpenGL gibt (GL_MODELVIEW, GL_PROJECTION, GL_TEXTURE) , was sie können und welche Auswirkungen die Befehle glTranslate, glRotate und glScale auf die Matrizen haben.

Das gesammte Tutorial verzichtet auf mathematische Tiefschläge und baut vielmehr auf Bilder und Gleichnisse auf. Vorallem der Teil "Auswirkungen von Matrixmanipulationen" zeigt anhand von vielen Bildern was Kombinationen aus glTranslate, glRotate und glScale mit den Matrizen anfangen.

Das Tutorial ist nicht nur für Anfänger geeignet sondern speziell geschrieben.

Link zum Tutorial: Tutorial Matrix2

Feedback bitte wie üblich in unser Feedback-Forum.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 29, 2005 14:54 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Sep 23, 2005 20:31
Beiträge: 212
Wohnort: Sachsen/ Vogtland
Vielen Dank. Das ist ein sehr anschauliches Tutorial geworden.

DNA

_________________
Heute code ich, morgen debug ich, und übermorgen caste ich die Königin auf int.
http://www.2ndmoon.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 29, 2005 15:00 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Sehr schöne Arbeit, Flash!
Du entwickelst dich direkt zum Arbeitstier, so wie du zur Zeit immer neue Werke ablieferst (Wiki)!

Wie hast du diese schönen, anschaulichen Bildchen gemacht?

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 29, 2005 16:35 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Die Bilder?
Mit Delphi und OpenGL :mrgreen:

Nein wirklich: Ich hab ein kleines Programm geschrieben was das rendert. Dazu hab ich eine Klasse TGrid definiert, die sich rendern konnte. Und dann konnte man den Grids ne Farbe verpassen und sie auch noch an und ausschalten.
Das wars schon...der Rest ist glLight und glShadeModel(GL_SMOOTH) zu verdanken. Die Farben hatte ich so im Kopf...ich musste das einfach lila machen...weiß auch net warum ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 29, 2005 16:55 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Schaut wirklich Profi-like aus!

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 29, 2005 21:26 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
8) Was hast du erwartet!? :mrgreen:

Danke ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 30, 2005 13:07 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Eigenlob stinkt :wink: aber mal zum Tut.
Sieht auf dem ersten Blick gut aus und ich danke schon mal in vorraus.
Denn nun kann ich mir das erklären im #delphigl und #opengl.de channel ersparen und muss nur noch den link posten :D .
Das i Tüpfelchen wäre wenn du das Program was du geschrieben hast so modifizierst, dass man zur Laufzeit sich mal angucken kann wie sich die änderungen aufeinander auswirken. So verstehen die Neulinge schneller, da sie nicht nur lesen sondern auch selber dieses Testen können was passiert wenn sie eine transformation und rotation oder andere kombinationen setzen.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 30, 2005 13:38 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hmmm wie meinst du das mit dem Live erleben?
Ich könnte das Programm mal posten...aber um die Darstellung wirklich hübsch zu machen steht da zwischen den Bfehelen ja noch bisl anderer Kram. keine Ahnung ob ein Newbe damit was anfangen kann:

So zeichne ich die einzelnen Bilder
Code:
  1. procedure drawScene(Step : integer);
  2. begin
  3.      case Step of
  4.           0: begin
  5.                   aGrid.Active := true;
  6.                   aGrid.drawGrid;
  7.              end;
  8.           1: begin
  9.                   aGrid.Active := false;
  10.                   aGrid.drawGrid;
  11.  
  12.                   glTranslatef(3.5,0,-3);
  13.                   aGrid.Active := true;
  14.                   aGrid.drawGrid;
  15.              end;
  16.           2: begin
  17.                   aGrid.Active := false;
  18.                   aGrid.drawGrid;
  19.                   glTranslatef(3.5,0,-3);
  20.                   aGrid.drawGrid;
  21.  
  22.                   glRotatef(45, 0, 1, 0);
  23.                   aGrid.Active := true;
  24.                   aGrid.drawGrid;
  25.              end;
  26.           3: begin
  27.                   aGrid.Active := true;
  28.                   aGrid.drawGrid;
  29.              end;
  30.           4: begin
  31.                   aGrid.Active := false;
  32.                   aGrid.drawGrid;
  33.  
  34.                   glRotatef(45, 0, 1, 0);
  35.                   aGrid.Active := true;
  36.                   aGrid.drawGrid;
  37.              end;
  38.           5: begin
  39.                   aGrid.Active := false;
  40.                   aGrid.drawGrid;
  41.                   glRotatef(45, 0, 1, 0);
  42.                   aGrid.drawGrid;
  43.  
  44.                   glTranslatef(3.5,0,-3);
  45.                   aGrid.Active := true;
  46.                   aGrid.drawGrid;
  47.              end;
  48.           6: begin
  49.                   aGrid.Active := true;
  50.                   aGrid.drawGrid;
  51.              end;
  52.           7: begin
  53.                   aGrid.Active := false;
  54.                   aGrid.drawGrid;
  55.  
  56.                   glScalef(0.8,1,0.6);
  57.                   aGrid.Active := true;
  58.                   aGrid.drawGrid;
  59.              end;
  60.           8: begin
  61.                   aGrid.Active := false;
  62.                   aGrid.drawGrid;
  63.                   glScalef(0.8,1,0.6);
  64.                   aGrid.drawGrid;
  65.  
  66.                   glRotatef(45,0,1,0);
  67.                   aGrid.Active := true;
  68.                   aGrid.drawGrid;
  69.              end;
  70.           9: begin
  71.                   aGrid.Active := true;
  72.                   aGrid.drawGrid;
  73.              end;
  74.          10: begin
  75.                   aGrid.Active := false;
  76.                   aGrid.drawGrid;
  77.  
  78.                   glScalef(0.8,1,0.6);
  79.                   aGrid.Active := true;
  80.                   aGrid.drawGrid;
  81.              end;
  82.          11: begin
  83.                   aGrid.Active := false;
  84.                   aGrid.drawGrid;
  85.                   glScalef(0.8,1,0.6);
  86.                   aGrid.drawGrid;
  87.  
  88.                   glTranslatef(3.5,0,-3);
  89.                   aGrid.Active := true;
  90.                   aGrid.drawGrid;
  91.              end;
  92.          12: begin
  93.                   aGrid.Active := true;
  94.                   aGrid.drawGrid;
  95.              end;
  96.          13: begin
  97.                   aGrid.Active := false;
  98.                   aGrid.drawGrid;
  99.  
  100.                   glRotatef(45, 0, 1, 0);
  101.                   aGrid.Active := true;
  102.                   aGrid.drawGrid;
  103.              end;
  104.          14: begin
  105.                   aGrid.Active := false;
  106.                   aGrid.drawGrid;
  107.                   glRotatef(45, 0, 1, 0);
  108.                   aGrid.drawGrid;
  109.  
  110.                   glRotatef(45,1,0,0);
  111.                   aGrid.Active := true;
  112.                   aGrid.drawGrid;
  113.              end;
  114.          15: begin
  115.                   aGrid.Active := false;
  116.                   aGrid.drawGrid;
  117.                   glRotatef(45, 0, 1, 0);
  118.                   aGrid.drawGrid;
  119.                   glRotatef(45, 1, 0, 0);
  120.                   aGrid.drawGrid;
  121.  
  122.                   glTranslatef(3,0,0);
  123.                   aGrid.Active := true;
  124.                   aGrid.drawGrid;
  125.              end;
  126.      end;
  127. end;


Und so sieht drawGrid aus:
Code:
  1. procedure TGrid.drawGrid;
  2. var i,j                      : integer;
  3.     intens1, intens2         : real;
  4.     color                    : TArray3f;
  5. begin
  6.      if active then
  7.        begin
  8.             glEnable(GL_BLEND);
  9.             glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  10.             glBegin(GL_QUADS);
  11.               glColor4fv(@BGColor_Light);
  12.               glVertex3f(-l div 2, 0,  b div 2);
  13.               glVertex3f( l div 2, 0,  b div 2);
  14.               glColor4fv(@BGColor_Dark);
  15.               glVertex3f( l div 2, 0, -b div 2);
  16.               glVertex3f(-l div 2, 0, -b div 2);
  17.             glEnd;
  18.             glDisable(GL_BLEND);
  19.  
  20.             color := ActiveColor;
  21.        end else
  22.        begin
  23.             color := InActiveColor;
  24.        end;
  25.  
  26.      glDisable(GL_DEPTH_TEST);
  27.      for i := (-l div 2) to (l div 2)-1 do
  28.        for j := (-b div 2) to (b div 2)-1 do
  29.          begin
  30.               intens2 := ( (i+ (l div 2)) + (j+ (b div 2)) );
  31.               if intens2 = 0 then intens2 := 1/(l+b);
  32.               intens1 := 2*intens2 / (l+b);
  33.               intens2 := intens1 + ( 1/(l+b) );
  34.  
  35.               glBegin(GL_LINES);
  36.                 glColor3f(color[0]*intens1, color[1]*intens1, color[2]*intens1);
  37.                 glVertex3f(i,0,j);
  38.  
  39.                 glColor3f(color[0]*intens2, color[1]*intens2, color[2]*intens2);
  40.                 glVertex3f(i+1,0,j);
  41.  
  42.                 glColor3f(color[0]*intens1, color[1]*intens1, color[2]*intens1);
  43.                 glVertex3f(i,0,j);
  44.  
  45.                 glColor3f(color[0]*intens2, color[1]*intens2, color[2]*intens2);
  46.                 glVertex3f(i,0,j+1);
  47.               glEnd;
  48.          end;
  49.  
  50.      glLineWidth(2);
  51.      for i := (-l div 2) to (l div 2)-1 do
  52.          begin
  53.               intens2 := (i+ (l div 2)) + b;
  54.               if intens2 = 0 then intens2 := 1/(l+b);
  55.               intens1 := 2*intens2 / (l+b);
  56.               intens2 := intens1 + ( 1/(l+b) );
  57.  
  58.               glBegin(GL_LINES);
  59.                 glColor3f(color[0]*intens1, color[1]*intens1, color[2]*intens1);
  60.                 glVertex3f(i,0,b div 2);
  61.  
  62.                 glColor3f(color[0]*intens2, color[1]*intens2, color[2]*intens2);
  63.                 glVertex3f(i+1,0,b div 2);
  64.               glEnd;
  65.  
  66.               intens2 := (i+ (l div 2));
  67.               if intens2 = 0 then intens2 := 1/(l+b);
  68.               intens1 := 2*intens2 / (l+b);
  69.               intens2 := intens1 + ( 1/(l+b) );
  70.  
  71.               glBegin(GL_LINES);
  72.                 glColor3f(color[0]*intens1, color[1]*intens1, color[2]*intens1);
  73.                 glVertex3f(i,0,-b div 2);
  74.  
  75.                 glColor3f(color[0]*intens2, color[1]*intens2, color[2]*intens2);
  76.                 glVertex3f(i+1,0,-b div 2);
  77.               glEnd;
  78.          end;
  79.      for j := (-b div 2) to (b div 2)-1 do
  80.          begin
  81.               intens2 := (j+ (b div 2)) + l;
  82.               if intens2 = 0 then intens2 := 1/(l+b);
  83.               intens1 := 2*intens2 / (l+b);
  84.               intens2 := intens1 + ( 1/(l+b) );
  85.  
  86.               glBegin(GL_LINES);
  87.                 glColor3f(color[0]*intens1, color[1]*intens1, color[2]*intens1);
  88.                 glVertex3f(l div 2,0,j);
  89.  
  90.                 glColor3f(color[0]*intens2, color[1]*intens2, color[2]*intens2);
  91.                 glVertex3f(l div 2,0,j+1);
  92.               glEnd;
  93.  
  94.               intens2 := (j+ (b div 2));
  95.               if intens2 = 0 then intens2 := 1/(l+b);
  96.               intens1 := 2*intens2 / (l+b);
  97.               intens2 := intens1 + ( 1/(l+b) );
  98.  
  99.               glBegin(GL_LINES);
  100.                 glColor3f(color[0]*intens1, color[1]*intens1, color[2]*intens1);
  101.                 glVertex3f(-l div 2,0,j);
  102.  
  103.                 glColor3f(color[0]*intens2, color[1]*intens2, color[2]*intens2);
  104.                 glVertex3f(-l div 2,0,j+1);
  105.               glEnd;
  106.          end;
  107.  
  108.      if active then drawArrows;
  109.  
  110.      glLineWidth(1);
  111.  
  112.      glEnable(GL_DEPTH_TEST);
  113. end;


Ich könnte das alles nochn bisl komentieren...aber selber testen macht da wohl schlauer... Ich sag mal...sich die aktuellen Achsen anzeigen zu lassen sollte jeder Anfänger hinbekommen:

Code:
  1. procedure zeichneKoordAchsen;
  2. begin
  3.      glBegin(GL_LINES);
  4.        //X-Achse
  5.        glColor3f(1,0,0);
  6.        glVertex3f(0,0,0); glVertex3f(1,0,0);
  7.        //Y-Achse
  8.        glColor3f(0,1,0);
  9.        glVertex3f(0,0,0); glVertex3f(0,1,0);
  10.        //Z-Achse
  11.        glColor3f(0,0,1);
  12.        glVertex3f(0,0,0); glVertex3f(0,0,1);
  13.      glEnd;
  14. end;

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 30, 2005 14:05 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Nicht als Quelltext. Nein, so ein richtig umfangreiches Matrizenausprobier Programm, wo man der Reihe nach diese Matrizen-Befehle auswählen kann und das Ergebnis direkt angezeigt bekommt, so dass man damit herumspielen kann wäre sicherlich eine gute Sache um als Anfänger einen Eindruck von den Matrizen zu bekommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 30, 2005 14:09 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Achso...
Hmmm...Jo....könnte ich übers wochenende mal basteln...

Habt recht...ist bestimmt hilfreich

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 30, 2005 17:12 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
So ein Programm existiert doch bereits schon seit Jahren und wurde damals von Lithander geschrieben. In den Einsteigertutorials wird bereits seit Monaten auf dieses Programm verwiesen. Das Programm heißt MatrixControl und kann auf Lithanders Seite (http://www.pixelpracht.net/) herunter geladen werden.
Es wäre gut, wenn du es in deinem Tutorial verlinken könntest.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 30, 2005 21:21 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Genau so wie dieses Programm dachte ich es mir :wink:
Ich denke es wäre super auf das Programm zu verweisen.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 01, 2005 00:49 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
NaSuper! Ich hab jetzt mein Tool auch schon zu 60% fertig... Ich hätte da quasi was gebaut was Bilder im Stiele der Tutorialbilder rendert...

Glaubt ihr es hätte Sinn da weiter zu coden?

Ich werd erstmal Lithanders Programm verlinken...

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 01, 2005 00:52 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Was Lithanders Programm nicht kann ist sozusagen alle Stationen des Weges anzuzeigen den das Objekt genommen hat. (Mit Pfeilen oder so) Das wäre dann noch eine Verbesserungsmöglichkeit.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 01, 2005 00:59 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Also das kann mein Programm auch net... (War mit Photoshop gemacht)
Ich hab so ne Art Scriptinterpreter geschrieben. Und der User kann dann mit den Pfeiltasten Schritt für Schritt das Ergebnis bewundern...es ist auch möglich die Alten schritte dabei ausgegraut anzuzeigen...
aber Pfeile halt nicht ;)

Der User kann das "Script" nach belieben erweitern und weitere Befehle hinzufügen. Ausgegeben wird dann so ein Koordinatensystem wie auf den Bildern.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 19 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » DGL » News


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.012s | 16 Queries | GZIP : On ]