Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 7. únor 2023, 22:32:12 Předmět: Jak na GL_TEXTURE_GEN_MODE: GL_REFLECTION_MAP |
|
|
Zdravím, netušíte, jak toto zapsat v GLSL, a to včetně využití texturové matice?
kód: |
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_ARB);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_ARB);
glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_ARB); |
Vím, že existuje funkce reflect, ale není mi jasné, co by mělo být prvním parametrem a prakticky se mi nedaří replikovat to, co mi fungovalo ve fixed function pipeline. Ta cubemapa se tam zkrátka mapuje vždy nějak divně. _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 7. únor 2023, 23:54:55 Předmět: |
|
|
Tak mi to začalo fungovat, dávám sem k review:
kód: |
uniform mat4 uModelViewMat;
uniform mat4 uProjModelViewMat;
uniform mat4 uTexMat;
uniform mat3 uNormMat;
attribute vec3 aPos;
attribute vec3 aNormal;
attribute vec2 aTex;
varying vec2 vTex;
varying vec3 vNormal;
varying vec3 vCubeRay;
void main()
{
vTex = aTex;
vNormal = uNormMat * aNormal;
gl_Position = uProjModelViewMat * vec4(aPos, 1.0);
vCubeRay = normalize(mat3(uTexMat) * reflect(vec3(0.0, 0.0, -1.0), vNormal));
} |
Časem to dám na GitHub, je to součást přepisu OpenMRac do GLES2.
Nefunguje to úplně přesně, ale je to close enough. Je možné, že OpenGL používá nějaký sofistikovanější incident parametr pro reflect?
Jinak moje pocity:
_________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 8. únor 2023, 00:30:37 Předmět: |
|
|
Mám to! Výsledek je přesně stejný jako FFP:
kód: |
uniform mat4 uModelViewMat;
uniform mat4 uProjModelViewMat;
uniform mat4 uTexMat;
uniform mat3 uNormMat;
attribute vec3 aPos;
attribute vec3 aNormal;
attribute vec2 aTex;
varying vec2 vTex;
varying vec3 vNormal;
varying vec3 vCubeRay;
void main()
{
vTex = aTex;
vNormal = uNormMat * aNormal;
gl_Position = uProjModelViewMat * vec4(aPos, 1.0);
vec3 eyePos = vec3(uModelViewMat * vec4(aPos, 1.0));
vCubeRay = normalize(mat3(uTexMat) * reflect(eyePos, vNormal));
} |
_________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
|
Návrat nahoru |
|
|
|