Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 22.05.2008, 23:24 Titel: Lichtmodell wird verfälscht |
|
|
Hoi,
nachdem ich aufgrund von Depthbuffer-Problemen meine OpenGL-Szene skaliert habe, stimmt etwas mit der Beleuchtung der Szene nicht mehr. Warscheinlich liegt es daran, dass die Normalen der Dreiecke auch skaliert werden. Aber wie kann ich das verhindern? Hat OpenGL irgend eine Funktion auf Lager mit der man daws beheben kann?
MfG, Caran _________________ Eine Erkenntnis von heute kann die Tochter eines Irrtums von gestern sein. |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 24.05.2008, 22:54 Titel: |
|
|
Okey habs herausgefunden: glEnable(GL_NORMALIZE)
Das brint die Normalen die über glNormal* gesetzt wurden wieder auf ihre Ausgangsgröße vor der Skalierung.
MfG Caran _________________ Eine Erkenntnis von heute kann die Tochter eines Irrtums von gestern sein. |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 24.05.2008, 22:59 Titel: |
|
|
Kostet aber mehr Rechenzeit (meines Wissens nach)
Daher bei größeren Szenen evtl. doch eher den Viewport verkleinern, und den Framebuffer skalieren? (GPU seitig)
Ist dann garantiert schneller
Und wo wir da gerade schon sind: ( )
glNormal3f bzw. glNormal3fv sind auch einen kleinen Tick schneller als ihre Kollegen  |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 25.05.2008, 10:56 Titel: |
|
|
Das stimmt es kostet wirklich mehr Rechenzeit....es gibt nich was anderes: glEnable(GL_RESCALE_NORMAL) oder so. Aber das macht meine Szene nur noch vehlerhafter.
Wie kann man den Framebuffer skalieren?
Grüße Caran _________________ Eine Erkenntnis von heute kann die Tochter eines Irrtums von gestern sein. |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 25.05.2008, 14:56 Titel: |
|
|
Also wenn du SDL nutzt, liegt der Framebuffer da:
Code: | PointeraufFB = MeinDisplaySurfacePointer -> pixels |
Den kannst du dann lustig skalieren^^ , was dann also CPU seitig erfolgt -> langsam
Oder du renderst alles in eine Textur und skalierst die, das ist evtl. bei wirklich komplexen Szenen schneller... (da GPU seitig)
Da müsste man mal rumprobieren.
Ich hatte den Texturenrenderer-Ansatz genommen, um das (vll.) aus F.E.A.R. bekannte Feature "Pixel Doubling" nachzubilden. (Dort wird die Szene auf der halben Auflösung gerendert, skaliert, das HUD gezeichnet und Ausgegeben.) |
|
Nach oben |
|
 |
Caran

Anmeldungsdatum: 11.03.2007 Beiträge: 290 Wohnort: Lörrach
|
Verfasst am: 25.05.2008, 19:23 Titel: |
|
|
28398 hat Folgendes geschrieben: |
Ich hatte den Texturenrenderer-Ansatz genommen, um das (vll.) aus F.E.A.R. bekannte Feature "Pixel Doubling" nachzubilden. (Dort wird die Szene auf der halben Auflösung gerendert, skaliert, das HUD gezeichnet und Ausgegeben.) |
Sowas wollt ich neulich auch mal machen habs aber dann doch bleiben lassen.
Grüßle, Caran _________________ Eine Erkenntnis von heute kann die Tochter eines Irrtums von gestern sein. |
|
Nach oben |
|
 |
|