Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Casio
Založen: 13. 01. 2009 Příspěvky: 23
|
Zaslal: 15. duben 2009, 20:32:18 Předmět: Bumpmapping - chybnej rendering |
|
|
Nejprve uvedu příklad.
Tr.1 ; Vx ; TC ; Nor ; Tan ; Bin
v1 : -1,-1,1; 0,0 ; 0,0,1; 1,0,0; 0,-1,0;
v2 : 1,-1,1; 1,0;
v3 : 1, 1,1; 1,1;
Tr.2
v1 : 1,-1, 1; 0,0; 1,0,0; 0,0,-1; 0,-1,0;
v2 : 1,-1,-1; 1,0;
v3 : 1, 1,-1; 1,1;
Tr.1 se renderuje správně.
Tr.2 je maticí otočenej o 90 stupnů a renderuje se chybně (směr světla je opačnej než jeho skutečná pozice) proč ???
Vždit je tr.2 stejnej jako tr.1, jen je otočenej. Když tr.1 otočím o 180, tak je to správně.
Ja s tím teprve začínam, tak nemám zkušenosti a nevydím v tom žádnou chybu.
Data mám uložený v polích=>shader a renderuji pomocí glDrawElements.
Uvítám jakékoliv rady a typy ohledně bumpmappingu. |
|
Návrat nahoru |
|
 |
ladik-BigBoss

Založen: 28. 07. 2007 Příspěvky: 162
|
Zaslal: 16. duben 2009, 06:57:26 Předmět: |
|
|
me funguje tohle:
kód: |
uniform vec3 lightPosition;
attribute vec3 tangent, binormal;
varying vec3 lightVec;
void main(void)
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
vec3 tempVec = lightPosition-gl_Vertex.xyz;
lightVec.x = dot(tangent, tempVec);
lightVec.y = dot(binormal, tempVec);
lightVec.z = dot(gl_Normal, tempVec);
gl_TexCoord[0].st = vec2(gl_MultiTexCoord0);
}
|
|
|
Návrat nahoru |
|
 |
Casio
Založen: 13. 01. 2009 Příspěvky: 23
|
Zaslal: 16. duben 2009, 17:06:41 Předmět: |
|
|
Díky ladik-BigBoss.
Už mi to funguje, nahradil jsem v shaderu tyto 2 řádky:
mat3 TBNmat = mat3(tangent, binormal, gl_Normal);
lightVec = TBNmat * normalize(tempVec);
za ...dot... a je to v pohodě.
Ještě bych něco potřeboval. Nemá někdo ozkoušenou funkci na výpočet tangenty. Ty co mám jsou špatný, občas je výsledek 0,0,0 nebo jiná blbost. |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 16. duben 2009, 17:28:58 Předmět: |
|
|
Casio napsal: |
mat3 TBNmat = mat3(tangent, binormal, gl_Normal);
lightVec = TBNmat * normalize(tempVec); |
Tohle by ale mělo fungovat taky. Zkus normalize(tempVec) * TBNmat.
Casio napsal: |
Ještě bych něco potřeboval. Nemá někdo ozkoušenou funkci na výpočet tangenty. Ty co mám jsou špatný, občas je výsledek 0,0,0 nebo jiná blbost. |
http://www.3dkingdoms.com/weekly/weekly.php?a=37 (bitangent = binormal) _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
ladik-BigBoss

Založen: 28. 07. 2007 Příspěvky: 162
|
Zaslal: 16. duben 2009, 21:54:02 Předmět: |
|
|
ten algoritmus z 3dkingdoms.com taky pouzivam, doporucuju |
|
Návrat nahoru |
|
 |
Casio
Založen: 13. 01. 2009 Příspěvky: 23
|
Zaslal: 20. duben 2009, 19:53:39 Předmět: |
|
|
Pravda Eosie, stačí to jen prohodit ( normalize(tempVec) * TBNmat ) a funguje to taky spávně. |
|
Návrat nahoru |
|
 |
|