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

Aktuelle Zeit: Mi Jul 16, 2025 19:45

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: glBMP
BeitragVerfasst: So Jan 09, 2005 18:33 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Ihr habt schon etwas von glBMP.pas gehört.
Zitat:
//******************************************************************************
//
// Author : Jason Allen
// Email : jra101@home.com
// Website : delphigl.cfxweb.net
// Description : Image loading class. Loads JPG's, PNG's, TGA's and windows
// bitmaps. PNG loading requires the libPNG library and DLL.
//
// Use : image : TGLBMP; // Declaration
// image := TGLBMP.Create(); // Initialization
// image := TGLBMP.Create('a.bmp'); // Initialize and load an image
//
// image.LoadImage('a.bmp'); // Load a BMP (*.BMP) from disk
// image.LoadImage('a.jpg'); // Load a JPG (*.JPG) from disk
// image.LoadImage('b.png'); // Load a PNG (*.PNG) from disk
// image.LoadImage('b.tga'); // Load a TGA (*.TGA) from disk
//
// image.GenTexture(); // Generate an OpenGL texture
// // using loaded image data
// image.Invert(); // Invert image color data
// image.FlipHorz(); // Flips image horizontally
// image.FlipVert(); // Flips image vertically
// image.Rotate90(); // Rotate image 90 degrees
//
// image.SaveScreen('screen.bmp'); // Save bmp screenshot
// image.SaveScreen('screen.jpg'); // Save jpg screenshot
// image.SaveScreen('screen.png'); // Save png screenshot
// image.SaveScreen('screen.tga'); // Save tga screenshot
// image.SaveScreen(); // Save screenshot to memory
//
// Properties : Bits // Pointer to loaded image data
// Width // Loaded image width
// Height // Loaded image height
// ColorDepth // Loaded image color depth
// TextureID // Texture ID for OpenGL texture generated by
// // calling GenTexture after loading an image
//
//******************************************************************************

Ich wollte nur fragen nutzt das jemand, und wenn ja wie bringt man es zum funktionieren, denn es geht einfach nicht bei mir. Es gibt zwar keine Fehlermeldung aber auch keine Textur :roll:
Es liegt einfach an dieser Unit, wenn ich andere Laderutinen benutze dann klapt es (das ist die einziege Änderung die ich vornehme).


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 09, 2005 18:35 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Also du brauchst uns nicht den ganzen Header posten, den glBMP kennen wir schon :wink:
Aber gib uns mal bitte ein paar mehr Anhaltspunkte, zB wie du die Textur lädtst und dann an die Polygone bindest.

