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

Aktuelle Zeit: So Jul 13, 2025 20:51

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Texturen, Maus und Tutorials ...
BeitragVerfasst: Mo Apr 25, 2005 10:06 
Offline
DGL Member

Registriert: Fr Apr 15, 2005 10:30
Beiträge: 28
Moin !

1) Texturen & Tuts...
Ich lese gerade das Tutorial zu den Texturen durch. Und so richtig glücklich werde ich damit nicht. Da gibt es eine Variable tex die verwendet wird, aber es wird nicht gezeigt wie man sie einzurichten hat. Nun stehe ich da mit meinem Latein ... :? Ok, das habe ich noch gefunden in der Demo ...
Dann muss es heißen: glGenTextures(1, @tex); und nicht wie im Tut geschrieben glGenTextures(1, tex); ...

So und wenn ich das nun rennen lasse so wie ich meine das es funzen könnte, dann werden selbst meine Striche mit der Textur überzogen. :evil:
Und ich kann aus dem Tut auch nicht erkennen wie ich diese Texttur un an ein bestimmtes Objekt binde.

Vielleicht generell mal eine Anmerkung zu den Tuts ... Ich finde es extrem schwierig, zu erkennen in welcher Reihenfolge ich welchen Befehl aufrufen muss (und das scheint ja schon eine wichtige Sache zu sein). Deswegen habe ich auch bei meinen ersten Versuchen nicht wirklich brauchbare Ergebnisse bekommen.
Und jetzt bei den Texturen steht man als Anfänger auch irgendwie im Wald. Ich weiss zwar vom Prinzip wie es gehen soll, aber mir ist schleierhaft, wie ich das nun in meine Anwendung einbauen muss. Nun könnte ich mir die Demo ansehen und nutzen, aber da wäre der Lerneffekt nicht so doll.
Also wenn ihr wirklich die Tuts nochmal umschreibt oder erweitern wollt, dann würde ich das evtl. so machen, das man nach den Tuts wirklich weiss was wo wann und wieso hingehört. Weil mit den jetzigen Tuts verstehe ich nur die Technik, aber nicht immer unbedingt das praktische "Doing". (Geht zumindest mir so ...)

2) die Sache mit der Mausabfrage ...
Ich hatte da so eine Idee bezüglich der Mausabfrage. Und zwar kann ich ja die drei Maustasten abfragen. Damit könnte ich ja prinzipiell sagen wir mal 4 Zustände erreichen.
- linke Maustaste
- rechte Maustaste
- linke & rechte Maustaste
- mittlere Maustaste
Damit sollte ich doch prinzipiell Objektposition & -lage sowie Kameraposition & -lage einstellen können. Das ist für X und Y Position auch nicht so schwer vermute ich mal. Aber wie mache ich das mit dem Z-Wert. Die Maus liefert mir ja diese Informationen leider nicht.
Hat da jemand einen Tip wie man sowas lösen kann?

_________________
Greetz Moelski


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 25, 2005 10:34 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Das Problem an dem Texturentutorials ist, dass es auch ein wenig veraltet ist. Ich würde dir aber auch einen anderen Loader als die glaux vorschlagen. Eine Übersicht über die bestehenden Loader findest du hier. Eine neuere Version von der glBitmap gibt es noch hier. Allerdings ist diese noch eine Beta Version. Liegt aber daran, dass ich noch nicht alles so testen konnte wie ich es wollte und die Freigabe ein wenig überstürzt war.

Erstellt wird die glBitmap so.
Code:
  1.   FTex := TglBitmap2D.Create;
  2.   FTex.LoadFromFile ('Seifenblase.jpg');
  3.   FTex.GenTexture;

Das musst du aufrufen, wenn opengl initialisiert wurde. Und bevor du OpenGL wieder schließt solltest du FTex.Free aufrufen.

Um die Textur zu Binden musst du FTex.Bind; aufrufen. Und wenn du sie nicht mehr haben willst, dann glDisable(GL_TEXTURE_2D);. Damit wird die Texturenbenutzung in OpenGL abgestellt. Oder du benutzt eine andere Textur. Eigentlich sollte es das auch schon gewesen sein.

Zum Thema Maus. Wie wäre es, wenn du Shift oder Steuerung noch mit einfließen lässt. Das ist dann so wie eine zusätzliche Maustaste. Oder eine Kombination aus beidem.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 25, 2005 11:01 
Offline
DGL Member

Registriert: Fr Apr 15, 2005 10:30
Beiträge: 28
Moin !

