Occlusion Queries sind langsam, da noch Daten von der Grafikkarte abgefragt werden ("wie viele Fragmente wurden gezeichnet"). Also einen Query absetzen (mit einfachem Material) absetzen und gucken, ob es gezeichnet werden muss, lohnt sich seltenst. Man muss die Zeit ausnutzen zwischen Query absetzen und eintreffen des Ergebnisses. Entweder 1-3 Frames abwarten oder Google mal nach CHC++.
Registriert: Sa Aug 18, 2007 18:47 Beiträge: 694 Wohnort: Köln
Programmiersprache: Java
Dein Programm läuft bei mir nicht. Es meckert über eine fehlende MSVC100D.DLL. Habe das Microsoft Visual C++ 2010 Redistributable Package sowohl in der 32bit als auch die 64bit Version installiert. Da es sich (laut google) um die Debug Version der DLL handelt, müsstest du mal das Compiletarget auf Release stellen.
_________________ Es werde Licht. glEnable(GL_LIGHTING); Und es ward Licht.
Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Ein occlussion query für lichter zu verwenden macht meiner Meinung nach nicht viel Sinn. Zumindestens nicht für die meisten Lichter und auch nicht auf Hardware. OQ läuft Frameversetzt, man hat also die Info vom Letzten Bild und das ist Blöd, da es zu Fehlern führt. Die meisten Lichter haben sehr große einzugsbereiche, welche durch Sphere oder Cone im OQ representativ gerendert werden müssten und in den meisten Fällen dir sagen "Joa da ist noch mindestens 1 Pixel zu sehen".
Battlefield3 nutzt ein Software Renderer, der auf 256xM Auflösung die Tiefeninformationen/ObjektID per CPU rasterisiert. Das macht erst mit mehrkern systemen Sinn, daher machen die das erst mit der aktuellen Version. Während Sound, Renderbefehle abgeschickt werden, wird auch die OQ auf CPU gemacht, dann die restlichen Drawcalls abgesetzt. http://www.graphicshardware.org/presentations/andersson-game_engines_and_GPUs.pptx
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Also in den Shader PointLight.frag und DirectionalLight.frag habe ich das max nicht mehr drin gehabt. Und das sind auch die Zwei die verwendet werden. Kann sein, dass es in den alten Versionen noch drin war.
Für Specular ist das max wichtig, ansonsten stimmt nämlich die Specular-Formel nicht mehr und es sieht echt merkwürdig aus.
Also eigentlich war das von mir ein Verbesserungsvorschlag, weil das "max" eben nicht im Shader drin war. Ansonsten würde das Licht von einer Lichtquelle negativ werden können (was nicht sein sollte).
Mitglieder in diesem Forum: 0 Mitglieder und 13 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.