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

Aktuelle Zeit: Fr Jul 18, 2025 20:06

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 24 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Hilfe bei Texturen
BeitragVerfasst: Di Apr 24, 2007 20:32 
Offline
DGL Member

Registriert: Di Apr 24, 2007 17:03
Beiträge: 15
also erstmal: Eure Tutorials sind einwandfrei für Einsteiger (wieso gibt es hier kein Daumen Hoch smilie o.O)?
nur hänge ich momentan im Bereich Texturen.
Ich wollte es mal ohne SDL versuchen, auf was das Tutorial ja aufbaut.
Nun habe ich ein bissl rumgetestet und das kam dabei raus:

Code:
  1.  
  2. implementation
  3.  
  4. var
  5.   DC, RC:HDC;
  6.   w:real;
  7.   bmp:Tbitmap; //Dieses Nette Bildchen würde ich gerne als Textur nutzen
  8.  
  9. const
  10.      NearClipping = 1;
  11.      FarClipping  = 1000;
  12.  
  13. procedure TForm1.FormResize(Sender: TObject);
  14. var tmpBool : Boolean;
  15. begin
  16.   glViewport(0, 0, ClientWidth, ClientHeight);
  17.   glMatrixMode(GL_PROJECTION);
  18.   glLoadIdentity;
  19.   gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping , FarClipping);
  20.  
  21.   glMatrixMode(GL_MODELVIEW);
  22.   glLoadIdentity;
  23.   IdleHandler(Sender, tmpBool);
  24. end;
  25.  
  26. procedure TForm1.FormCreate(Sender: TObject);
  27. begin
  28. Application.OnIdle := IdleHandler;
  29.   DC:=GetDC(Handle);  
  30.   initopengl;  //OPEN GL initialisieren
  31.   RC:=CreateRenderingContext(DC,          //Device Contest
  32.                              [opDoubleBuffered], //Optionen
  33.                              32,          //ColorBits
  34.                              24,          //ZBits
  35.                              0,           //StencilBits
  36.                              0,           //AccumBits
  37.                              0,           //AuxBuffers
  38.                              0);          //Layer
  39.   ActivateRenderingContext(DC, RC);
  40.   SetupGL;
  41.   glEnable(GL_TEXTURE_2D);
  42.   bmp:=Tbitmap.Create;
  43.   bmp.LoadFromFile('Figur1.bmp');
  44. end;
  45.  
  46. procedure TForm1.FormDestroy(Sender: TObject);
  47. begin
  48.   DeactivateRenderingContext; //alles aus dem SPeicher hauen
  49.   DestroyRenderingContext(RC);
  50.   ReleaseDC(Handle, DC);
  51.   freeAndNil(bmp);
  52. end;
  53.  
  54. procedure TForm1.SetupGL;
  55. begin
  56.   glClearColor(0{rot}, 0{Gelb}, 0{Grün}, 1.0{alpha}); //Hintergrundfarbe
  57.   glEnable(GL_DEPTH_TEST);          //Tiefentest aktivieren
  58. end;
  59.  
  60. procedure TForm1.Render;
  61. begin
  62.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); //Bild leeren
  63.  
  64.   glMatrixMode(GL_PROJECTION);
  65.   glLoadIdentity;
  66.   gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  67.  
  68.   glMatrixMode(GL_MODELVIEW);
  69.   glLoadIdentity;
  70.   //glmatrixmode(GL_Texture);
  71.   //glLoadIdentity;
  72.   glrotatef(w,0,0,-5);
  73.   glTranslatef(0, 0, -5);
  74.   //glScalef(1,1,1);  
  75.  
  76.   glTexImage2D(GL_TEXTURE_2D,0,3,
  77.                32, 60,
  78.                0,GL_RGB,GL_UNSIGNED_BYTE,  bmp); // ????
  79.  
  80.   glEnable(GL_TEXTURE_2D); // ????
  81.  
  82.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //???
  83.  
  84.   glPushMatrix();
  85.   gltranslatef(-2,0,0);
  86.   glBegin(GL_QUADS);
  87.      glTexCoord2f(0,0);glVertex2d(0, 0);
  88.      glTexCoord2f(1,0);glVertex2d(1, 0);
  89.      glTexCoord2f(1,1);glVertex2d(1, 1);
  90.      glTexCoord2f(0,1);glVertex2d(0, 1);
  91.   glEnd;
  92.   glpopmatrix();
  93.  
  94.   SwapBuffers(DC);
  95. end;
  96.  
  97. procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean);
  98. begin
  99.   StartTime:= GetTickCount; //Zeitmessung starten
  100.   Render; //Bild malen
  101.   DrawTime:= GetTickCount - StartTime; //Zeit berechnen
  102.   Inc(TimeCount, DrawTime);
  103.   Inc(FrameCount);
  104.  
  105.   if TimeCount >= 1000 then begin
  106.     Frames:= FrameCount;
  107.     TimeCount:= TimeCount - 1000;
  108.     FrameCount:= 0;
  109.     form1.Caption:= InttoStr(Frames);
  110.   end;
  111.  
  112.   Done:= false;
  113. end;
  114.  
  115. end.