@Lossy eX:
Danke für den Hinweis. So ich habe die Textur nun geladen. Aber wie nun weiter?
Ich möchte gerne einen Rasen in ein paar Vierecke einzeichnen. Dieses Bodengitter erzeuge ich mit folgendem Code.
Code:
  1.   FTex.Bind;
  2.   glbegin(gl_lines);
  3.     glcolor3f(0.3,0.3,0.3);
  4.     glvertex3f(-3,-1,-3);
  5.     glvertex3f(3,-1,-3);
  6.     glvertex3f(-3,-1,-3);
  7.     glvertex3f(-3,-1,3);
  8.     glvertex3f(-3,-1,3);
  9.     glvertex3f(3,-1,3);
  10.     glvertex3f(3,-1,-3);
  11.     glvertex3f(3,-1,3);
  12.  
  13.     glvertex3f(2,-1,-3);
  14.     glvertex3f(2,-1,3);
  15.     glvertex3f(1,-1,-3);
  16.     glvertex3f(1,-1,3);
  17.     glvertex3f(0,-1,-3);
  18.     glvertex3f(0,-1,3);
  19.     glvertex3f(-1,-1,-3);
  20.     glvertex3f(-1,-1,3);
  21.     glvertex3f(-2,-1,-3);
  22.     glvertex3f(-2,-1,3);
  23.  
  24.     glvertex3f(-3,-1,-2);
  25.     glvertex3f(3,-1,-2);
  26.     glvertex3f(-3,-1,-1);
  27.     glvertex3f(3,-1,-1);
  28.     glvertex3f(-3,-1,0);
  29.     glvertex3f(3,-1,0);
  30.     glvertex3f(-3,-1,1);
  31.     glvertex3f(3,-1,1);
  32.     glvertex3f(-3,-1,2);
  33.     glvertex3f(3,-1,2);
  34.   glend;
  35.   glDisable(GL_TEXTURE_2D);

Habe mal versucht die beiden Befehle so einzubinden, aber das scheints noch nicht zu sein ... Also wenn du mir noch kurz sagen kannst wie es nun weiter geht .... \":roll:\"

