if (surfaces[i].shader) surfaces[i].shader->Bind(); // <- das hat nix mit shader zu tun, das ist sowas wie die q3 shader scripts (da wird auch die texturen gebunden)
if (surfaces[i].shader) surfaces[i].shader->Unbind(); // <- das hat nix mit shader zu tun, das ist sowas wie die q3 shader scripts
// Unbind simple shader
glDisableVertexAttribArrayARB(apos);
gSimpleShaderPrg->Unbind();
// Unbind VBO
glBindBuffer(GL_ARRAY_BUFFER_ARB,0);
Der letzte parameter in glVertexAttribPointerARB gibt ja an, auf welcher Pointer position sich die Daten befinden.
Und das ist mein vertex array mit (position, normalen, tangente, binormale und texture korrdinate)
Deswegen * 4. Das sollte also stimmen.
Wenn wer ne idee hat, bitte melden... kenn mich mit GLSL nich gut aus
Danke vielmals,
Final
Dateianhänge:
Dateikommentar: Wenigstens etwas, aber nicht wirklich korrekt :( r3d_bafadfas.JPG [25.75 KiB]
78-mal heruntergeladen Dateikommentar: So passt alles ;) das ist aber der normale pfad ohne shader :( r3dtechdemo0002.JPG [89.42 KiB]
103-mal heruntergeladen
Zuletzt geändert von Finalspace am Do Jul 20, 2006 14:56, insgesamt 2-mal geändert.
Ich würde am anfang nicht eigene Attribute benutzen, sondern die schon vorhandenen Texturkoordinaten nutzen. Ansonsten probier die VBOs ersteinmal ohne shader aus (Geht natürlich nur sinvoll mit vohrhandenen Texturkoordinaten) und benutz dann erst einmal die Shader aus dem Wiki.
Manchmal ist es auch sinvoll die opengl befehle nicht in Objekten zu kapseln. Das macht anderen es gerade zu unmöglich den code durchzuschauen...
if (surfaces[i].shader) surfaces[i].shader->Unbind(); // Texturen wegbinden
glDisableVertexAttribArrayARB(4);
glDisableVertexAttribArrayARB(3);
glDisableVertexAttribArrayARB(2);
glDisableVertexAttribArrayARB(1);
glDisableVertexAttribArrayARB(0);
// Unbind simple shader
gSimpleShaderPrg->Unbind();
// Unbind VBO
glBindBuffer(GL_ARRAY_BUFFER_ARB,0);
und im shader so drauf zugreifen:
Code:
attribute vec2 mytexcoord;
attribute vec3 normal;
attribute vec3 tangent;
attribute vec3 binormal;
Das erste attribut sollte ja nach der VertexAttribPointer reihenfolge eigentlich die Position sein, ist aber nicht so, ka wieso :p
Auf jedemfall die nächsten sind dann die folgenden...
Registriert: Mi Jul 17, 2002 12:07 Beiträge: 976 Wohnort: Tübingen
Rein interessehalber, hast du die Performance zwischen "normal", VBO und Shader VBO mal verglichen?
_________________ "Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0." - Hal Faber Meine Homepage: http://laboda.delphigl.com
Normal VBO:
Maximal reached fps: 799.00
Minimal reached fps: 213.00
Wenn mans zur laufzeit umschaltet, dann ist normales VBO schneller.
Aber hab gemerkt das es mit ATI noch probs gibt, kolleg mit ner Radeon 9800 pro, geht zwar alles... nur sieht das bild genauso verkorst aus wie oben.
Sprich die texcoords fehler
ICh will noch mal dran erinnern, dass es sinn macht die bekannten vec4 gl_MultiTexCoord0..7 vec4 gl_Normal und vec4 gl_Color aus der festen Pipeline zu benutzen. Diese brauchen dann auch nicht extra deklariert werden
ATI hat probleme mit glVertexAttribPointerARB() und funktioniert nur wanns will Das problem gabs schon des öferen, wurde auch hier im Shader forum diskutiert.
Siehe: http://www.delphigl.com/forum/viewtopic.php?t=4016
Auf jedemfall jetzt gehts, und ich lass es auch so
Musste den shader bissel versimplern, genau wie du gesagt hast, direkt gl_Texcoord benutzen und nicht über wege über attribts machen.
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
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.