Wollen wir gleich zum Problem kommen:
Ich rendere ne Map, welche aus der Struktur einer BMP generiert wird.
Diese ist eine Indoor-Map, welche zudem beläuchtet wird.
Das Problem: die Karte ist in "Zellen" aufgeteiltm, die nacheinander gerendert werden. Jede Zelle verfügt logischerweise über eionen Fußboden, eine Decke und, wenn nötig: Wände.
Rendere ich nun aber eine Zelle mit den dazu gehörigen Lichtern und später eine andere Zelle, so scheint die Beläuchtung der anderen immer durcvh, da ich ja den Tiefenpuffer abschalten muss beim Blenden. (ich wieß: blending verläuft pixelweise, aber es berüchsichtigt ja dennoch den tiefenpuffer)....
Lasse ich aber den Tiefentest an, so verschwinden alle Lichter.
Zusammengefaßt: das Problem ist, dass es notwendig ist, dass das Progie auf der einen Seite den Tiefenpuffer aus hat, damit die Lichter auch gezeichnet werden und auf der anderen muss er an sein, damit ich nicht weit entfernte Lichter durchseinen sehe.........
Was mach ich nun?!?
_________________ Es sind immer die guten, welche zu früh von uns gehen müssen... Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net Neu! Ein großer Teil der Demos nach Kylix übersetzt!
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Nutze doch statt des Blendings ganz einfach Multitexturing.Das ist zum einen ein gutes Stück schneller, da die Geometrie ja nur einmal gezeichnet werden muss, und macht zum anderen weder Probleme mit Nebel noch mit dem Tiefenpuffer.
P.S. : Zu dem Thema gibts auf meiner HP auch ein Tutorial.
Denn werde ich mal auf deine Hp gucken....
Mit der Ideedes Multitexturings habe ich auch schon gespielt, aber das Programm soll auf so vielen Rechnern wie möglich laufen und ich denke nicht, dass auch einiger Ältere PCs 2 Texturunits auf der Graka haben (ich weiß nun selber gerade nicht, wie das bei meiner TNt2 M64 aussieht...)
Gibt es nicht auch noch andere Lösungen?
_________________ Es sind immer die guten, welche zu früh von uns gehen müssen... Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net Neu! Ein großer Teil der Demos nach Kylix übersetzt!
alle Nvidia Karten ab TNT (TwiN Texel) unterstützen Multitexturing mit mind. 2 Textureunits. => deine TNT2 M64 unterstützt damit Multitexturing. Und Karten vor der TNT würde ich nicht mehr mehr beachten.
Ich habe mir eben die Tuts dazu mal angesehen....
irgendwie habe ich aber ein paar Probs damit.... zum Multitexturing benötige ich ja zwanxsläufig die Funcs
"glMultiTexCoord2fARB" und "glActiveTextureARB".... wenn ich diese nun aber Versuche so einzubinden:
bekomme ich den Fehler, dass mein Programm mit fehlenden Exports verbunden sei.... woran kann das liegen bzw. wie komme ich dennoch an die Proceduren (bitte ohne die "OpenGL12.pas" verwenden zu müssen)?
_________________ Es sind immer die guten, welche zu früh von uns gehen müssen... Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net Neu! Ein großer Teil der Demos nach Kylix übersetzt!
Habe nun doch nochmal die opengl12.pas verwendet, habe es hat irgendwie nichts genützt: ich bekomme immer dieses olle CPU-Fenster...
das merkwürdige: alle DGL-Samples, die diese unit verwenden laufen bei mir Anstandslos.... woran könnte das liegen?
(ein kleiner Test meinerseits via Kontrollmessages hat ergeben, dass er sich immer beim "glActiveTextureARB" aufhängt......)
_________________ Es sind immer die guten, welche zu früh von uns gehen müssen... Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net Neu! Ein großer Teil der Demos nach Kylix übersetzt!
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Zitat:
Habe nun doch nochmal die opengl12.pas verwendet, habe es hat irgendwie nichts genützt: ich bekomme immer dieses olle CPU-Fenster... das merkwürdige: alle DGL-Samples, die diese unit verwenden laufen bei mir Anstandslos.... woran könnte das liegen? (ein kleiner Test meinerseits via Kontrollmessages hat ergeben, dass er sich immer beim "glActiveTextureARB" aufhängt......)
Das ist recht eigenartig, muß man doch um Multitexturing zu nutzen eigentlich keine Vorbereitungen treffen.
Aber prüf mal mittels folgender Zeile, wie viele TMUs dir deine Graka meldet :
Code:
var
TMU : Integer;
...
glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, @TMUs);
P.S. :Ich hoffe mal, das du auf die TMUs nicht mittels glActiveTextureARB(1), sondern mittels der dafür vorgesehene OGL-Konstanten (also glActiveTextureARB(GL_TEXTURE1_ARB) ) zugreifst.
MessageBox(0, 'No seccond Texture Unit found - Closing down!', 'Error', MB_OK or MB_ICONERROR);
end;
auf, welches bislang keine Meldung ausgegeben hat....
aber was mit auffält: ich heb eben das programm nochmal gestartet und da ist es nichtmal zum oncreate-ereigniss gekommen!
_________________ Es sind immer die guten, welche zu früh von uns gehen müssen... Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net Neu! Ein großer Teil der Demos nach Kylix übersetzt!
So.. ich habe das Projekt etwas abgespeckt (alles, was nicht nötig war, kam raus) und habe es nun über eure Upload-sec hochgeladen... vielleicht werdet ihr ja klug draus.......
(ansonsten: ich wäre notfalls auch bereit, normales Blending zu verwenden, wenn sich mein Problem oben lösen läßt!)
_________________ Es sind immer die guten, welche zu früh von uns gehen müssen... Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net Neu! Ein großer Teil der Demos nach Kylix übersetzt!
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
So, hab mir grad deinen Quelltext angesehen und den Fehler recht schnell gefunden.
Bevor du die OpenGL12 nutzen kannst, musst die OpenGL-Bibliothek erstmal mit InitOpenGL initialisieren.
Das tust du am besten direkt am Anfang deines OnCreate-Ereignisses, oder im initialization-Teil deiner Hauptunit.
P.S. : Das Programm startet dann bei mir, beschwert sich jedoch über fehlende Texturen, weshalb ich es nicht weiter getestet hab.Die Dinger jetzt selbst zu erstellen bin ich zu faul...
hmm ... stimmt, ich hatte einige texturen rausgenommen, da die zip sonst viel zu groß geworden wäre.... bei mir gabs aber noch n prob:
ich habe direkt als ersten befehl bei "oncreate" dein "initopengl;" gesetzt... Folge: nichts hat sich geändert!
_________________ Es sind immer die guten, welche zu früh von uns gehen müssen... Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net Neu! Ein großer Teil der Demos nach Kylix übersetzt!
Bei mir siehts genau so aus, zeigt mir aber nur das CPU-Fenster....
Hmm ... habe es eben mla ausprobiert... nach der "Map.bmp" wird ja die Karte gerendet... fehlt diese File, startet das Programm bei mir auch.... ist sie da, gibts das cpu-fenster, was heißt, dass es in der "createmap" - procedur einen fehler geben muss......
_________________ Es sind immer die guten, welche zu früh von uns gehen müssen... Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net Neu! Ein großer Teil der Demos nach Kylix übersetzt!
So... ich habs nun anders geregelt:
Ich habe zunächst das nicht beläuchtete und dann die Beleuchtung gezeichnet, wobei ich den Tiefenpuffer wärend des nicht Beleuchteten auf Schreibschutz hatte.... damit wird bei der Beleuchtung das Polygon 2n9icht beachtet", da es keine Tiefeninfos geschriben hat, alle anderen schon vorhandenen aber wohl, da jede Licht - Textur Tiefeninfos hinterläßt (in miner Szenerie wird alles beleuchtet ... nur deshalb funzt das....)
Dadurch gehen mir zwar etwa 50 % Speed verloren, aber es Funzt wenigstens Absturzfrei und das ist das wichtigste......
_________________ Es sind immer die guten, welche zu früh von uns gehen müssen... Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net Neu! Ein großer Teil der Demos nach Kylix übersetzt!
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.