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

Aktuelle Zeit: Fr Jul 18, 2025 00:05

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



Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Ärger mit dem Tiefenpuffer
BeitragVerfasst: Fr Feb 28, 2003 23:47 
Offline
DGL Member

Registriert: Sa Sep 21, 2002 21:32
Beiträge: 346
Wohnort: Eilsum (Nahe Emden)
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!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 01, 2003 05:19 
Offline
DGL Member
Benutzeravatar

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.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 01, 2003 11:01 
Offline
DGL Member

Registriert: Sa Sep 21, 2002 21:32
Beiträge: 346
Wohnort: Eilsum (Nahe Emden)
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!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 01, 2003 11:33 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 01, 2003 11:40 
Offline
DGL Member

Registriert: Sa Sep 21, 2002 21:32
Beiträge: 346
Wohnort: Eilsum (Nahe Emden)
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:
Code:
  1.  
  2.  
  3. var
  4.  
  5. glMultiTexCoord2fARB: procedure(target: GLenum; s, t: GLfloat); stdcall;
  6.  
  7. glActiveTextureARB: procedure(target: GLenum); stdcall;
  8.  
  9.  


Sowie die Konstanten "GL_TEXTURE0_ARB" und "GL_TEXTURE1_ARB" einzusetzen, so bekomme ich nur das CPU - Fenster zu Gesicht.... binde ich so ein:

Code:
  1.  
  2.  
  3. procedure glActiveTextureARB(target: GLenum); stdcall external opengl32;
  4.  
  5. procedure glClientActiveTextureARB(target: GLenum); stdcall external opengl32;
  6.  
  7.  


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!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 01, 2003 12:30 
Offline
DGL Member

Registriert: Sa Sep 21, 2002 21:32
Beiträge: 346
Wohnort: Eilsum (Nahe Emden)
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!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 01, 2003 12:52 
Offline
DGL Member
Benutzeravatar

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:
  1.  
  2.  
  3. var
  4.  
  5.  TMU : Integer;
  6.  
  7. ...
  8.  
  9. glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, @TMUs);
  10.  
  11.  


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.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 01, 2003 13:33 
Offline
DGL Member

Registriert: Sa Sep 21, 2002 21:32
Beiträge: 346
Wohnort: Eilsum (Nahe Emden)
hmm ... also in meinem "on create-ereigniss" rufe ich einmal
Code:
  1.  
  2.  
  3. glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, @TexUnits);
  4.  
  5.  &nbsp;if TexUnits<2 then begin
  6.  
  7.  &nbsp; &nbsp;MessageBox(0, 'No seccond Texture Unit found - Closing down!', 'Error', MB_OK or MB_ICONERROR);
  8.  
  9.  &nbsp;end;
  10.  
  11.  

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!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 01, 2003 13:58 
Offline
DGL Member

Registriert: Sa Sep 21, 2002 21:32
Beiträge: 346
Wohnort: Eilsum (Nahe Emden)
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!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 01, 2003 14:07 
Offline
DGL Member
Benutzeravatar

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... :twisted:

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 01, 2003 14:23 
Offline
DGL Member

Registriert: Sa Sep 21, 2002 21:32
Beiträge: 346
Wohnort: Eilsum (Nahe Emden)
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!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 01, 2003 14:31 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Hm...also bei mir sieht das OnCreate-Event so aus :
Code:
  1.  
  2.  
  3. procedure TForm1.FormCreate(Sender: TObject);
  4.  
  5. var
  6.  
  7. texunits : integer;
  8.  
  9. begin
  10.  
  11. InitOpenGL;
  12.  
  13. form1.myDC:= GetDC(Handle);
  14.  
  15. SetupPixelFormat;
  16.  
  17. myRC:= wglCreateContext(myDC);
  18.  
  19. wglMakeCurrent(myDC, myRC);
  20.  
  21. glenable(gl_texture_2d);
  22.  
  23. glEnable(GL_DEPTH_TEST);
  24.  
  25. InitTextures;
  26.  
  27. glLoadIdentity;
  28.  
  29. glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, @TexUnits);
  30.  
  31.  &nbsp;if TexUnits<2 then begin
  32.  
  33.  &nbsp; &nbsp;MessageBox(0, 'No seccond Texture Unit found - Closing down!', 'Error', MB_OK or MB_ICONERROR);
  34.  
  35.  &nbsp;end;
  36.  
  37. createmap;
  38.  
  39. end;
  40.  
  41.  


Und das Programm läuft, beschwert sich dann aber das es die fehlenden Texturen nicht findet.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 01, 2003 14:38 
Offline
DGL Member

Registriert: Sa Sep 21, 2002 21:32
Beiträge: 346
Wohnort: Eilsum (Nahe Emden)
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!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 02, 2003 12:14 
Offline
DGL Member

Registriert: Sa Sep 21, 2002 21:32
Beiträge: 346
Wohnort: Eilsum (Nahe Emden)
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!


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


Wer ist online?

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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 16 Queries | GZIP : On ]