[openGL] Multitex /combiners
-
Hi
mache gerade meine ersten schritte mit multitextureing.
Das benutzten klapp soweit, is ja auch einfach.
Was mir aber jetzt fehlt ist infos ueber den umgang mit den TexEnvf in verbinung mit multiple texture units.
Sowas hier:
... glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE1); glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE1); glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR); glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS); glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PREVIOUS); glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA); ...Bis jetzt hab ich nur GL_MODULATE/REPLACE/DECAL mit einer texture verwendet.
Jeztz wuerde gerne wissen was alles geht und wie sich das errechnet, damit ich nicht rumspielen muss bis das rauskommt was ich haben will!
Kann mir jemand sagen wo genau ich diese Info finden kann?? Ich hab mal ein bischen in den gl 1.2.1 specs geblaettert, aber nix genaues gefunden.
Ich wuerde gernes wissen was ich mit source, operand etc beeinfluss, und wie sich die actionen der einzelnen texture units zum schluss zusammenfuegen!
Danke
Flo
-
mmh
nach ein bischen genaueren durchschauen der extensions list, auch neben multi tex, habe ich schon einiges wichtiges gefunden:
http://oss.sgi.com/projects/ogl-sample/registry/ARB/texture_env_combine.txt
http://oss.sgi.com/projects/ogl-sample/registry/ARB/texture_env_add.txt
http://oss.sgi.com/projects/ogl-sample/registry/ARB/texture_env_crossbar.txt
http://oss.sgi.com/projects/ogl-sample/registry/ARB/texture_env_dot3.txtGanz klaeren sich zwar noch nicht alle fragen, aber so kommt ich schon fast dahin wo ich hinwill ;).
(Vielleicht sollte ich gleich an den fragment shader rangehen ... ???)
Kann mir jemand sagen wieviel texture units man so in welcher grapikkarten generation erwarten kann.
Ich weis nur das meine ati9700 mobile 8 hat? hat man mind soviel davon ueberall heutzutage??
gruss
Flo
-
Ja, tu dir selbst einen Gefallen und benutze Fragment Shader. Register Combiner stammen noch aus der Zeit bevors Fragment Programs hab. Man kann damit zwar theoretisch die meisten Funktionen aus Fragment Programs emulieren, aber ist einfach nur grausamer Brainfuck
(Ich glaube Cg bietet die Möglichkeit Shader als Register Combiner kompilieren zu lassen)Zu den Texel Units: Mit "GL_MAX_TEXTURE_UNITS_ARB" kannst du abfragen wie viele Texel Units die Grafikkarte unterstützt. Allerdings liefert meine Geforce 6800 nur 4 zurück, obwohl es 8 sein müssten. Meine Radeon 9800 hat damals korrekt 8 angezeigt. Du kannst aber bei den modernen Grafikkarten (Shader Model 3.0) sicher davon ausgehen dass sie 8 Texel Units unterstützen.
-
Also sollte ich bevor ewig mit den combiner rumfuck glich mal den fragement shader rannhemen!?!
Danke, dass werd ich mal versuchen!! da sollte sich dann recht einfach die gewollte formel umsetzten lassen!
Gruss, Flo
Ps: achso das ich mit der max texture units zahl abfragen, is mir bekannt, so habe ich rausgefunden wieviel ich habe, wollte aber nurmal wissen wieviel so ueblich sind, damit ich weis was sinn macht vorauszusetzten.Danke
-
Gleich noch ein nachfage:
Da ich noch neu mir shader bin, kann mir jemand ein paar links dafuer nennen.
Kann man irgendwo ein paar beispiel fragment shader codes fuer ogl runterladen?
-
Mit Google lässt sich da bestimmt was finden

Was ich nach ein paar Sekunden gefunden habe: http://wiki.delphigl.com/index.php/Tutorial_glslPrinzipiell musst du dich entscheiden ob du GLSL oder Cg verwendest. Der Vorteil von Cg ist dass es auch in DirectX funktioniert, dafür unterstützt es die neuesten Instruktionen für Shader Model 3 (zumindest soweit ich weiß) noch nicht. Im Prinzip ist auch kein großer Unterschied zwischen GLSL, Cg und HLSL, die Syntax ist ein bisschen anders (vec3 statt float3 und so Sachen), aber die Algorithmen im Prinzip ändern sich ja nicht
Wenn du eines davon kannst, kannst du alle.Was auf jeden Fall nichts schaden kann ist ein Tool wie FX Composer (nur HLSL) oder ATI Rendermonkey (HLSL und GLSL). Das ist eine Shader-IDE, in der du schön deine Shader schreiben und debuggen kannst. Wozu ich noch raten kann ist "GLIntercept", mit dem Tool kannst du während der Laufzeit Shader debuggen. Die Schnittstelle zu deinem Programm ist auch nur eine manipulierte opengl32.dll, die du in deinem Programmverzeichnis ablegen musst. Du musst also nicht einmal etwas im Code anpassen, ist sehr angenehm.
-
Danke!!
nach gut zwei stunden rumsuchen und coden, laeuft der shader wie gewuenscht. War leichter als ich erwartet hatte.
Aber im bezug auf shader und extension gibst es weninge gute tutorials, man bekommt schon raus wie man es machen muss, aber an ganz wenigen stellen findet man auch warum.
Das mit dem debuggen werd ich mir mal anschauen.
Hab mich fuer GLSL entschieden. Rendermonkey habe ich gefunden installiert und mal reingeschaut, aber bin da noch nicht ganz durchgestiegen. Die beispiele sind ganz nett.
-
Flow_cplus schrieb:
Hab mich fuer GLSL entschieden. Rendermonkey habe ich gefunden installiert und mal reingeschaut, aber bin da noch nicht ganz durchgestiegen. Die beispiele sind ganz nett.
Ja, Rendermonkey ist leider nicht besonders benutzerfreundlich. Aber was besseres gibt es für OpenGL meines Wissens nach leider nicht
