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

Aktuelle Zeit: Sa Aug 02, 2025 10:05

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



Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: So Mai 04, 2003 10:25 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 29, 2002 10:37
Beiträge: 251
Wohnort: Ulm
hallo,

ihr habt ja im textur kapitel die funktion:

glTexImage2D(GL_TEXTURE_2D, 0, 3, texture1^.sizeX, texture1^.sizeY,
0, GL_RGB, GL_UNSIGNED_BYTE, texture1^.data);

aufgerufen.

aber wieso dereferenziert ihr dabei (^). das ist eigentlich doch gar nicht notwendig, oder hab ich da was bei den pointern verpasst (denn die texture1 ist ja ein pointer auf die datei)

gruß
rochus

_________________
http://www.rochus.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 04, 2003 10:46 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Liegt vermutlich daran, dass ich dort die Header von Delphi verwendet habe und Du die 1.2er von Mike. Letztes ist defintiv richtiger ;)

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 04, 2003 11:32 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
ähem, es wird ja nicht data dereferenziert, sondern texture1, was mich vermuten lässt, dass eben dieses ein pointer ist und dann ist der dereferenzer nötig, um an data ranzukommen, was ja das ziel der ganzen sache sein dürfte


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 04, 2003 13:07 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
<!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre>
<span class='reserved'>type</span>
PRGBAImage = ^TRGBAImage;
TRGBAImage = <span class='reserved'>record</span>
width, height: integer;
data: PRGBATable;
<span class='reserved'>end</span>;

<span class='reserved'>var</span>
Tex: PRGBAImage;
Tex2: TRGBAImage;
</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->

Delphi erlaubt es (im Gegensatz zu den vorhergehenden Turbo Pascal Versionen) Strukturzeiger ohne besonderen Operator zu dereferenzieren.
Tex.data ist also gleichbedeutend zu Tex^.data (obwohl die zweitere Version eigentlich "richtiger" wäre, oder zumindest unmissverständlicher, als es hier auf jeden Fall klar ist, dass Tex ein Zeiger ist). Tex2^.data wäre übrigens auf jeden Fall falsch.
Ich nehme an Borland hat dies aufgrund des Delphi Klassenkonzeptes gemacht - Klasseninstanzen werden unter Delphi nämlich generell als Zeiger abgelegt, und die ganze Zeit ^ zu verwenden, sieht halt nicht so toll aus.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 08, 2003 19:33 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich hätte auch noch was zum Thema Texturen zu vermelden...
Ich bin grad (als blutiger Anfänger) an eben dieser Stelle angekommen. Das Tutorial benutzt die glaux. Im Forum wird allerdings davon abgeraten diese zu benutzen (weil überholt). Da ich als Anfänger aber unsicher mit dem Neuen Wissen bin, würde ich das gelernt aberl lieber weiter benutzen.

Deshalb eine Bitte an die Tutorialschreiber:

:!: Könntet ihr nicht glaux aus dem Tutorial entfernen und einen Texturlader verwenden, der auch in Zukunft Chancen hat? :?:

