Mag sein, das dies schonwieder eine von den "Napfragen" ist, ich bin halt recht Zielsicher im finden selbiger,
also helft mir doch, bitte, ja ?
Also, ich hab mir LossyEx's glBitmap.pas zusammen mit der dglOpenGl.pas gesaugt und in mein Projekt eingebunden.
Jetzt folgende Frage(n):
a.) ich möchte mir meinen eigenen Textureloader schreiben, der mir dann ganz bequem
1.) alle meine Texturen läd (z.B. rekursiv aus einer bestimmten Location),
2.) einfach und korregt die gewünschte Bild Datei "bindet"
Zum laden der Bilder verwende ich folgende Code (Alpha):
root ist das Verzeichnis gespeichert, indem die Bilder sind.
ich erhalte OHNE root die Fehlermeldung, das er das Bild nicht finden konnte (= absolute Pfadangaben notwendig ?!),
MIT bekomme ich denselben Fehler (nein... ;o) )
folgende Deklarationen für root:
Code:
root: String = 'D:\Proggen\Aktuell\ogl\010 own';
die Strings
Code:
texture:array[0..1] of GLuInt;
textureName: Array[0..1] of String = ('gunnm.bmp', 'supersonic.bmp');
und damit mein Progg nicht abschwirrt,
Code:
function InitGL:Bool;
begin
if(not LoadPics)then
exit;
Der Code sieht für mich recht fehlerfrei aus...
Die naheliegenste Frage meinerseits zuerst : Wo ist der Fehler ?
p.s. : mit GLaux hats noch geklappt...auch wenns nur *.bmp's genommen hat
Edit1:
Geradeeben wars mir kurzzeitig wieder entfallen, hier also die zweite Frage:
die glBitmap.pas benötigt ja die dglopengl.pas, diese wiederrum muss beim initialisieren auf die oglexts zugreifen können,
weshalb sie direkt hinter den getDC() und wglCreateContext() sitzt, sprich ich müsste sie dann ja in der Uses Klausel meiner *.dpr mitführen;
wenn diese aber auch in meiner texture.pas deklariert ist, könnte / kommt es dann nicht zu Doppeldeklaration und Delphi meckert ?
Ich lerne neben dem Ogl proggen nämlich auch nonVcl, und da könnte es ja anders sein als mit VCL...wer weiss ?
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also ich habe mir das gerade mal angeschaut und konnte jetzt nichts gravierendes feststellen.
Warum es nicht funktioniert kann ich nicht sagen. Ich entdecke nichts was falsch ist. Evtl müsstest du mal deine Quellen hochladen so, dass ich mir das mal anschauen kann. Aber die Methode LoadTexture habe ich nur implementiert, um den Umstieg von Jan Horns textures.pas zu vereinfachen. Normalerweise solltest du die Klassen benutzen. Da dir dort auch wesentlich mehr Funktionalität zur Verfügung steht als dies in einer Methode möglich wäre.
Frage 2: Was sagt Delphi denn zu dir? Ohne Fehlermeldung kann ich nur raten.
Delphi sagt mir nichts...das war mehr eine provisorische Frage Ich mach mich morgen mal daran die Klassen zu verwenden...bin heute zu müde...
Den Quellcode lade ich mal Morgen up, wenn ich Zeit habe .
Danke für die Antwort - leider dauerts ne weile bis man mit OGL klarkommt...
Whatever..morgen mehr *gähn*
Ich hab noch vieeeele Fragen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Normal kannst du deine Units so häufig einbinden wie du das möchtest. Das ist ganz anders als bei C/C++. Das einzige was Probleme macht ist, wenn du in Unit1 die Unit2 einbindest und von Unit2 die Unit1 wieder einbindest. Da weiß Dlphi nicht, welche er zu erst laden soll. Das aber auch nur, wenn du die im Interfaceteil eingebunden hast. Im Implementationteil spielt das absolut keine Rolle.
Noch was zu OpenGL. Wie äußerst sich denn das nicht laden? Hast du mal im Debugger geschaut wo er aussteigt? Also wo er dann genau meint, dass er was nicht laden konnte. Und ob er das überhaupt meint. Nicht, dass der Fehler noch wo anders liegt.
Am besten its wohl wenn ich einfach mal den Debugger Text abkupfer :
Zitat:
Project empty.exe raised exception class EResNotFound with message 'Resource gunnm.bmp not found'. Process stopped. Use Step or Run to continue.
erneutes Drücken auf Run / step zeigt:
Zitat:
Exception EResNotFound in module empty.exe at 00023181 Resource gunnm.bmp not found.
Tatsache aber ist :
Die Bilder liegen im selben Ordner wie die .exe, Ich habs schon 2 Mal geprüft... (naja ;o) )
Wie auch immer, im Anhang erstmal die .dpr
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
So, ich hab einfach mal die Class "TglBitmap" fürs laden der Texturen / binden etc. benutzen wollen...
aber anscheinend klappt das damit auch nicht so wie es soll(te)...
Code:
texture:array[0..1]of TglBitmap2D;
.
.
function InitGL:Bool;
begin
Texture.Create('gunnm.bmp');
.
.
function DrawGLScene():Boolean;
begin
.
texture.Bind;// auch mit Texture.genTexture oder beides => Error
Diesmal bekomme ich aber nur ne EAccessViolation...
Nebenbei : es klappt auch nicht wenn ich keinen Array nehm und einfach nur create, lade, binde, free.
Zumindest wenn man mit dem "Texture loading" startwissen vom DGL-Texture tut auf die glBitmap.pas umsteigen will scheints nicht so einfach zu sein...
Es gibt anscheinend recht große unterschiede weil die glBitMap.pas ja praktisch schon alles implentiert hat und man nurnoch die vorgefertigten Befehle benutzen soll...Also...
Noob needs help
EDIT: nichtmal
LoadTexture('gunnm.bmp', texture, false);
.
.
glBindTexture(GL_TEXTURE_2D, texture);
klappt ohne Fehler...
Wie soll ich bitteschön Bilder laden, wenn die glBitmap.pas bei mir nur Fehler produziert,
und Glaux "zu alt" / "zu langsam" / "zu sonstwas" ist ? => Bitte: Schreibt ein neues Tut, das sich mal mit dem einbinden von Textures MIT der glBitmap.pas beschäftigt. Danke.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also ich kann Sasha da nur zustimmen. Du solltest dich ein wenig mit den Grundlagen von Delphi beschäftigen. Nebenbei solltest du auch darauf achten was dir dein Delphi als Fehlermeldungen gibt. Die haben in den meisten Fällen einen Sinn und helfen bei der Fehlersuche. Und wenn du Fragen hast und Fehler auftreten, dann die Fehlermeldungen immer mit schreiben. Das macht uns die Arbeit um ein vielfaches leichter. Das dürfte ja auch in deinem Intresse sein!
In deinem Falle ist das Problem, dass du bei dem Aufruf von LoadTexture als dritten Parameter ein True übergeben hast. Dadurch sagst du meine Klasse das sie die Textur aus einer Resource laden soll. Resourcen sind in die Anwendung mit eingebunden. Das ist in diesem Falle aber nicht so also kann er sie nicht laden. Wenn du den dritten Parameter im ersten Quellcode auf False setzt sollte es gehen.
Im zweiten Quellcode LoadTexture('gunnm.bmp', texture, false); kann nicht gehen, da textur ein array ist und du dann eine Stelle angeben musst.
Klassen werden mit Instanzvariable := Klassentyp.Constructorname erstellt.
In deinem Falle wäre das dann so. Textur[0] := TglBitmap2D.Create('Dateiname');
Also wenn du den Fehler resource not found kriegst, dann liegt das daran, daß du bestimmt TBitmap.LoadFromResource gemacht hast und dann will er die bitmap unbedingt im *.res file deiner Anwendung finden. Probiers mal mit TBitmap.LoadFromFile
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
thenraise EglBitmapException.Create('TglBitmap.LoadFromStream - Couldn''t load Stream. It''s possible to be an unknow Streamtype.');
end;
aber ist auch egal...* *...ich beschäftige mich dann mal wieder mit den Basics von Delphi...
@Sidorion:
Ne daran liegts nicht...die Fehlermeldung verändert sich nur...Fehler bleibt.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Wird bei dir die Exception aus der Methode LoadFromStream ausgelöst? Wenn ja, dann zippe mal Bitte dein Bild und lade es hoch. Ich habe schon unzählige Bilder damit geladen. Es wundert mich, warum es ausgerechnet bei dir nicht gehen soll.
Und natürlich tritt in der glBitmap der Fehler auf. Wenn die Datei nicht existiert (oder falsch angegeben wurde) oder irgendwie kaputt ist, dann kann er ja nur bei mir auftreten. Wo sollte er denn sonst auftreten? Und gerade was Bitmaps angeht mache ich nichts selber. Da benutze ich die TBitmap Klasse. Und wenn die auf einmal einen Fehler beinhalten sollte, dann würde mich das sehr wundern.
Langsam glaube ich nämlich, dass dein Bild irgendwie ne Macke hat. Lade das mal bitte gezipped hoch.
Ja, die Exception wird vom LoadFromStream ausgelöst.
nur das Bild ist mit Glaux fehlerfrei ladbar, von daher glaube ich nicht, dass das Bild ne Macke hat...
Edit1:
wenn ich das Bild in ein JPG konvertiere, läd er immerhin die App....nur als BMP will er garnicht...entweder es liegt am Bild....
oder an der glBitmap.pas...
Edit2:
die Texture bleibt nach dem binden nur standartmäßig 'weiß' / blank...
soll heissen nach erfolgreichem Binden habe ich genau da nur ne weiße Fläche, wo eigentlich die Texture hin soll...
wie gesagt, mit Glaux gings einwandfrei...whatever.
Edit3:
nach 3maligen neuerstellen der Texture im Paintshop zeigt er die gunnm. jpg sogar an !!
Oha...!! Ich...bin begeistert...beim bmp schmiert er immernoch ab...egal obs neuerstellt ist oder nicht.
Edit4:
Aber die Quali der Texture gefällt mir...nice...oder so...
Aber warum ers mit dem BMP nicht nimmt würd ich dennoch gerne wissen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
So. Ich habe mir das mal angesehen und er hat Probleme das Bild zu laden. Leider kann ich so auf die schnelle nicht herrausfinden woran es liegt. Nur eines weiß ich. So einfach kann ich das Problem nicht lösen, da ich wie gesagt die TBitmap Klasse von Delphi benutze. Und auf diese habe ich recht wenig Einfluss. An dieser Stelle sogar leider. Achja. Das Problem tritt nur auf, wenn du die Bilder mit Paint speicherst. (zu mindest bei mir) Ich habe sie mit IrfanView und mit Photoshop gespeichert und dann ging es. Evtl muss du deine Bilder noch einmal kurz damit abspeichern und dann geht es. Eine andere Möglichkeit wüsste ich jetzt nicht.
Aber keine Sorge ich werde zusehen, dass ich das Problem genau lokalisiert bekomme und werde, wenn es denn geht, das Problem fixen. Aber so lange bitte kein Paint benutzen. Das kann auch ne Weile dauern, da ich über die Feiertage nur selten an meinem Rechner bin.
Mit welchem Programm und welchen Einstellungen hast du das denn gespeichert?
Ähm, ich habs mit Paintshop (das tolle Windoof Prog) gespeichert;
Und da kann man ja keine Einstellungen festlegen...
Den Fehler kann ich aber auch mit Photoshop reproduzieren, indem ich
(egal was) als *.bmp abspeichere, mit Fileformat auf Windows, unabhängig von der Farbtiefe ( 16, 24, 32 Bit) oder einer umgekehrten Row order...
Wenn ich hingegen als OS/2 abbspeicher nimmt ers wieder;
siehe Anhang...
Und jetzt könnt ihr wieder freundlich zu mir werden - dafür das er die windoof bmps nicht schluckt kann ich nix... schon garnicht ahnen...
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Der "Fehler" liegt gewissermaßen auch nicht bei mir sondern in etwas was ich verwende. Und das kommt von Borland. An der Stelle kann ich so jetzt auch nichts dran ändern. Außer ich mache es komplett neu und das habe ich aber nicht vor. Und zum Thema Photoshop. Damit lief es bei mir! Ich habe es zwar nur als Windows Bitmap gespeichert aber das ging auf anhieb. Und auch wärend der Entwicklung habe ich viel mit Bitmaps gemacht und hatte dort nie Probleme. Im Zweifelfalle kannst du immernoch TGA oder JPG benutzen. Wobei TGA da besser ist, da du dort auch direkt den Alphakanal mit ablegen kannst.
Mitglieder in diesem Forum: 0 Mitglieder und 7 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.