.[ ČeskéHry.cz ].
Jak na GL_TEXTURE_GEN_MODE: GL_REFLECTION_MAP

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
frca



Založen: 28. 07. 2007
Příspěvky: 1558

PříspěvekZaslal: 7. únor 2023, 22:32:12    Předmět: Jak na GL_TEXTURE_GEN_MODE: GL_REFLECTION_MAP Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
frca



Založen: 28. 07. 2007
Příspěvky: 1558

PříspěvekZaslal: 7. únor 2023, 23:54:55    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
frca



Založen: 28. 07. 2007
Příspěvky: 1558

PříspěvekZaslal: 8. únor 2023, 00:30:37    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
frca



Založen: 28. 07. 2007
Příspěvky: 1558

PříspěvekZaslal: 10. únor 2023, 00:46:21    Předmět: Odpovědět s citátem

Kdyžtak tady:
https://github.com/Franticware/OpenMRac/commit/d35b14e3471079fecfbb489e94c67330cd815666#diff-ca0608868cfeaf27be7e2983641395fc350dfa67722055db8e7ff750cd2b5b50
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna