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

Aktuelle Zeit: Fr Jul 18, 2025 21:12

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: So Jun 15, 2003 14:24 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Hallo,

ich stehe irgendwie auf dem Schlauch. In dem Editor, den ich fuer ein Dungeon-Spiel schreibe, sollen 3DS oder Milkshape - Modelle geladen werden. Den 3DS - Loader habe ich mir aus NapalmBomber geholt, den MilkShape - Importer aus GLScene. Beide erstellen DisplayListen, die ich spaeter nur noch aufrufen muss.

Schön und gut. Das Modell, ohne Texturen, wird geladen und es werden die Displaylisten erstellt. Dies scheint fehlerfrei zu laufen, zumindestens liefert glGetError keine Fehler zurück, wenn ich den Aufruf an den unterschiedlichen Stellen plaziert habe. Aber bei Aufruf von glCallList passiert nichts. Das Drahtmodell des Dungeons wird korrekt dargestellt, nur das 3D Modell halt nicht. Zur Sicherheit stelle ich noch einen Würfel an der Position des Modelles dar, um zu sehen ob der Aufruf zum Zeichen überhaupt erfolgt. Der Würfel jedoch wird gezeichnet. Wenn ich das Modell in MilkShape lade, wird es ohne Probleme dargestellt.

Ich weis, das dies sehr wage ist, aber wo kann ich den Fehler suchen? Ich verwende kein Licht, kein Blending, kein Alphamasking.

Gruß
KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 15, 2003 14:37 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 02, 2002 18:06
Beiträge: 299
Wohnort: Dresden
Versuche mal den 3ds Loader von Lischke. Der erstellt keine DL. Zumindest für Testzwecke.

_________________
"Ich würde ja gern die Welt verändern, aber Gott gibt mir den Quelltext nicht"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 15, 2003 16:43 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
HomerS hat geschrieben:
Versuche mal den 3ds Loader von Lischke. Der erstellt keine DL. Zumindest für Testzwecke.

@HomerS :
Dreimal darfst du raten worauf der 3DS-Loader von NapalmBomber3D basiert :D .Der 3DS-Loader von Mike Lischke erstellt nämlich sehr wohl DisplayListen.Er erstellt zuerst VertexArrays für die einzelnen Meshes und legt diese dann in einer Displayliste ab.

@KidPaddle :
Deine Problemstellung ist wirklich sehr sehr wage...allerdings ist es dir wahrscheinlich entgangen, das der 3DS-Loader aus dem zweiten NB3D-Tut zwar die Texturen des Modelles lädt, diese allerdings nicht an die Meshes bindet.
Deshalb musst du da noch eine Kleinigkeit im Loadercode ändern :
<!--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'>for</span> J := <span class='integer'>0</span> <span class='reserved'>to</span> FaceGroups.Count - <span class='integer'>1</span> <span class='reserved'>do</span>
<span class='reserved'>with</span> PFaceGroup(FaceGroups[J])^ <span class='reserved'>do</span>
<span class='reserved'>begin</span>
// Diese Zeile fehlt im Originalcode, und wird benötigt damit die geladenen Texturen auch gebunden werden !
TextureManager.BindTexture(Texture)
<span class='reserved'>with</span> PMaterial(MatList.Objects[TextureIndex])^ <span class='reserved'>do</span>
<span class='reserved'>begin</span>
glEnable(GL_CULL_FACE);
glDisable(GL_TEXTURE_2D);
glColor3f(Diffuse[<span class='integer'>0</span>],Diffuse[<span class='integer'>1</span>],Diffuse[<span class='integer'>2</span>]);
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, @Diffuse);
TextureManager.
<span class='reserved'>end</span>;
</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->
Sry, aber da ich im zweiten Bombermantut nur 3DS-Modelle ohne Texturen genutzt hab, ist mir das nicht aufgefallen!

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 15, 2003 17:33 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Hallo SoS,

ja, diese Zeile fehlte, aber da ich keine Texturen verwende, macht es auch nichts aus. Denn TextureManager verwende ich nicht.

Beim debuggen viel mir auf, das beim erstellen der DisplayLists wahrscheinlich Memory Leaks entstehen. Du fügst Pointer in Listen mit MatList.AddObject(Name, Ptr) oder MeshList.Add(Ptr) ein, die aber nicht automatisch durch das Freigeben der Liste freigeben werden. So steht es in der Delphi Doku.

Zitat:
Hinweis: Das TStringList-Objekt ist nicht der Eigentümer der Objekte, die auf diese Weise hinzugefügt werden. Diese Objekte exisitieren weiter, auch wenn die TStringList-Instanz freigegeben wird. Sie müssen explizit von der Anwendung freigegeben werden.


Wie kann ich testen, ob eine DisplayListe, funktioniert oder nicht?

Gruß
KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 15, 2003 17:39 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
KidPaddle hat geschrieben:
Hallo SoS,

ja, diese Zeile fehlte, aber da ich keine Texturen verwende, macht es auch nichts aus. Denn TextureManager verwende ich nicht.

Beim debuggen viel mir auf, das beim erstellen der DisplayLists wahrscheinlich Memory Leaks entstehen. Du fügst Pointer in Listen mit MatList.AddObject(Name, Ptr) oder MeshList.Add(Ptr) ein, die aber nicht automatisch durch das Freigeben der Liste freigeben werden. So steht es in der Delphi Doku.

Zitat:
Hinweis: Das TStringList-Objekt ist nicht der Eigentümer der Objekte, die auf diese Weise hinzugefügt werden. Diese Objekte exisitieren weiter, auch wenn die TStringList-Instanz freigegeben wird. Sie müssen explizit von der Anwendung freigegeben werden.


Ich mach da nix...ich hab die Unit ja nicht von grundauf geschrieben, und die meisten Funktionen und evtl. Memoryleaks (inklusivem dem Laden ver Mesh und Materialdaten) stammen noch aus Mike Lischkes 3DS-Loader, der mir allerdings zu unübersichtlich war, weshalb ich die NB3D-Unit angepasst hab.

Zitat:
Wie kann ich testen, ob eine DisplayListe, funktioniert oder nicht?

Das geht schlecht...wenn nichts angezeigt wird, dann fällt das Testen schwer.Du kannst höchstens anhand der ListenID prüfen ob diese überhaupt erstellt werden konnte.
Wenn du dein Modell allerdings im 3DStudio MAX erstellt hast, dann solltest du es vor dem Zeichnen unbedingt stark runterskalieren, da der Objektmasstab im 3DS sehr viel größer ist.Meine Spielfiguren in NapalmBomber3D musste ich z.B. um den Faktor 0.0085 auf allen Achsen skalieren damit sie in die Szene passten.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 15, 2003 17:54 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Hi,

danke, ich werde es mit dem Skalieren probieren.

Gruß
KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 15, 2003 18:00 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Hi,

das wars. Das Objekt war so gross, das ich es nicht gesehen habe. Ich habe den Faktor 0,0085 anwenden muessen.

Danke für Hilfe.
KidPaddle

_________________
http://www.seban.de


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


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 16 Queries | GZIP : On ]