.[ ČeskéHry.cz ].
Bumpmapping - chybnej rendering

 
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
Casio



Založen: 13. 01. 2009
Příspěvky: 23

PříspěvekZaslal: 15. duben 2009, 20:32:18    Předmět: Bumpmapping - chybnej rendering Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
ladik-BigBoss



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

PříspěvekZaslal: 16. duben 2009, 06:57:26    Předmět: Odpovědět s citátem

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



Založen: 13. 01. 2009
Příspěvky: 23

PříspěvekZaslal: 16. duben 2009, 17:06:41    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 16. duben 2009, 17:28:58    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
ladik-BigBoss



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

PříspěvekZaslal: 16. duben 2009, 21:54:02    Předmět: Odpovědět s citátem

ten algoritmus z 3dkingdoms.com taky pouzivam, doporucuju
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
Casio



Založen: 13. 01. 2009
Příspěvky: 23

PříspěvekZaslal: 20. duben 2009, 19:53:39    Předmět: Odpovědět s citátem

Pravda Eosie, stačí to jen prohodit ( normalize(tempVec) * TBNmat ) a funguje to taky spávně.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
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