nun sehe ich aber leider garnichts von einer Textur.
Kann mir da vllt mal einer von euch unter die Arme greifen?
Wäre echt nett :)
würde es auch gerne ohne SDL machen.
Immerhin müsste das ganze ja auch ohne gehen wenn es die entsprechenden Proceduren gibt.

Danke schonmal für die HIlfe :D

Mfg
Delpher


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 24, 2007 21:25 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Zitat:
Eure Tutorials sind einwandfrei für Einsteiger (wieso gibt es hier kein Daumen Hoch smilie o.O)?

Zwang zur verbalen Artikulation ;)

Zitat:
Kann mir da vllt mal einer von euch unter die Arme greifen?
Wäre echt nett Smile
würde es auch gerne ohne SDL machen.

Eigentlich Schade, da SDL an für sich eine wirklich nette Lösung ist. Generell sollten Texturen immer in einem seperaten Teil geladen werden und in den Speicher befördert werden. Dies sollte auf gar keinen Fall innerhalb der Render-Loop gehören - ein Initalisierungsteil bietet sich dabei stets an. Dabei ist eigentlich nur wichtig, dass die Informationen im Speicher landen! Um das dorthin befördern mußt Du Dich selbst kümmern, also ggf. die Datei manuell via Stream auszulesen. Sich so etwas selbst zu schreiben macht normalerweise allerdings keinerlei Sinn, da man das Rad ansonsten neu erfindet und das Auslesen unterschiedlicher Bildformate auch nicht wesentlich begeisterndes enthält.

Daher verwenden man in der Regel Bibliotheken, die wir hier oft nur "Loader" nennen. SDL_Image ist ein typisches Beispiel für einen. Solltest Du Dich nur auf Windows beschränken solltest Du einen Blick auf den GlBitmap-Loader werfen (http://wiki.delphigl.com/index.php/Glbitmap_loader), der bei uns im Wiki erklärt wird und von einem Team-Mitglied stammt. Der Loader ist relativ simple zu bedienen. Weiter Loader, die ich teilweise auf Grund Ihrer Inaktualität nicht empfehlen würde, LoadTextures (Jan Horn), glaux, glbmp.

_________________
"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: Di Apr 24, 2007 21:41 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Willkommen hier im Forum,
Allerdings: Ich muss Dich enttäuschen, mit TBitmap gehts nicht.
Hier http://wiki.delphigl.com/index.php/Glbitmap_loader findest Du, was Du suchst.
Traude

EDIT: Verflixt! zu langsam gewesen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 24, 2007 21:47 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Desweiteren fehlt der Hinweis, dass das Texturen laden beim Create hingehört und auf keinen Fall zum Rendern ;)

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 24, 2007 21:54 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Und bei Dir fehlt:
<* MeckerModus aus *>


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 25, 2007 15:44 
Offline
DGL Member

Registriert: Di Apr 24, 2007 17:03
Beiträge: 15
Danke erstmal für die Antworten.
Aber woher bekomme ich diese SDL.dcu und die SDL_IMAGE.dcu?

irgendwie bin ich zu d*** diese zu finden ??

Denke werde es mal mit SDL versuchen, da ich dann auch euer Tutorial weiter nutzen kann :)

Edit: WIN XP und D5 falls das wichtig ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 25, 2007 15:58 
Offline
DGL Member

Registriert: Sa Okt 22, 2005 20:24
Beiträge: 291
Wohnort: Frauenfeld/CH
hast du die dglsdk? da ist nämlich alles drin, was sdl und viele andere wichtige libraries betrifft, die man für Opengl braucht.

