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

Aktuelle Zeit: Mi Jul 16, 2025 19:48

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



Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: 3ds Datei Laden
BeitragVerfasst: Di Jan 25, 2005 19:29 
Offline
DGL Member

Registriert: Mo Jan 24, 2005 15:55
Beiträge: 28
Wohnort: Biberach an der Riß
Hallo! OpenGl ist ein komplett neuer Bereich für mich. Ich versuche eine 3ds-Datei zu laden:

Code:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, dglopenGL, gl3ds;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     procedure FormCreate(Sender: TObject);
  12.   private
  13.     { Private-Deklarationen }
  14.   public
  15.     { Public-Deklarationen }
  16.   end;
  17.  
  18. var
  19.   Form1: TForm1;
  20.   Model: TAll3dsMesh;
  21. implementation
  22.  
  23. {$R *.dfm}
  24.  
  25. procedure TForm1.FormCreate(Sender: TObject);
  26. begin
  27.   Model := TAll3dsMesh.Create(nil);
  28.   Model.TexturePath := '3ds/';
  29.   Model.LoadFromFile('3ds/1.3ds');
  30. end;
  31.  
  32. end.


die 3ds-Datei sowie die benötigten Grafiken sind in dem Unterordner.

Versuche ich jetzt das Programm zu starten bekomme ich diese Meldung:

Code:
  1. Erste Zufalls-Exception bei $7C81EB33. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 00000000. Lesen von Adresse 00000000'. Prozess Project1.exe (2992)


Wie behebe ich diesen Fehler, und wie muss ich weiter machen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 25, 2005 19:37 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 19, 2004 00:27
Beiträge: 454
Wohnort: Nürnberg
Setz in dem Pfad mal \, anstatt von /!
Wird wahrscheinlich net des Problem sein, aber probier's mal!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 25, 2005 19:47 
Offline
DGL Member

Registriert: Mo Jan 24, 2005 15:55
Beiträge: 28
Wohnort: Biberach an der Riß
habs probiert, isses leider nich, "/" wurde bisher immer anstelle von "\" aktzeptiert, das ist dem Delphi anscheinend egal


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 25, 2005 19:50 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 19, 2004 00:27
Beiträge: 454
Wohnort: Nürnberg
hab ja gesagt ist wahrscheinlich was anderes.
Lädst du in deinem Projekt nur ein 3D Modell oder initialisierst du auch OGL?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 25, 2005 19:55 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
EDIT: Huch, ich nehm alles zurück.
Wusste net das der Displaylisten erstellt, aber ist ja logisch :-/

_________________
www.audi32.de


Zuletzt geändert von Adler am Di Jan 25, 2005 20:03, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 25, 2005 19:59 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Da beim Laden des Modelles auch die Displaylisten erstellt werden MUSS OpenGl vorher initialisiert sein. An deiner Stelle würde ich mich also erstmal mit den OpenGL-Grundlagen beschäftigen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 25, 2005 20:02 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 01, 2003 18:59
Beiträge: 887
Wohnort: (The Netherlands)
Programmiersprache: fpc/delphi/java/c#
You also could try another 3ds model to be sure. Also try to determine if the error happens during load or displaying the mesh.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 25, 2005 20:16 
Offline
DGL Member

Registriert: Mo Jan 24, 2005 15:55
Beiträge: 28
Wohnort: Biberach an der Riß
Also, hab jetzt versucht openGl zu initalisieren:

Code:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, dglopenGL, gl3ds, openGL;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     procedure FormDestroy(Sender: TObject);
  12.     procedure FormCreate(Sender: TObject);
  13.   private
  14.     { Private-Deklarationen }
  15.   public
  16.     { Public-Deklarationen }
  17.   end;
  18.  
  19. var
  20.   Form1: TForm1;
  21.   DC:HDC;
  22.   RC:HGLRC;
  23.   Model: TAll3dsMesh;
  24. implementation
  25.  
  26. {$R *.dfm}
  27.  
  28. procedure TForm1.FormCreate(Sender: TObject);
  29. var
  30.   pfd:TPixelFormatDescriptor;
  31.   p:Integer;
  32. begin
  33.   fillchar(pfd,sizeof(pfd),0);
  34.   DC:=getDC(Form1.Handle);
  35.   pfd.cDepthBits:=16;
  36.   pfd.cColorBits:=16;
  37.   pfd.dwFlags:=PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
  38.   p:=choosePixelFormat(DC,@pfd);
  39.   setPixelFormat(DC,p,@pfd);
  40.   RC:=wglCreateContext(DC);
  41.   wglMakeCurrent(DC,RC);
  42.   glClearColor(0,0.5,1,0);
  43.  
  44.   Model := TAll3dsMesh.Create(nil);
  45.   Model.TexturePath := '3ds';
  46.   Model.LoadFromFile('3ds\1.3ds');
  47. end;
  48.  
  49. procedure TForm1.FormDestroy(Sender: TObject);
  50. begin
  51.   wglMakeCurrent(DC,0);
  52.   wglDeleteContext(RC);
  53.   releaseDC(0,DC);
  54. end;
  55.  
  56. end.


Bekomme aber immer noch eine Zugriffsverletzung

PS: ist bisher der gesamte Text!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 25, 2005 20:23 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 19, 2004 00:27
Beiträge: 454
Wohnort: Nürnberg
Ich will ja nichts sagen (bin ja selbst noch ein Anfänger ;)), aber hast du dir mal des Init Tut angeschaut (>> Hier)
Und wenn es nicht funktioniert gibt es hier noch fertige Templates.

Bei dir wird OGL ja einfach nur aufgerufen, und das war's dann. Ne, ne, du.
Da fehlt noch das Rendern. Aber des kriegst du schon hin. (ANFÄNGER an die Macht!!!! :twisted: )


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 25, 2005 20:25 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Wenn du es so schreiben willst, dann anstelle
Code:
  1. uses....dglopengl
solltest du
Code:
  1. uses ....opengl
schreiben.

Die OpenGL-Funktionen aus dglOpenGl werden dynamisch aus opengl32.dll geladen, d.h. mit
Code:
  1. uses ....dglopengl..