_________________
"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: So Jan 09, 2005 19:23 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Also, so sieht das Ganze aus :
Code:
  1.  
  2. unit Unit1;
  3.  
  4. interface
  5.  
  6. uses
  7.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  8.   Dialogs, ExtCtrls,
  9.  
  10.   dglOpenGL, Textures, glBMP;
  11.  
  12. type
  13.   TForm1 = class(TForm)
  14.     Timer1: TTimer;
  15.     procedure FormCreate(Sender: TObject);
  16.     procedure FormDestroy(Sender: TObject);
  17.     procedure FormResize(Sender: TObject);
  18.     procedure FormPaint(Sender: TObject);
  19.     procedure FormKeyDown(Sender: TObject; var Key: Word;
  20.       Shift: TShiftState);
  21.     procedure Timer1Timer(Sender: TObject);
  22.   private
  23.     { Private declarations }
  24.     myDc, myRC, Box, Text : Cardinal ;
  25.     Rot : single;
  26.     procedure InitGL();
  27.     procedure CloseGL();
  28.     procedure IdleProc(Sender: TObject;var Done: Boolean);
  29.     procedure InitDisplayLists();
  30.   public
  31.     { Public declarations }
  32.     image : TGLBMP;
  33.   end;
  34.  
  35. var
  36.   Form1: TForm1;
  37.   gl_present : Boolean = False;
  38.   FPS : integer = 0;
  39.  
  40. implementation
  41.  
  42. {$R *.dfm}
  43.  
  44. procedure TForm1.InitGL();
  45. begin
  46.  myDC := GetDC( Handle );
  47.  InitOpenGL();
  48.  
  49.  MyRC := CreateRenderingContext(myDC,  [opDoubleBuffered], 32,32,0,0,0,0);
  50.  ActivateRenderingContext(MyDC, MyRC);
  51.  
  52.  wglSwapIntervalEXT:=wglGetProcAddress('wglSwapIntervalEXT');//Switch off vsync
  53.  wglSwapIntervalEXT(0);
  54.  
  55.  glShadeModel(GL_SMOOTH);            
  56.  glClearColor(0.3, 0.3, 0.3, 0.0);      
  57.  glClearDepth(1.5);          
  58.  
  59.  glEnable(GL_DEPTH_TEST);
  60.  
  61.  glEnable(GL_TEXTURE_2D);
  62.  
  63.  glDepthFunc(GL_LEQUAL);             
  64.  
  65.  glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
  66. {
  67.  glEnable(GL_LIGHT1);                              
  68.  glEnable(GL_NORMALIZE);
  69. }
  70.  glEnable( GL_CULL_FACE );
  71.  glCullFace( GL_FRONT );
  72.  
  73.  InitDisplayLists();
  74.  
  75.  image :=  TGLBMP.Create;//('wood2.bmp');
  76.  image.LoadImage('wood2.bmp');
  77.  image.GenTexture(false, false);
  78.  image.Bind();
  79.  
  80.  gl_present := True;
  81. end;
  82.  
  83. procedure TForm1.FormCreate(Sender: TObject);
  84. begin
  85.  
  86. // ChDir();
  87.  
  88.  InitGL();
  89.  Rot := 0.0;
  90.  
  91.  if gl_present then
  92.  begin
  93.   Application.OnIdle := IdleProc;
  94.  end else
  95.  begin
  96.   CloseGL();
  97.   Close();
  98.  end;
  99. end;
  100.  
  101. procedure TForm1.CloseGL();
  102. begin
  103.  glDeleteLists(Box, 1);
  104.  glDeleteTextures(1, @Text);
  105.  DeactivateRenderingContext();
  106.  DestroyRenderingContext(MyRC);
  107.  gl_present := False;
  108. end;
  109.  
  110. procedure TForm1.FormDestroy(Sender: TObject);
  111. begin
  112.  image.Free();
  113.  
  114.  if (ChangeDisplaySettings(TDevMode(nil^),CDS_SET_PRIMARY)<>DISP_CHANGE_SUCCESSFUL) then
  115.     Application.MessageBox('ChangeDisplay Failed','FEHLER');
  116.  
  117.  CloseGL();
  118.  ReleaseDC( Handle, myDC );
  119. end;
  120.  
  121. procedure TForm1.FormResize(Sender: TObject);
  122. begin
  123.  if Height=0 then Height := 1;
  124.  
  125.   glViewport(0,0,Width,Height);
  126.   glMatrixMode(GL_PROJECTION);
  127.    glLoadIdentity;
  128.    gluPerspective(45.0,Width/Height,0.1,1000.0); // 3d
  129.  
  130.    gluLookAt( 0, 0, 5, // eye
  131.                    0, 0,  0,  // center
  132.                    0, 1,  0    // up vector
  133.                   );
  134.  
  135.   glMatrixMode(GL_MODELVIEW);
  136.    glLoadIdentity;
  137.   OnPaint(Self);
  138. end;
  139.  
  140. procedure TForm1.FormPaint(Sender: TObject);       // DRAWING
  141. begin
  142.  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  143.  
  144.  glLoadIdentity();
  145.   glRotatef( rot, 1,0,1);
  146.  
  147.   glCallList(Box);
  148.  
  149.  SwapBuffers( myDC );
  150. end;
  151.  
  152. procedure TForm1.IdleProc(Sender: TObject;  // DER PROCEDURE
  153.   var Done: Boolean);
  154. begin
  155.  Done := False;
  156.  
  157.  rot := rot + 0.1;
  158.  if rot>359 then rot := 0;
  159.  
  160. // Caption := FloatToStr(rot);
  161.  
  162.  OnPaint(self);// FormPaint(self);
  163.  Inc (FPS);
  164. end;
  165.  
  166. procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  167.   Shift: TShiftState);
  168. begin
  169.  if key=27 then Close();
  170. end;
  171.  
  172. procedure TForm1.InitDisplayLists();
  173. begin
  174.  Box := glGenLists(1);
  175.  glNewList( Box, GL_COMPILE);
  176.         glBegin(GL_QUADS);
  177.             // Bottom Face
  178. //          glNormal3f( 0.0,-1.0, 0.0);
  179.                         glNormal3f( -1.0,-1.0, -1.0);
  180.             glTexCoord2f(1.0, 1.0); glVertex3f(-1.0, -1.0, -1.0);
  181.                         glNormal3f( -1.0,-1.0, 1.0);
  182.             glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, -1.0,  1.0);
  183.                         glNormal3f( 1.0,-1.0, 1.0);
  184.             glTexCoord2f(0.0, 0.0); glVertex3f( 1.0, -1.0,  1.0);
  185.                         glNormal3f( 1.0,-1.0,  -1.0);
  186.             glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, -1.0, -1.0);
  187.             // Front Face - ok
  188.             glNormal3f( -1.0, -1.0, 1.0);
  189.             glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0,  1.0);
  190.                         glNormal3f( -1.0, 1.0, 1.0);
  191.             glTexCoord2f(1.0, 0.0); glVertex3f(-1.0,  1.0,  1.0);
  192.                         glNormal3f( 1.0, 1.0, 1.0);
  193.             glTexCoord2f(1.0, 1.0); glVertex3f( 1.0,  1.0,  1.0);
  194.                         glNormal3f( 1.0, -1.0, 1.0);
  195.             glTexCoord2f(0.0, 1.0); glVertex3f( 1.0, -1.0,  1.0);
  196.             // Back Face
  197.             glNormal3f( -1.0, -1.0,-1.0);
  198.             glTexCoord2f(1.0, 0.0); glVertex3f(-1.0, -1.0, -1.0);
  199.                         glNormal3f( 1.0, -1.0, -1.0);
  200.             glTexCoord2f(1.0, 1.0); glVertex3f( 1.0, -1.0, -1.0);
  201.                         glNormal3f( 1.0, 1.0, -1.0);
  202.             glTexCoord2f(0.0, 1.0); glVertex3f( 1.0,  1.0, -1.0);
  203.                         glNormal3f( -1.0, 1.0, -1.0);
  204.             glTexCoord2f(0.0, 0.0); glVertex3f(-1.0,  1.0, -1.0);
  205.             // Right face
  206.             glNormal3f( 1.0, -1.0, -1.0);
  207.             glTexCoord2f(1.0, 0.0); glVertex3f( 1.0, -1.0, -1.0);
  208.             glNormal3f( 1.0, -1.0, 1.0);
  209.                         glTexCoord2f(1.0, 1.0); glVertex3f( 1.0, -1.0,  1.0);
  210.             glNormal3f( 1.0, 1.0, 1.0);
  211.                         glTexCoord2f(0.0, 1.0); glVertex3f( 1.0,  1.0,  1.0);
  212.             glNormal3f( 1.0, 1.0, -1.0);
  213.                         glTexCoord2f(0.0, 0.0); glVertex3f( 1.0,  1.0, -1.0);
  214.             // Left Face
  215.             glNormal3f(-1.0, -1.0, -1.0);
  216.             glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0, -1.0);
  217.             glNormal3f(-1.0, 1.0, -1.0);
  218.                         glTexCoord2f(1.0, 0.0); glVertex3f(-1.0,  1.0, -1.0);
  219.             glNormal3f(-1.0, 1.0, 1.0);
  220.                         glTexCoord2f(1.0, 1.0); glVertex3f(-1.0,  1.0,  1.0);
  221.             glNormal3f(-1.0, -1.0, 1.0);
  222.                         glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, -1.0,  1.0);
  223.                         // Top Face
  224.                         glNormal3f( -1.0,1.0, -1.0);
  225.             glTexCoord2f(1.0, 1.0); glVertex3f(-1.0, 1.0, -1.0);
  226.             glNormal3f( 1.0,1.0, -1.0);
  227.                         glTexCoord2f(0.0, 1.0); glVertex3f( 1.0, 1.0, -1.0);
  228.             glNormal3f( 1.0,1.0, 1.0);
  229.                         glTexCoord2f(0.0, 0.0); glVertex3f( 1.0, 1.0,  1.0);
  230.             glNormal3f( -1.0,1.0, 1.0);
  231.                         glTexCoord2f(1.0, 0.0); glVertex3f(-1.0, 1.0,  1.0);
  232.         glEnd();
  233.  glEndList();
  234. end;
  235.  
  236. procedure TForm1.Timer1Timer(Sender: TObject);
  237. begin
  238. Caption := 'OpenGL - Haris  FPS: [ '+IntToStr(FPS)+' ]';
  239. FPS := 0;
  240. end;
  241.  
  242. end.
  243.  