_________________
bester uo-shard: www.uosigena.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 25, 2007 16:11 
Offline
DGL Member

Registriert: Di Apr 24, 2007 17:03
Beiträge: 15
ja jetzt schon.
aber:

Code:
  1. unit SDL;


[Fataler Fehler] sdl.pas(1): Zeile zu lang (mehr als 1023 Zeichen)

Woran kann das liegen?
Ich habe nichts an der Unit geändert.
und in der Zeile steht auch nur das
Code:
  1. unit SDL;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 25, 2007 16:50 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Du hast Delphi 5?
Das kommt noch nicht mit Unix-Dateien zurecht und kann daher die Zeilenumbrüche nicht richtig verstehen.
Es sollte ausreichen die Datei in einem fortgeschrittenen Texteditor zu öffnen und dort im Windowsformat zu speichern.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 25, 2007 16:59 
Offline
DGL Member

Registriert: Di Apr 24, 2007 17:03
Beiträge: 15
i0n0s hat geschrieben:
Du hast Delphi 5?
Das kommt noch nicht mit Unix-Dateien zurecht und kann daher die Zeilenumbrüche nicht richtig verstehen.
Es sollte ausreichen die Datei in einem fortgeschrittenen Texteditor zu öffnen und dort im Windowsformat zu speichern.


Danke dir hat geklappt :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 25, 2007 17:10 
Offline
DGL Member

Registriert: Di Apr 24, 2007 17:03
Beiträge: 15
Code:
  1. var
  2.   tex : PSDL_Surface;
  3. begin
  4.   tex := IMG_Load('./wiki.jpg');
  5.   if assigned(tex) then
  6.   begin    
  7.     glGenTextures(1, @TexID); //<--- HIER
  8.     glBindTexture(GL_TEXTURE_2D, TexID);
  9.        
  10.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  11.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  12.        
  13.     // Achtung! Einige Bildformate erwarten statt GL_RGB, GL_BGR. Diese Konstante fehlt in den Standard-Headern
  14.     glTexImage2D(GL_TEXTURE_2D, 0, 3, tex^.w, tex^.h,0, GL_RGB, GL_UNSIGNED_BYTE, tex^.pixels);
  15.  
  16.     SDL_FreeSurface(tex);
  17.   end;


von Welchem Typ issn die Variable TexID??
Die mag mein Compiler nämlich nicht o.O?
(undefinierter Bezeichner)

Edit: die TEXID habe ich jetzt einfach mal integer gesetzt und es geht, aber eine andere Frage:
jetzt brauche ich noch eine SDL.DLL.
woher bekomme ich die denn schon wieder und was benötigt man denn noch alles nur um eine Simple Textur zu laden o.O?
Gibt es da keine simplere Variante?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 25, 2007 17:27 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
TexID ist Cardinal bzw. GLuint.
SDL.dll findest du unter http://www.libsdl.org.
Eine leichtere und bessere Variante wurde oben von 2 Leuten verlinkt, ich denke ich brauche den Link nicht nochmal zu wiederholen.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 25, 2007 17:33 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Die DLLs befinden sich im übrigen alle im Bin-verzeichnis des SDKs. Du benötigt außerdem auch noch die SDL_image.dll.

Und wenn du erst einmal nur für Windows arbeiten möchtest dann wie i0n0s schon sagte. Oben wurde 2 mal ein Link gepostet. Dort ist auch alles so halbwegs erklärt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 25, 2007 17:34 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich würde dennoch empfehlen direkt mit SDL anzufangen, vorrausgesetzt man braucht nicht mehr als ein fenster. Es ist einfacher mit dem erstellen von Renderkontext usw. und später dazu auch noch portabel (Plattformmäßig)

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 25, 2007 18:42 
Offline
DGL Member

Registriert: Sa Okt 22, 2005 20:24
Beiträge: 291
Wohnort: Frauenfeld/CH
Lord Horazont hat geschrieben:
Ich würde dennoch empfehlen direkt mit SDL anzufangen, vorrausgesetzt man braucht nicht mehr als ein fenster. Es ist einfacher mit dem erstellen von Renderkontext usw. und später dazu auch noch portabel (Plattformmäßig)

Gruß Lord Horazont


Naja da muss man schon aufpassen, dass man dann auch nicht die Windows Units benützt.

mfg

_________________
bester uo-shard: www.uosigena.de


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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.009s | 15 Queries | GZIP : On ]