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

Aktuelle Zeit: Fr Jul 18, 2025 07:28

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mo Mai 24, 2010 23:14 
Offline
DGL Member

Registriert: So Feb 28, 2010 11:21
Beiträge: 3
Hallo,

ich will für die Schattenberechnung eine Tiefenmap (4096*4096) erstellen, hab da aber gleich zwei Porbleme:

glviewport funktioniert nicht richtig: -> nur der normale Bereich des Fensters wird in die Textur gezeichnet. Aber ein Bild sagt mehr als tausend Worte:

Bild

Wenn ich als Format GL_RGB nehme, sehe ich dort meine Szene wie erwartet. Bei GL_DEPTH_COMPONENT24 ist der gezeichnete Bereich weiß...

Code zum Erstellen der Tiefenmap/Initialisierung:
Code:
  RC := CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
  ...
  shadow_size := 4096;
  glGenTextures(1, @shadow_map);
  glBindTexture(GL_TEXTURE_2D, shadow_map);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  //glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, shadow_size, shadow_size, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, pTexData); //<- Alles weiß...
  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, shadow_size, shadow_size, 0, GL_RGB, GL_UNSIGNED_BYTE, nil); //<- funktioniert wie gehabt

RenderCode:
Code:
  glclearcolor(1,0,0,0);
  glViewPort(0, 0, shadow_size, shadow_size);
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
 
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  gluPerspective(45.0, 1, 0.01, 128);

  render_world;

  glenable(GL_TEXTURE_2D);
  glBindTexture(GL_TEXTURE_2D, shadow_map);
  //glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, 0, 0, shadow_size, shadow_size, 0); //<- Hierbei wird wieder alles weiß...
  glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, shadow_size, shadow_size, 0); // funktionert

  glViewPort(0, 0, GLForm.ClientWidth, GLForm.ClientHeight);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;

  gluPerspective(45.0, GLForm.ClientWidth/GLForm.ClientHeight, 0.01, 128);
  Render_world;
  render_hud;
  ...


Auch ohne render_world komme ich zu solchen Ergebnissen (Clearcolor deshalb auf Rot).

Wäre euch sehr dankbar, denn ich bin hier mit meinem Latein am Ende.

RebellX


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Mai 25, 2010 00:18 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

Also ich seh kein Fehler. Lass dir doch zum Testen das ganze mal auf dem Bildschirm ausgeben, wenns da gehts, dann stimmt was mit dem Kopieren nicht. Du kannst es aber auch ma mit nem FBO probieren. Die sind inder Regel schneller un auch bisl einfacher in der Anwendung wenn man sich da ne schöne Klasse rund rum bastelt. Wenn du daran interessiert bist kann ich dir auch meine Unit mit der FBO-Klasse geben wenn du magst...
€: das hab ich grad gefunden: GLSL Licht und Schatten


MfG Bergmann.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Mai 25, 2010 09:27 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Bergmann hat dich ja bereits auf FBOS hingewiesen, um die du nicht herumkommen wirst. Deine Textur ist ja größer als dein Renderkontext (bzw. Fenster) und laut Specs ist der Bereich ausserhalb des Renderkontextes undefiniert, sprich alles was du in deine Textur kopieren willst was ausserhalb der Größe deines Fensters liegt ist undefiniert. Was genau dann passiert liegt am Treiber, aber im Normafall passiert genau was du beschreibst. Du musst also definitiv einen Offscreen Puffer benutzen, egal ob Pixelpuffer oder ein FBO.

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


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


Wer ist online?

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.

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