Lossy eX: Code durch Pascaltag ersetzt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 09, 2005 19:54 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
So direkt kann ich da nichts falsches entdecken. Kanns jetzt aber auch nicht ausprobieren. Allerdings solltest du am Anfang deiner Displaylist noch einmal Image.Bind aufrufen. Oder halt vor dem Aufruf der DL.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 10, 2005 19:30 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 01, 2003 18:59
Beiträge: 887
Wohnort: (The Netherlands)
Programmiersprache: fpc/delphi/java/c#
you need to bind the texture directly before rendering the mesh, not after loading.

_________________
http://3das.noeska.com - create adventure games without programming


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 10, 2005 20:08 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Zitat:
Allerdings solltest du am Anfang deiner Displaylist noch einmal Image.Bind aufrufen. Oder halt vor dem Aufruf der DL.


Nein, das funktioniert nicht. Ich habe das in meiner verzweiflung schon gemacht. Auserdem, wenn ich eine andere Laderrutiene benutze, dann geht alles genauso wie ich es schon gepostet habe, also ich binde die Textur nicht jedesmal, sondern nur einmal , nachdem ich es geladen habe. Es geht immerhin um eine einzige Textur.

ENGLISH :
I have already tried and it does not work. Something with the unit is wrong. Everything works just fine if i use some other loading procedure.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 10, 2005 20:35 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Es funktionier wenn ich es so mache :