Ich denke kein Anfänger is böse darum, wenn das Texturen Tutorial um ein Kapitel erweitert wird, weil der Texturenlader mehr Möglichkeiten bietet. Dafür würde ja der Anfänger etwas lernen, was er auch für seine Projekte weiterverwenden kann. Ihr habt doch bestimmt einen Lader den ihr bevorzugt verwendet?! Also updatet doch bitte das Tutorial...Ich bin mir sicher die OpenGL Anfänger, ich allen voran, würden es euch sehhhr danken.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 08, 2003 20:18 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Der Schreiber ist hier ;) Ich bin momentan beruflich und schulisch sehr eng gefaßt und kann deswegen leider nichts versprechen. Es ist aber angedacht einige der Tutorials noch einmal zu überarbeiten, unter anderen würde dann auch ein Beispiel mit einem anderen Loader aufgegriffen werden. Technisch ändert sich abgesehen vom Loader nicht viel, da es wirklich nur ums Laden geht. Die Übergabe an OpenGL selbst ist überall eigentlich gleich. Wir haben einige Samples auf der Seite, die den Einsatz von glBMP erläutert, ein Sample für den DevIL, denke das sind (IMAO) wohl die besten Formate. Ebenfalls einfach zu verwenden ist der Loader von Jan Horn (Sulacao) und kommt mir Samples daher. Auch gibt es davon einige Abwandlungen z.B. von Aya oder auch von glBMP von Lossy Ex, dass in der SDK sein wird. Denke, gerade die von Jan Horn wird für Einsteiger sehr leicht zu lernen sein, da man praktisch nur eine Zeile verwendet um die Textur zu laden und das ganze somit sogar noch leichter als mit Glaux ist,

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 08, 2003 21:13 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Was ist denn euer bevorzugter Loader? Sollte man für die Zukunft auf DevIL setzen oder auf andere Sachen? Ich bin neu auf dem Gebiet und möchte lieber gleich die richtigen Sachen benutzen als sich dann nochmal umzustellen.

Also auf was setzt ihr in der Beziehung?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 08, 2003 21:16 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Ich denke "den Loader" oder der mit der meisten Zukunft gibt es nicht. SOS hat in seinem Bomberman gezeigt wie man einen Textur-Manager macht mit dem man theoretisch ja auch mehre Loader verwenden könnte. Ich selbst setze bei kleineren Versionen und Endversionen auf glBMP oder den Units von Jan Horn. Bei der Entwicklung setze ich gerne auf den DevIL, da man einige Bildmanipulationen ebenfalls mal eben schnell damit machen kann. Dieser wird jedoch leider nicht mehr weiterentwickelt und hat einige zusätzlcihe DLLs, die man sonst mitliefern müßte.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 13, 2004 20:53 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Aug 13, 2004 16:43
Beiträge: 3
Wohnort: Berlin
Guten Tach.
Wo wir grad beim Thema sind (Texturentutorial) möchte ich mal eine Frage stellen:
In der Zeile
Code:
  1. glGenTextures(1, tex);
wird bei mir beim Compilieren ein Fehler angezeigt ([Fehler] OpenGL_MainForm.pas(519): Inkompatible Typen: 'Cardinal' und 'PGLuint') :shock:
Delphi denkt, dass tex in diesem Zusammhang eine Cardinal-Vari ist!
Wenn ich die Zeile
Code:
  1. var tex: GLuint
durch
Code:
  1. var tex: PGluint
ersetze, wird zwar der Fehler an dieser Stelle nicht mehr angezeigt, aber er tritt in der Zeile
Code:
  1. glBindTexture(GL_TEXTURE_2D, tex);
