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

Aktuelle Zeit: Fr Jul 18, 2025 14:16

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



Ein neues Thema erstellen Auf das Thema antworten  [ 33 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 08, 2004 22:59 
Offline
DGL Member

Registriert: So Jul 04, 2004 22:29
Beiträge: 14
Hallo,

@ Magellan ich benutze bzw. versuche den loader von Noeska zu nutzen.

@ Son of Satan ich habe den thread mehrmals durchgelesen und bin leider nich so ganz durchgestiegen :( ich hab ja dieses 'logger' nirgens im code von mir verwendet. Der Compiler meldet den 'fehler' ja in der Textures.pas. Ich benutze die Version 2.4a von Noeska.

mfg alanblack


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 08, 2004 23:11 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
Auch von der Textures.pas gibt es unterschiedliche Versionen.

Auf http://www.sulaco.co.za unter OpenGL->OpenGL V gibt es einen "BMP, JPG and TGA texture loader".
Lade dir den herunter und ersetze deine Textures.pas durch die Textures.pas, die im ZIP-Archiv enthalten ist.

Dort musst du evtl. wieder einige Typnamen anpassen und in der Usesklausel "OpenGL" durch den von dir genutzen Header ersetzen. Danach sollte hoffentlich alles laufen.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 08, 2004 23:38 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Wie in dem verlinkten Thread erwähnt nutzt Noeska in gl3DS für seinen eigenen Gebrauch einen logger um Fehler o.ä. zu ermitteln. Du musst halt überall wo diese Unit genutzt wird die einfach aus der Uses-Klausel rauswerfen und die dadurch in den Units entstandenen Fehler (2 oder 3) behben in dem du alle Zeilen löschst die auf diesen Logger verweisen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 09, 2004 00:09 
Offline
DGL Member

Registriert: So Jul 04, 2004 22:29
Beiträge: 14
Ahhh,

Vielen Dank soweit hab ichs. Das Project lässt sich compilern nur beim start tritt eine zugriffsverletzung auf. Ich habe die .3ds datei in dem ordner drin wo das project auch ist. Mein code sieht nun so aus:

Code:
  1. uses
  2.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  3.   Dialogs, gl3ds;
  4. ...
  5.  
  6. procedure TForm1.FormCreate(Sender: TObject);
  7. var
  8. MyScene : TAll3DSMesh;
  9. begin
  10. MyScene := TAll3DSMesh.Create(nil);
  11. MyScene.LoadFromFile('mdl.3ds');
  12. end;


Wisst ihr warum diese Zugriffsverletzung auftritt und wie ich diese vermeiden kann?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 09, 2004 02:21 
Offline
DGL Member

Registriert: Do Nov 20, 2003 19:52
Beiträge: 48
Wohnort: Tillingen bei Chemnitz
Vor dem laden des *.3ds-Files muss OpenGL initialisiert werden. Machst du das überhaupt irgendwann, sehe da nämlich keinen OpenGL-Header in deinen uses?? Zum Thema Initialisieren und sowas solltest du dir hier ma die Tutorials anschauen. Außerdem solltest du darauf achten, daß alle deine verwendeten Units denselben OpenGL-Header (idealerweise natürlich die dglOpenGL.pas von hier (; ) verwenden, sonst bekommst du auch unweigerlich ne Zugriffsverletzung.

mfG

_________________
...die Idee ist gut, doch die Welt noch nicht bereit...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 11, 2004 02:13 
Offline
DGL Member

Registriert: So Jul 04, 2004 22:29
Beiträge: 14
Hi,

vielen Dank, ich hab gedacht dass das auch ohne der OpenGL initalisierung funktionieren würde. Nun habe ich es initalisiert und leider hat es nicht funktioniert! Was mache ich falsch? Hier zeig ich euch mal meinen code.

Code:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, opengl,
  7.   ExtCtrls, gl3ds;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Timer1: TTimer;
  12.     procedure FormCreate(Sender: TObject);
  13.     procedure FormDestroy(Sender: TObject);
  14.     procedure FormResize(Sender: TObject);
  15.     procedure Timer1Timer(Sender: TObject);
  16.   private
  17.     { Private-Deklarationen }
  18.    myDC : HDC;
  19.    myRC : HGLRC;
  20.    myPalette : HPALETTE;
  21.    procedure SetupPixelFormat;
  22.   public
  23.     { Public-Deklarationen }
  24.   end;
  25.  
  26. var
  27.   Form1: TForm1;
  28.  
  29. implementation
  30.  
  31. {$R *.DFM}
  32. procedure TForm1.SetupPixelFormat;
  33. var    hHeap: THandle;
  34.   nColors, i: Integer;
  35.   lpPalette : PLogPalette;
  36.   byRedMask, byGreenMask, byBlueMask: Byte;
  37.   nPixelFormat: Integer;
  38.   pfd: TPixelFormatDescriptor;
  39. begin
  40.   FillChar(pfd, SizeOf(pfd), 0);
  41.   with pfd do begin
  42.     nSize     := sizeof(pfd);               // Länge der pfd-Struktur
  43.     nVersion  := 1;                         // Version
  44.     dwFlags   := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or
  45.                  PFD_DOUBLEBUFFER;          // Flags
  46.     iPixelType:= PFD_TYPE_RGBA;             // RGBA Pixel Type
  47.     cColorBits:= 24;                        // 24-bit color
  48.     cDepthBits:= 32;                        // 32-bit depth buffer
  49.     iLayerType:= PFD_MAIN_PLANE;            // Layer Type
  50.   end;
  51.   nPixelFormat:= ChoosePixelFormat(myDC, @pfd);
  52.   SetPixelFormat(myDC, nPixelFormat, @pfd);
  53.                                             // Farbpalettenoptimierung wenn erforderlich
  54.   DescribePixelFormat(myDC, nPixelFormat,
  55.                       sizeof(TPixelFormatDescriptor),pfd);
  56.   if ((pfd.dwFlags and PFD_NEED_PALETTE) <> 0) then begin
  57.     nColors  := 1 shl pfd.cColorBits;
  58.     hHeap    := GetProcessHeap;
  59.     lpPalette:= HeapAlloc
  60.        (hHeap,0,sizeof(TLogPalette)+(nColors*sizeof(TPaletteEntry)));
  61.     lpPalette^.palVersion := $300;
  62.     lpPalette^.palNumEntries := nColors;
  63.     byRedMask  := (1 shl pfd.cRedBits) - 1;
  64.     byGreenMask:= (1 shl pfd.cGreenBits) - 1;
  65.     byBlueMask := (1 shl pfd.cBlueBits) - 1;
  66.     for i := 0 to nColors - 1 do begin
  67.       lpPalette^.palPalEntry[i].peRed  :=
  68.         (((i shr pfd.cRedShift)  and byRedMask)  *255)DIV byRedMask;
  69.       lpPalette^.palPalEntry[i].peGreen:=
  70.         (((i shr pfd.cGreenShift)and byGreenMask)*255)DIV byGreenMask;
  71.       lpPalette^.palPalEntry[i].peBlue :=
  72.         (((i shr pfd.cBlueShift) and byBlueMask) *255)DIV byBlueMask;
  73.       lpPalette^.palPalEntry[i].peFlags:= 0;
  74.     end;
  75.     myPalette:= CreatePalette(lpPalette^);
  76.     HeapFree(hHeap, 0, lpPalette);
  77.     if (myPalette <> 0) then begin
  78.       SelectPalette(myDC, myPalette, False);
  79.       RealizePalette(myDC);
  80.     end;
  81.   end;
  82. end;
  83.  
  84. procedure render;
  85.  var
  86. MyScene : TAll3DSMesh;
  87. begin
  88. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); //Farb und Tiefenpuffer löschen
  89. glLoadIdentity;                                      // World Matrix zurücksetzen
  90. MyScene := TAll3DSMesh.Create(nil);
  91. MyScene.LoadFromFile('mdl.3ds');                                                     //hier kommen die Objekte hin
  92. SwapBuffers(form1.myDC);                             //scene ausgeben
  93. end;
  94.  
  95. procedure TForm1.FormCreate(Sender: TObject);
  96. begin
  97. form1.myDC:= GetDC(Handle);
  98. SetupPixelFormat;
  99. myRC:= wglCreateContext(myDC);
  100. wglMakeCurrent(myDC, myRC);
  101. glEnable(GL_DEPTH_TEST);
  102. glLoadIdentity;
  103. end;
  104.  
  105. procedure TForm1.FormDestroy(Sender: TObject);
  106. begin
  107. wglmakecurrent(0,0);
  108. wgldeletecontext(mydc);
  109. releasedc(handle,mydc);
  110. end;
  111.  
  112. procedure TForm1.FormResize(Sender: TObject);
  113. begin
  114. glViewport(0, 0, Width, Height);    // Setzt den Viewport für das OpenGL Fenster
  115. glMatrixMode(GL_PROJECTION);        // Matrix Mode auf Projection setzen
  116. glLoadIdentity();                   // Reset View
  117. gluPerspective(45.0, Width/Height, 1, 100.0);  // Perspektive den neuen Maßen anpassen.
  118. glMatrixMode(GL_MODELVIEW);         // Zurück zur Modelview Matrix
  119. glLoadIdentity();
  120. end;
  121.  
  122. procedure TForm1.Timer1Timer(Sender: TObject);
  123. begin
  124. render;
  125. end;
  126.  
  127. end.


Der code lässt sich compilern doch gleich dannach kommt wieder eine Zugriffsverletzung.

Code:
  1. MyScene := TAll3DSMesh.Create(nil);
  2. MyScene.LoadFromFile('mdl.3ds');  


Habe ich auch in der OnCreate Procedure ausprobiert, jedoch ohne erfolg.

Könnt ihr mir da vielleicht helfen was ich tun muss?

Vielen dank schonmal im Vorraus

Mit freundlichen Grüßen

alanblack


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 11, 2004 07:32 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
Langsam fühle ich mich unverstanden :(
Du bist nun der dritte, der innerhalb von 3 Tagen mit dem selben Problem aufkreuzt. Bitte nutzt doch die Suchfunktion des Forums!
Du kannst nicht in der einen Unit einen anderen OpenGL-Header verwenden als in einer anderen. Die gl3DS nutzt den dglOpenGL-Header. Das heißt du solltest diesen ebenfalls verwenden oder die gl3DS.pas entsprechend anpassen (was jedoch ein Schritt zurück wäre).

Bei der Initialisierung lege ich dir die Funktionen CreateRenderingContext, ActivateRenderingContext, DeactivateRenderingContext und DestroyRenderingContext ans Herz.
Schau dir mal die VCL-Templates auf dieser Seite an. Dort wird OpenGL mit dem DGL-Header initialisiert.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 11, 2004 14:38 
Offline
DGL Member

Registriert: So Jul 04, 2004 22:29
Beiträge: 14
Hm,

Sorry aber ich verstehe des nich so ganz :( Vielleicht würde mir ein Sample von euch weiterhelfen und den Code durch Kommentare erklärt.

Weiß auch nich so ganz weiter :?

mfg alanblack


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 11, 2004 14:51 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Magellan hat dich doch auf die VCL-Templates verwiesen, die auch entsprechend kommentiert sind. Ausgehend von einem solchen Template (z.B. GL1.5 VCL) hast du auch ganz schnell ein 3DS-Modell eingebunden.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 11, 2004 14:53 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Schau in die Files, da nimmste einfach das template, dann ins OnIdle dein rendern rein und ins onCreate deine Model sachen, wo TAll3dsMesh.create usw. rein.
Das sollte kein Problem darstellen ;)
EDIT:
Oh, SOS was schneller, aber auch 2Mal sagen schadet nicht :D

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 11, 2004 19:33 
Offline
DGL Member

Registriert: So Jul 04, 2004 22:29
Beiträge: 14
Hmm,

Naja ich hab jetzt das Template (OpgenGL 1.5 (VCL)) direkt übernommen. Dazu den Header (dglOpenGL.pas) <- 1.5

Die gl3ds.pas angepasst. dann habe ich versucht das mit den model in oncreate reinzubringen. Lässt sich compilern dannach Fehlermeldung.

Im Anhand findet ihr die Files.

Schaut es euch doch bitte an, und sagt mir was ich falsch gemacht habe.

mfg alanblack

:?


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 11, 2004 20:17 
Offline
DGL Member

Registriert: Do Nov 20, 2003 19:52
Beiträge: 48
Wohnort: Tillingen bei Chemnitz
Die Stelle an der die Fehlermeldung kommt wurde hier schon 2- oder 3mal im Forum gepostet, jedesmal das selbe Problem: Dem Model muss mindestens ein Material zugewiesen werden...

_________________
...die Idee ist gut, doch die Welt noch nicht bereit...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 11, 2004 20:37 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
@Dopefish: nein. Das ist nicht das Problem.

Zu deinem Code:
Du hast dein Modell korrekt geladen. Nur gibst du es nicht auf dem Bildschirm aus:

Code:
  1. {
  2. glMatrixMode(GL_PROJECTION);
  3. glLoadIdentity;
  4. gluPerspective(60, ClientWidth/ClientHeight, 1, 128);
  5. glMatrixMode(GL_MODELVIEW);
  6. }
  7.  
  8. glTranslatef(0, 0, -10);
  9. MyScene.Render;


Der von mir in geschweiften Klammern eingefügte Code ist nicht notwendig, wenn du das ShowText weglässt (das „ShowText“ stiftet am Anfang IMHO nur Verwirrung).
Ich empfehle dir wirklich zuerst die Einsteigertutorials auf dieser Seite durchzuarbeiten, da dir scheinbar einige Grundlagen fehlen.

Der Grund für die Fehlermeldung liegt allerdings in deinem Modell selbst.
Es scheinen viele Versionen des 3DS-Formats zu existieren. Ich habe versucht dein Modell mit Noeskas, meinem und Mike Lischkes Loader zu importieren und alle drei schienen Probleme beim Laden zu haben.
Womit exportierst du denn deine Modelle?

Ich versuche herauszufinden, wo genau das Problem liegt.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 11, 2004 21:22 
Offline
DGL Member

Registriert: So Jul 04, 2004 22:29
Beiträge: 14
Hi,

Mit Milkshape 3D 1.5.9

mfg alan


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 11, 2004 23:20 
Offline
DGL Member

Registriert: Do Nov 20, 2003 19:52
Beiträge: 48
Wohnort: Tillingen bei Chemnitz
@Magellan: Genau das ist das Problem für die beschriebene Fehlermeldung, die tritt bei mir an folgender Stelle auf:
Code:
  1.  
  2.   //preload textures...
  3.   for m := 0 to FNumMaterials - 1 do
  4.   begin
  5.     FMaterial[m].updatetexture;
  6.   end;
  7.  


FNumMaterials hat den Wert 0.
Ich hab das Model in 3dsMax importiert, ein Material zugewiesen und das Projekt lässt sich ohne Fehlermeldung ausführen. Mit den von dir beschriebenen Änderungen bekommt man das Modell auch zu sehen. Allerdings sollte beachtet werden, daß man erst die Scene und alles zeichnet und ShowText erst direkt vor SwapBuffers aufruft, da ShowText die Projektionsmatrix ändert.

mfG

_________________
...die Idee ist gut, doch die Welt noch nicht bereit...


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


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.022s | 15 Queries | GZIP : On ]