Code:
  1.  
  2. procedure TForm1.InitGL();
  3. begin
  4.  myDC := GetDC( Handle );
  5.  InitOpenGL();
  6.  
  7.  MyRC := CreateRenderingContext(myDC,  [opDoubleBuffered], 32,32,0,0,0,0);
  8.  ActivateRenderingContext(MyDC, MyRC);
  9.  
  10.  wglSwapIntervalEXT:=wglGetProcAddress('wglSwapIntervalEXT');
  11.  wglSwapIntervalEXT(0);
  12.  
  13.  glShadeModel(GL_SMOOTH);            
  14.  glClearColor(0.3, 0.3, 0.3, 0.0);      
  15.  glClearDepth(1.5);          
  16.  glEnable(GL_DEPTH_TEST);
  17.  
  18.  glEnable(GL_TEXTURE_2D);
  19.  
  20.  glDepthFunc(GL_LEQUAL);             
  21.  
  22.  glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
  23. {
  24.  glEnable(GL_LIGHT1);
  25.  glEnable(GL_NORMALIZE);
  26. }
  27.  glEnable( GL_CULL_FACE );
  28.  glCullFace( GL_FRONT );
  29.  
  30.  InitDisplayLists();
  31. // glLoadTexture('close.bmp',Text);
  32. // LoadTexture( 'wood2.bmp', text , false);
  33.  
  34.  image :=  TGLBMP.Create;//('wood2.bmp');
  35.  
  36.  image.LoadImage('Seifenblase.bmp');
  37.  
  38. // image.SaveImage('lala.bmp');
  39.  
  40.  
  41.  
  42.   glGenTextures(1, @Text);
  43.   glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
  44.   glBindTexture(GL_TEXTURE_2D, Text);
  45.  
  46.   gltexparameteri(GL_TEXTURE_2D,GL_Texture_min_filter,GL_LINEAR);
  47.   gltexparameteri(GL_TEXTURE_2D,GL_Texture_mag_filter,GL_LINEAR);
  48.  
  49.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  50.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  51.  
  52. //  if Format = GL_RGBA then
  53.   gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, image.GetWidth,image.GetHeight, GL_RGBA, GL_UNSIGNED_BYTE, image.GetData);
  54.  
  55.  
  56. // image.GenTexture(false, false);
  57. // image.Bind();
  58.  
  59.  image.Free();
  60.  
  61.  gl_present := True;
  62. end;
  63.  


