glTexGen no OpenGL ES 2.0
Há várias horas que estou tentando implementar uma substituição GLSL para glTexGen com GL_OBJECT_LINEAR. Para o OpenGL ES 2.0. No Ogl GLSL, existe o gl_TextureMatrix que facilita isso, mas não está disponível no OpenGL ES 2.0 / OpenGL ES Shader Language 1.0
Vários sites mencionaram que isso deve ser "fácil" em um sombreador GLSL vert. Mas eu simplesmente não consigo fazê-lo funcionar.
Meu palpite é que não estou configurando os aviões corretamente ou estou perdendo algo em meu entendimento.
Eu examinei a web. Mas a maioria dos sites está falando sobre texturas projetadas, só estou procurando criar UVs com base em projeção planar. Os modelos estão sendo construídos no Maya, têm polígonos de 50k e o modelador está usando o mapeamento da plaina, mas o Maya não exportará os UVs. Então, eu estou tentando descobrir isso.
Examinei as informações da página de manual do glTexGen:
g = p1xo + p2yo + p3zo + p4wo
O que é g? G é o valor de s na chamada texture2d?
Eu olhei para o site:
http://www.opengl.org/wiki/Mathematics_of_glTexGen
Outro tamanho explica a mesma função:
coord = P1 * X + P2 * Y + P3 * Z + P4 * W
Eu não entendo como coord (um vec2 UV em minha mente) é igual ao produto escalar (um valor escalar)? Mesmo problema que tive antes com "g".
Como defino o avião? No meu código opengl c ++ 3.0, defino-o como [0, 0, 1, 0] (basicamente a unidade z) e o glTexGen funciona muito bem.
Ainda estou sentindo falta de algo.
Meu vert shader se parece basicamente com isso: WVPMatrix = World View Project Matrix. POSITION é a posição do vértice do modelo.
varying vec4 kOutBaseTCoord; void main() { gl_Position = WVPMatrix * vec4(POSITION, 1.0); vec4 sPlane = vec4(1.0, 0.0, 0.0, 0.0); vec4 tPlane = vec4(0.0, 1.0, 0.0, 0.0); vec4 rPlane = vec4(0.0, 0.0, 0.0, 0.0); vec4 qPlane = vec4(0.0, 0.0, 0.0, 0.0); kOutBaseTCoord.s = dot(vec4(POSITION, 1.0), sPlane); kOutBaseTCoord.t = dot(vec4(POSITION, 1.0), tPlane); //kOutBaseTCoord.r = dot(vec4(POSITION, 1.0), rPlane); //kOutBaseTCoord.q = dot(vec4(POSITION, 1.0), qPlane); }
O frag shader
precision mediump float; uniform sampler2D BaseSampler; varying mediump vec4 kOutBaseTCoord; void main() { //gl_FragColor = vec4(kOutBaseTCoord.st, 0.0, 1.0); gl_FragColor = texture2D(BaseSampler, kOutBaseTCoord.st); }
Eu tentei texture2DProj em frag shader
Aqui estão alguns dos outros links que eu procurei
http://www.gamedev.net/topic/407961-texgen-not-working-with-glsl-with-fixed-pipeline-is-ok/
Agradeço antecipadamente.