gleich wieder auf.
Was mache ich falsch? (Bin noch absoluter VollN00b in Sachen OpenGL [Lerne es erst seit gestern :lol:] und möchte hiermit auch gleich noch meine Anerkennung für Phobeus und seinen Lektor für die unheimlich guten Tutorials ausdrücken [so was gutes hab' ich seit Rattikarls Tuts vor einigen Jahren nich mehr gelesen - und das will was heißen!] Also in dem Sinne - geheimnisse mal bitte einer die Lösung meines Problems :D)

_________________
"Es ist nur ein kleiner Sprung. Du gehst vor."
"Aaaahhhh..."
"Wir nehmen einen anderen Weg."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 13, 2004 21:25 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
glGenTextures erwartet einen Zeiger auf ein Integerfeld, in das die zu reservierenden Texturhandles geschrieben werden. Wenn du dir ohnehin nur eine Textur organisieren willst, tuts natürlich auch ein einzelner Integer (oder Cardinal, da das Vorzeichenbit in diesem Zusammenhang nicht interessiert).
Das sieht dann so aus:
Code:
  1.  
  2.   var handle: integer;
  3.   ...
  4.   glGenTextures(1, Addr(handle));
  5.   glBindTexture(GL_TEXTURE_2D, handle);
  6. ...
  7.  

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 14, 2004 08:21 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Aug 13, 2004 16:43
Beiträge: 3
Wohnort: Berlin
Ich weiß nich was ich falsch mache...
Es wird jetzt kein Fehler mehr angezeigt, aber so richtig das Wahre ist es auch nicht... :roll:
Anstatt eine Textur auf den Quad zu legen, wird der Quad durchsichtig angezeigt. (Besser gesagt - er wird gar nicht angezeigt :shock: , weder mit, noch ohne Textur.)
Ich poste mal ein bisschen mehr Code:
Code:
  1.  
  2. procedure TGLForm.ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
  3. var     texture1: PTAUX_RGBImageRec;
  4.         tex: GluInt;
  5.         handle: Integer;
  6.  
  7. ...
  8.  
  9. texture1 := auxDIBImageLoadA('./Texturen/Dachziegel.bmp');
  10. glGenTextures(1, Addr(handle));
  11. {glGenTextures(1, tex);}
  12. glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  13. glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
  14. glTexImage2D(GL_TEXTURE_2D, 0, 3,
  15.                         texture1^.sizeX, texture1^.sizeY, 0,
  16.                         GL_RGB, GL_UNSIGNED_BYTE, texture1^.data);
  17. glBindTexture(GL_TEXTURE_2D, handle);
  18. {glBindTexture(GL_TEXTURE_2D, tex);}
  19.  
  20. glPushMatrix;
  21.  
  22. ...
  23.  
  24. glBegin(GL_QUADS);
  25.   glTexCoord2f(0,1); glVertex3f( 1.5, 5, -3);
  26.   glTexCoord2f(0,0); glVertex3f( -0,3, -3);
  27.   glTexCoord2f(1,1); glVertex3f( -0, 3, -8);
  28.   glTexCoord2f(1,0); glVertex3f( 1.5,5, -8);
  29. glEnd();
  30.  
  31. ...
  32.  
  33. glPopMatrix;
  34.  


Also, was habe ich falsch gemacht? :oops:

_________________
"Es ist nur ein kleiner Sprung. Du gehst vor."
"Aaaahhhh..."
"Wir nehmen einen anderen Weg."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Aug 14, 2004 09:06 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Du musst das Texturhandle binden BEVOR du die entsprechenden Textureigenschaften (glTexImagexx, glTexParameterx) setzt.
OpenGL "merkt" sich dann die entsprechenden Textureigenschaften im Texturobjekt (auf welches das Handle zeigt), und in Zukunft musst du nur noch glBindTexture aufrufen, da die entsprechenden Textureigenschaften bereits im Texturobjekt liegen.

Was du machst, ist das Texturobjekt 0 (das standardmäßig aktiviert ist) mit Daten zu befüllen, dann bindest du dein Texturhandle, in dem nichts drin steht, und wunderst dich, warum das Ganze so komisch aussieht :wink: .

Also: ein Texturobjekt anzuwenden erfordert folgende Schritte:

1) Texturobjekt holen (glGenTextures)

2) Texturobjekt mit Daten befüllen (glBindTexture zum Aktivieren, glTexImage, glTexParameter)

3) Texturobjekt anwenden (glBindTexture zum Aktivieren, die Daten liegen bereits drin, können aber natürlich auch jederzeit wieder geändert werden)


Viele Anfänger machen den Fehler in jedem Frame das Texturobjekt erneut mit Daten zu befüllen - dies ist nicht notwendig, und führt die ganze OpenGL Texturverwaltung ad absurdum.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 16, 2004 11:51 
Offline
DGL Member

Registriert: Sa Okt 16, 2004 11:41
Beiträge: 8
Wohnort: Panketal
Hi,
ich hab den gleichen Fehler wie er eben diskutiert wurde, nur helfen mir die antworden leider überhaupt nicht. Das mit dieser Handle Variable vom Typ Integer hab ich gemacht. Die Fehlermeldung var dann weg aber die Textur ist immernoch nicht zu sehen. Das mit der Reichenfolge ist glaub ich auch richtig. ich poste einfach mal den Code. Vielleichtkann mir ja einer helfen.
Ich hab dazu das Temlate Vcl 15 benutzt. Die kommentare sind leicht verändert.

Code:
  1.  
  2. procedure TGLForm.ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
  3. var tex: GLUint;
  4.     handle:  Integer;
  5.     texture1: PTAUX_RGBImageRec;
  6. begin
  7.  
  8. glMatrixMode(GL_PROJECTION);       // In die Projektionsmatrix wechseln
  9. glLoadIdentity;              // Identitätsmatrix laden
  10. glViewPort(0, 0, ClientWidth, ClientHeight);     // Viewport an Clientareal des Fensters anpassen
  11. gluPerspective(60, ClientWidth/ClientHeight, 1, 128);  // Perspective, FOV und Tiefenreichweite setzen
  12.  
  13. glMatrixMode(GL_MODELVIEW); // In die Modelansichtsmatrix wechseln
  14. glLoadIdentity;    // Identitätsmatrix laden
  15. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);  // Farb- und Tiefenpuffer löschen
  16.  
  17. texture1 := auxDIBImageLoadA('./eins.bmp');
  18.         IF NOT Assigned( texture1 ) THEN
  19.         BEGIN
  20.          MessageBox(0,'Texturenpfad oder Dateiname falsch!',
  21.                         'Fehler beim Laden der Textur!',MB_OK or MB_ICONERROR);
  22.             Halt;
  23.         end;
  24. glGenTextures(1, Addr(handle));
  25. glBindTexture(GL_TEXTURE_2D, handle);
  26. glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  27. glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
  28. glTexImage2D(GL_TEXTURE_2D, 0, 3, texture1^.sizeX, texture1^.sizeY,0, GL_RGB, GL_UNSIGNED_BYTE, texture1^.data);
  29.  
  30. glBindTexture(GL_TEXTURE_2D, tex);
  31. // Hier kommt das hin was gerendert werden soll
  32.  
  33. glTranslatef(0,0,-5);
  34. glBegin(GL_QUADS);
  35.   glTexCoord2f(0,0); glVertex3f(-1,-1,0);
  36.   glTexCoord2f(0,1); glVertex3f(-1,1,0);
  37.   glTexCoord2f(1,1); glVertex3f(1,1,0);
  38.   glTexCoord2f(1,0); glVertex3f(1,-1,0);
  39. glEnd;
  40.  
  41.  
  42. //und hier hört es auf
  43. ShowText;
  44.  
  45. SwapBuffers(DC);                 // Hinteren Puffer nach vorne bringen
  46. Done := False;      // Windows denken lassen, das wir noch nicht fertig wären
  47. inc(Frames);        // Nummer des gezeichneten Frames erhöhen
  48.  
  49. if GetTickCount - StartTick >= 500 then      // FPS aktualisieren
  50.  begin
  51.  FPS       := Frames/(GetTickCount-StartTick)*1000;
  52.  Frames    := 0;
  53.  StartTick := GetTickCount
  54.  end;
  55. end;
  56.  


also was um gottes willen hab ich falsch gemacht?

_________________
Wer lesen kann ist klar im Vorteil!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 16, 2004 12:22 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
- Warum lädst du die Textur in jedem Frame neu? Das ist einer der schlimmsten Fehler die man machen kann. Sowas macht man einmal beim Start der Anwendung.
- OpenlGL ist eine Statemachine, und ich sehe nirgendwo dass du den Status zur 2D-Texturierung aktivisert (glEnable mit passendem Token). Da ists dann natürlich nicht verwunderlich wenn nichts angezeigt wird.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 16, 2004 13:18 
Offline
DGL Member

Registriert: Sa Okt 16, 2004 11:41
Beiträge: 8
Wohnort: Panketal
Super, Danke, jetzt gehts.
hab das laden der textur in die oncreate prozedur der Form eingefügt.
was muss ich denn jezt machne wenn ich tga Datein laden will?

_________________
Wer lesen kann ist klar im Vorteil!


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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.020s | 16 Queries | GZIP : On ]