Man muss es also "per Hand" binden :shock: :? 8) :lol:

Lossy eX: Zitat durch Pascaltag ersetzt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 11, 2005 08:58 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Benutz mal bitte das Pascaltag (in der Liste ganz Rechts) um Quellcode darzustellen. Das macht das alles wesentlich lesbarer. Danke.

Also das finde ich äußerst merkwürdig, dass bei dir solche komischen Sachen passieren. Es ist ja nicht Sinn und Zweck eines Loaders, dass du die Textur von Hand erstellen musst. Ich persönlich habe auch schon mit der glBMP gearbeitet und da hatte es immer funktioniert. Ich kann das Problem also nicht ganz nachvollziehen.
Aber versuche mal bitte folgendes. Downloade mal meinen Loader und binde diesen in dein Projekt ein. Zusätzlich kommentierst du alles aus was momentan zu einem anderen Loader gehört. Also auch die Units die du oben eingebunden hast.

Laden geht wie folgt.
Code:
  1. var
  2.   tex: TglBitmap2D;
  3. begin
  4.   tex := TglBitmap2D.Create;
  5.   tex.LoadFromFile('blub.bmp');
  6.   tex.GenTexture;
  7. end;


Auch wenn du nur eine Textur benutzt solltest du sie bei jedem Bild rendern. Wer weiß schon genau wann, wie und warum die gebundene Textur entbunden wird. Sollte normal nicht der Fall sein aber wetten würde ich darauf aber auch nicht. Und bei diversen komischen OpenGL implementationen würde ich lieber auf Nummer sicher gehen. Von der Geschwindigkeit brauchst du dir da auch gar keinen Kopf zu machen. Gebunden wird natürlich mit tex.Bind;

Also so drüber nachgedacht habe ich wage Vermutung warum die glBMP nicht geht. Du meintest ja, dass die Textures ging, oder? Ich meine die glBMP benutzt standardmäßig die OpenGL12.pas von Mike Lischke. Solltest du die irgendwo mit hinkopiert haben kann es sein, dass die glBMP auf nicht initialisierte Pointer zugreift. Was eigentlich in eine Access Violation enden sollte. Aber egal. versuch einfach mal meinen Loader und entferne (auskommentieren) mal alles was mit OpenGL zu tun hat aber nicht dglOpenGL oder glBitmap heißt.

PS: Normal sollte es nicht nötig sein sein den Adresspointer der Methode wglSwapIntervalEXT von Hand ladeb zu müssen. (wglGetProcAddress('wglSwapIntervalEXT');)


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 » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 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 | 14 Queries | GZIP : On ]