ist nur halbe Sache. Wenn du dglOpenGL benutzen willst, dann solltest du es ungefähr so machen :
Code:
  1.  
  2. unit Unit1;
  3.  
  4. interface
  5.  
  6. uses
  7.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  8.   Dialogs, dglopengl;
  9.  
  10. type
  11.   TForm1 = class(TForm)
  12.     procedure FormCreate(Sender: TObject);
  13.     procedure FormDestroy(Sender: TObject);
  14.     procedure FormResize(Sender: TObject);
  15.     procedure FormPaint(Sender: TObject);
  16.   private
  17.     { Private declarations }
  18.   public
  19.     { Public declarations }
  20.     procedure glInit();
  21.   end;
  22.  
  23. var
  24.   Form1: TForm1;
  25.   mydc,myrc:cardinal;
  26.  
  27. implementation
  28.  
  29. {$R *.dfm}
  30.  
  31. procedure Tform1.glInit();
  32. begin
  33.   glClearColor(0.3, 0.3, 0.3, 0.0);        // Black Background
  34.   glShadeModel(GL_SMOOTH);                 // Enables Smooth Color Shading
  35.   glClearDepth(1.5);                       // Depth Buffer Setup
  36.   glEnable(GL_DEPTH_TEST);
  37.   glDepthFunc (GL_LEQUAL);
  38. //  glEnable( GL_CULL_FACE );
  39. //  glCullFace( GL_FRONT );
  40.   glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);   //Realy Nice perspective calculations
  41.   glEnable(GL_TEXTURE_2D);                     // Enable Texture Mapping
  42.   wglSwapIntervalEXT(0);
  43. end;
  44.  
  45. procedure TForm1.FormCreate(Sender: TObject);
  46. begin
  47.  mydc := getdc(handle);
  48.  InitOpenGL();
  49.  myrc := CreateRenderingContext(mydc,[opDoublebuffered],32,24,0,0,0,0);
  50.  ActivateRenderingContext(mydc, myrc);
  51.  glInit();
  52. end;
  53.  
  54. procedure TForm1.FormDestroy(Sender: TObject);
  55. begin
  56.  DeactivateRenderingContext;
  57.  DestroyRenderingContext(myrc);
  58.  releasedc(handle,mydc);
  59. end;
  60.  
  61. procedure TForm1.FormResize(Sender: TObject);
  62. begin
  63.  if Height=0 then Height:=1;
  64.  
  65.   glViewport(0, 0, Width, Height);    // Set the viewport for the OpenGL window
  66.   glMatrixMode(GL_PROJECTION);        // Change Matrix Mode to Projection
  67.    glLoadIdentity();                   // Reset View
  68.     gluPerspective(45.0, Width/Height, 1.0, 1000.0);  // Do the perspective calculations. Last value = max clipping depth
  69.  
  70.   glMatrixMode(GL_MODELVIEW);         // Return to the modelview matrix
  71.    glLoadIdentity();                   // Reset View
  72.  
  73.    //if needed a faster feedback
  74.    OnPaint(self);
  75. end;
  76.  
  77. procedure TForm1.FormPaint(Sender: TObject);
  78. begin // this is only an alternative....OnIdle for intensiv drawing
  79.  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  80.    glLoadIdentity();
  81.    //--draw the scene here
  82.  
  83.    //-- END -draw then scene
  84.  SwapBuffers(mydc);
  85. end;
  86.  
  87. end.
  88.  


Nur jetzt musst du es dem Bedarf anpassen, z.B. du kannst in einem OnIdle-Event anstatt OnPaint zeichnen....

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 25, 2005 20:26 
Offline
DGL Member

Registriert: Mo Jan 24, 2005 15:55
Beiträge: 28
Wohnort: Biberach an der Riß
Thx!
Werd mir das tut so bald wie möglich reinziehen! (sieht besser aus als das, das ich woanders gefunden habe!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 25, 2005 20:27 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 19, 2004 00:27
Beiträge: 454
Wohnort: Nürnberg
Juhu, dann hab ich ja auch mal jemandem (na ja, so gut wie) geholfen!

Ich gib dir noch nen Tipp (falls dir noch niemand das selbe geraten hat):

Lass des mit dem Glaux Tutorial gleich sein.
Nimm für die Texturen die glBMP (ist glaub ich von Lossy eX).
Des ist einfacher!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 25, 2005 21:45 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Von Lossey is die glBitmap.pas

Das Tutorial an sich ist nicht verkehrt. Denn es geht dabei um die OpenGL Befehle. In der Praxis tuts dann auch einer der loader (wie z.B. glBitmap ;) )

Nochwas zum Standard-Delphi-OpenGL-Header:

Benutzt den NICHT!

Nicht nur das der Fehlerhaft ist, nein er ist auch noch hoffnungslos veraltet. Also schön dglOpenGL.pas nutzen. Der Header is aktuell gepflegt und hier aufm Board der Standard (wenn du mal jemanden dein Projekt geben willst is das viel praktischer.).

PS: Hast du das Tutorial 1 gelesen. Auch wenn Phob da Panik macht: Es erklärt dir die Initialisierung. Wenn die dich net interessiert, nutz ein Tamplate.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 26, 2005 15:48 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 19, 2004 00:27
Beiträge: 454
Wohnort: Nürnberg
Flash hat geschrieben:
Von Lossey is die glBitmap.pas

Das Tutorial an sich ist nicht verkehrt. Denn es geht dabei um die OpenGL Befehle. In der Praxis tuts dann auch einer der loader (wie z.B. glBitmap ;) )


Sorry!


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 13 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 ]