Vielleicht hier noch meine ganze Renderroutine ...
Code:
  1. procedure TGLForm.ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
  2. var _i:         Integer;
  3. begin
  4.   // In die Projektionsmatrix wechseln
  5.   glMatrixMode(GL_PROJECTION);
  6.   // Identitätsmatrix laden
  7.   glLoadIdentity;
  8.   // Viewport an Clientareal des Fensters anpassen
  9.   glViewPort(0, 0, Panel1.Width, Panel1.ClientHeight);
  10.   // Perspective, FOV und Tiefenreichweite setzen
  11.   gluPerspective(60, ClientWidth/ClientHeight, 1, 128);
  12.  
  13.   // In die Modelansichtsmatrix wechseln
  14.   glMatrixMode(GL_MODELVIEW);
  15.   // Identitätsmatrix laden
  16.   glLoadIdentity;
  17.   // Farb- und Tiefenpuffer löschen
  18.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  19.  
  20.   //1)
  21.   gltranslatef(0,0,-Trackbar1.Position/4);
  22.  
  23.   //2)
  24.   glrotatef(Trackbar2.Position,0,0,-1);
  25.   glrotatef(Trackbar3.Position,0,-1,0);
  26.   glrotatef(Trackbar4.Position,-1,0,0);
  27.  
  28.   //3)
  29.   gltranslatef(-Trackbar5.Position/10,-Trackbar6.Position/10,-Trackbar7.Position/10);
  30.  
  31.   //  Koordinatenkreuz!!!
  32.   gllinewidth(1);
  33.   glbegin(gl_lines);
  34.     glcolor3f(1,0,0);
  35.     glvertex3f(0,0,0);
  36.     glvertex3f(2,0,0);
  37.     // Pfeilspitze
  38.     glcolor3f(0.8,0,0);
  39.     glvertex3f(2,0,0);
  40.     glvertex3f(1.8,0.2,0);
  41.     glvertex3f(2,0,0);
  42.     glvertex3f(1.8,-0.2,0);
  43.  
  44.     glcolor3f(0,1,0);
  45.     glvertex3f(0,0,0);
  46.     glvertex3f(0,2,0);
  47.     // Pfeilspitze
  48.     glcolor3f(0,0.8,0);
  49.     glvertex3f(0,2,0);
  50.     glvertex3f(0.2,1.8,0);
  51.     glvertex3f(0,2,0);
  52.     glvertex3f(-0.2,1.8,0);
  53.  
  54.     glcolor3f(0,0,1);
  55.     glvertex3f(0,0,0);
  56.     glvertex3f(0,0,2);
  57.     // Pfeilspitze
  58.     glcolor3f(0,0,0.<!-- s8) --><img src=\"{SMILIES_PATH}/icon_cool.gif\" alt=\"8)\" title=\"Cool\" /><!-- s8) -->;
  59.     glvertex3f(0,0,2);
  60.     glvertex3f(0.2,0,1.<!-- s8) --><img src=\"{SMILIES_PATH}/icon_cool.gif\" alt=\"8)\" title=\"Cool\" /><!-- s8) -->;
  61.     glvertex3f(0,0,2);
  62.     glvertex3f(-0.2,0,1.<!-- s8) --><img src=\"{SMILIES_PATH}/icon_cool.gif\" alt=\"8)\" title=\"Cool\" /><!-- s8) -->;
  63.   glend;
  64.  
  65.   // Bodenareal zeichnen ...
  66.   FTex.Bind;
  67.   glbegin(gl_lines);
  68.     glcolor3f(0.3,0.3,0.3);
  69.     glvertex3f(-3,-1,-3);
  70.     glvertex3f(3,-1,-3);
  71.     glvertex3f(-3,-1,-3);
  72.     glvertex3f(-3,-1,3);
  73.     glvertex3f(-3,-1,3);
  74.     glvertex3f(3,-1,3);
  75.     glvertex3f(3,-1,-3);
  76.     glvertex3f(3,-1,3);
  77.  
  78.     glvertex3f(2,-1,-3);
  79.     glvertex3f(2,-1,3);
  80.     glvertex3f(1,-1,-3);
  81.     glvertex3f(1,-1,3);
  82.     glvertex3f(0,-1,-3);
  83.     glvertex3f(0,-1,3);
  84.     glvertex3f(-1,-1,-3);
  85.     glvertex3f(-1,-1,3);
  86.     glvertex3f(-2,-1,-3);
  87.     glvertex3f(-2,-1,3);
  88.  
  89.     glvertex3f(-3,-1,-2);
  90.     glvertex3f(3,-1,-2);
  91.     glvertex3f(-3,-1,-1);
  92.     glvertex3f(3,-1,-1);
  93.     glvertex3f(-3,-1,0);
  94.     glvertex3f(3,-1,0);
  95.     glvertex3f(-3,-1,1);
  96.     glvertex3f(3,-1,1);
  97.     glvertex3f(-3,-1,2);
  98.     glvertex3f(3,-1,2);
  99.   glend;
  100.   glDisable(GL_TEXTURE_2D);
  101.     //4)
  102.     gltranslatef(Trackbar8.Position/10,Trackbar9.Position/10,Trackbar10.Position/10);
  103.     //5)
  104.     glrotatef(Trackbar11.Position,1,0,0);
  105.     glrotatef(Trackbar12.Position,0,1,0);
  106.     glrotatef(Trackbar13.Position,0,0,1);
  107.     //6)
  108.     glscalef(Trackbar14.Position/10,Trackbar15.Position/10,Trackbar16.Position/10);
  109.  
  110.   glBegin(GL_LINE_STRIP);
  111.   for _i := 0 to length(x) - 1 do begin
  112.     if length(x) = 0 then break;
  113.  
  114.     glPushMatrix;
  115.  
  116.       glColor3b(Round(y[_i] * 80) + 50,Round(y[_i] * 40)+ 40,0);
  117.       glVertex3f(x[_i], y[_i], z[_i]);
  118.  
  119.     glPopMatrix;
  120.   end;
  121.   glEnd();
  122.  
  123.   glBegin(GL_LINE_STRIP);
  124.   for _i := 0 to length(x) - 1 do begin
  125.     if length(x) = 0 then break;
  126.  
  127.     glPushMatrix;
  128.  
  129.       glColor3b(70,70,70);
  130.       glVertex3f(x[_i], - 0.5, z[_i]);
  131.  
  132.     glPopMatrix;
  133.   end;
  134.   glEnd();
  135.  
  136.   glBegin(GL_LINES);
  137.   for _i := 0 to length(x) - 1 do begin
  138.     if length(x) = 0 then break;
  139.  
  140.     glPushMatrix;
  141.       if (_i mod 400) = 0 then begin
  142.         glColor3b(20,20,35);
  143.         glVertex3f(x[_i], - 0.5, z[_i]);
  144.         glVertex3f(x[_i], y[_i], z[_i]);
  145.       end;
  146.     glPopMatrix;
  147.   end;
  148.   glEnd();
  149.  
  150.   ShowText;
  151.  
  152.   // Hinteren Puffer nach vorne bringen
  153.   SwapBuffers(DC);
  154.  
  155.   // Windows denken lassen, das wir noch nicht fertig wären
  156.   Done := False;
  157.  
  158.   // Nummer des gezeichneten Frames erhöhen
  159.   inc(Frames);
  160.   // FPS aktualisieren
  161.   if GetTickCount - StartTick >= 500 then begin
  162.     FPS       := Frames/(GetTickCount-StartTick)*1000;
  163.     Frames    := 0;
  164.     StartTick := GetTickCount
  165.   end;
  166. end;


Das mit der STRG + Maus ist ne Gute Idee![/pascal]

_________________
Greetz Moelski


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 25, 2005 11:40 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Habe das Thema gerade mal verschoben.

Du musst den einzelnen Koordinaten jetzt natürlich auch noch eine Texturkoordinaten verpassen sonst weiß OpenGL ja nicht welche Stelle er von der Textur nehmen soll.

Code:
  1.   glBegin(GL_QUADS);
  2.     glTexCoord2f(0, 1);  glVertex3f(- 3, - 3, 0);
  3.     glTexCoord2f(1, 1);  glVertex3f(  3, - 3, 0);
  4.     glTexCoord2f(1, 0);  glVertex3f(  3,   3, 0);
  5.     glTexCoord2f(0, 0);  glVertex3f(- 3,   3, 0);
  6.   glEnd;


Du kannst bei den Texturkoordinaten im übrigen auch einen Wert Größer als 1 angeben, dann wird sie gekachelt. Also anstelle der 1 jeweils eine 2. Dann ist sie auf einem Quad 4 Mal zu sehen. Dazu müsstest du aber vor dem GenTexture deiner Textur noch etwas aufrufen. Und war
Code:
  1. FTex.SetTextureWrap (GL_REPEAT, GL_REPEAT);

So könntest du deinen Rasen mit wesentlich weniger Quads darstellen.

[Edit] Methode heißt natürlich SetTextureWrap und nicht SetWrap. Hmmm. Warum eigentlich nicht? Eigentlich sollte ja klar sein, dass es sich um eine Textur handelt. ;-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 25, 2005 12:15 
Offline
DGL Member

Registriert: Fr Apr 15, 2005 10:30
Beiträge: 28
Moin !

Aha, so funzt es:
Code:
  1.   glcolor3f(0,0.7,0);
  2.   FTex.Bind;
  3.   glBegin(GL_QUADS);
  4.     glTexCoord2f(0, 1);  glVertex3f(- 3, -1.01, -3);
  5.     glTexCoord2f(1, 1);  glVertex3f(  3, -1.01, -3);
  6.     glTexCoord2f(1, 0);  glVertex3f(  3, -1.01, 3);
  7.     glTexCoord2f(0, 0);  glVertex3f(- 3, -1.01, 3);
  8.   glEnd;
  9.   glDisable(GL_TEXTURE_2D);

Was ich ja wieder interessant finde ... glcolor3f änder die Farbe. Hmm, wie kriege ich denn dort die Orginalfarbe der Textur?

Und noch ne Frage ... Wenn ich Texturen verwende, dann ist doch mein "Gittermodell" quasi über, oder sehe ich da jetzt was falsch?

_________________
Greetz Moelski


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 25, 2005 12:49 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Deine ausgewählte Farbe wird mit der von der Textur (einzellnen Pixel) verrechnet. Wenn du also glColor3f(1, 0, 0); gesetzt hast dann dürfte die Textur ziemlich rot sein. Also solltest du vorher weiß als Farbe setzen, wenn du die Textur so wie in der Datei haben möchtest.

Dein Gittermodel ist nicht überflüssig. Es kommt immer darauf an was du vor hast und wie es wirken soll. Die OpenGL Linien haben den Vorteil, dass sie immer die gewählte Größe haben. Also 1 Pixel oder so. Was bei einer Textur nicht immer der Fall ist. Je nachdem wie groß die Textur ist und ob sie nah an der Kamera ist oder nicht. Was aber auch wieder von Vorteil sein kann, da die Linie dann weich gezeichnet wird. Aber das sind alles Faktoren die von jeweiligen Verwendungszweck abhängen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 25, 2005 12:54 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Die Orginalfarbe bekommst du mit glColor3f(1,1,1). Dann wird Weiß mit der Texturmultipliziert und das ergibt dann die Textur.

Wegen dem Gitter. Mal zuerst den Boden und dann das Gitter minimal über dem Boden (ohne Textur). Oder du änderst den Tiefentest zu GL_LEQUAL (siehe hier )

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 25, 2005 15:28 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Zudem findest Du zu den Tutorials unter Filez entsprechende Source Codes. Eigentlich alles, was auf Bildern zu sehen ist, sollte dort zu finden sein. Die Zuordnung ist ein wenig chaotisch, aber ... Codes sind auch da und diese sollten stets zumindest nach dem Lesen mit hinzugezogen werden.

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 7 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.010s | 16 Queries | GZIP : On ]