játékfejlesztés.hu
FórumGarázsprojectekCikkekSegédletekJf.hu versenyekKapcsolatokEgyebek
Legaktívabb fórumozók:
Asylum:    5440
FZoli:    4892
Kuz:    4455
gaborlabor:    4449
kicsy:    4304
TPG:    3402
monostoria:    3284
DMG:    3172
HomeGnome:    2919
Matzi:    2519

Pretender:    2498
szeki:    2440
Seeting:    2306
Geri:    2185
Orphy:    1893
Joga:    1791
Bacce:    1783
MaNiAc:    1735
ddbwo:    1625
syam:    1491
Frissebbek | Korábbi postok
[1] [2] [3] [4] [5] [6] [7] [8] > 9 < [10] [15] [20] [22]
Asylum - Törzstag | 5440 hsz       Online status #92023   2008.07.07 07:41 GMT+1 óra  
mért maradna párhuzamos vele? Az elöbbi példámnál maradva, ha egy olyan fal van ami azzal az (1, 2, 3) vektorral párhuzamos aztán elforgatom a vektort 90 fokkal akkor már nem lesz vele párhuzamos.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
AmidaBucu - Tag | 281 hsz       Online status #91992   2008.07.07 02:42 GMT+1 óra  
évesztes vok. majd jövőre
Izé, ezeket értem mind, mivel fakton tanitották meg azér egyedül is kilehet bogarászni, csak ezt a tereset nem értem. Monnyuk a tbn-nél. Ha egy Vektor- plz neköss bele- párhuzamos egy fellülettel a "rendes" térben. És tbn-nel átrakjuk egy másik térbe, ez a párhuzamosság megmarad, nem ugye? Ha megmaradna akkor lehetne számolni igy pl a fény és a normál vektora közötti szöget így pl, ugye? Akkor a vektro állása a képzeletbeli tengelyekhez képest külön külön ugyanaz? Csak ezt az eggyet nem vágom. Egy igen vagy egy nem kéne
Ami tönkremehet, az tönkre is megy!!!
   
newversion - Tag | 197 hsz       Online status #91985   2008.07.06 23:42 GMT+1 óra  
a hétszázát és most érettségiztél
szerintem zuzzál be a könyvtárba pár matek könyvért
   
AmidaBucu - Tag | 281 hsz       Online status #91981   2008.07.06 18:53 GMT+1 óra  
Nemnem félreértesz, csak egy esetet akartam példázni, hogy megértessem mit nem értek
Ami tönkremehet, az tönkre is megy!!!
   
fpeti - Törzstag | 1280 hsz       Online status #91980   2008.07.06 18:40 GMT+1 óra  
Én is:
Idézet
AmidaBucu :
egy vektor függőleges a fallal


Na ez kurvajó.
'Képezeld' el a fal mátrixát, 3 vektor kell hozzá, ahogy asylum leírta (példa):
a: a fal vízszintes éle
b: a fal függőleges éle
c: a fal normálisa
kb:
Kód:
| a.x b.x c.x |
| a.y b.y c.y |
| a.z b.z c.z |

Ez normalmappingnál nem mindíg így van egy falnál, akármilyen irányban lehetnek a vektorok, ráadásul egy 3szög minden sarkánál más, ezt tul. a model textúrakoordinátái döntik el, valamint a normál, ami lehet smootholt is.
Ha a fal axis aligned, akkor az új térben a (0,-1,0) vektor párhuzamos lesz az új tér xy síkjával.

Rajzolgatással szvsz jobban meg lehet érteni, próbálj ki pár féle esetet, nézd meg mi lesz egy vektorral, ha beszorzod a mátrixoddal..

Idézet
AmidaBucu :
hogy az ujjonan kapot vektor az uj kordinátái alapján nem olyan állásu a felülethaz képest mint valójában.


Ugyanolyan állású lesz (párhuzamos a fal síkjával), csak a koordinátái lesznek mások.
   
Asylum - Törzstag | 5440 hsz       Online status #91979   2008.07.06 17:49 GMT+1 óra  
nem értem



a tangens, normál és binormál igen azok is egy bázist határoznak meg de ha jol tudom az a parallax mapping vagy a normal map ba is van ilyen?
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
AmidaBucu - Tag | 281 hsz       Online status #91978   2008.07.06 17:39 GMT+1 óra  
Hu te aztán vágod. Köszi!
Azé arra akarok kilukadni hogy abban nem vagyok biztos:
Tehát ha monnyuk a rendes térben egy vektor függőleges a fallal, akkor a fal tengens terében ez a vektor már függőleges a fallal. Érted ugye?
Némely effektnél kell ügye hogy a tangens vagy mittom én mi térbe juttasuk a fény vektorát.
Nos én azt nem értem, hogy az ujjonan kapot vektor az uj kordinátái alapján nem olyan állásu a felülethaz képest mint valójában. Akkor mivan? Ugye érted.
Ami tönkremehet, az tönkre is megy!!!
   
Asylum - Törzstag | 5440 hsz       Online status #91974   2008.07.06 16:47 GMT+1 óra  
amiröl beszélsz az a bázistranszformácio akar lenni?
valahogy ugy képzeld el, hogy veszel 3 egymásra meröleges vektort a térben (nem pont az egységvektorokat), és szeretnéd az 'a' pontodat felirni ebben a másik bázisban.

példa. legyen az egyik tér a "rendes" tér vagyis az egységvektorok

Kód:
1 0 0  ez itt az i
0 1 0  ez itt a j
0 0 1  ez itt a k


a másik tér legyen a rendes tér 90 fokos elforgatottja az x tengelyen vagyis

Kód:
1 0  0  i  marad
0 0 -1  j böl -k lesz
0 1  0  k bol pedig j lesz


szeretnénk a rendes térbeli (1, 2, 3) vektort felirni ebben az uj térben, mindössze annyit kell csinálni, hogy ezt a vektort megszorozzuk az uj tér bázisvektoraibol állo mátrixxal.

az eredmény pedig ha minden igaz a (1, 3, -2) vektor lesz, vagyis az eredeti 90 fokos elforgatottja az x tengelyen.

3D re áttérve: a kamera három reprezentáns vektora (eye, look, up) is egy ilyen bázis; egy teret határoznak meg, ahhoz, hogy valami megjelenjen a képernyön át kell transzformálni ebbe a térbe (ez eddig csak a nézet)., aztán, hogy megjelenjen a képernyön is még le kell vetiteni, igy a végén kapsz egy 2 dimenzios vektort, ami megmondja, hogy hova kerüljön a pixel a képernyön.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
AmidaBucu - Tag | 281 hsz       Online status #91971   2008.07.06 16:02 GMT+1 óra  
Nah akk egy biztosito kérdés. ha van mittom én a meg b tér és van egy c pont "felrajzolva" egy papirra. A c pont a b térben van. És ha a c pontot "átrakjuk" az a térbe akkor szemre egybeesik c meg c'? mer ezt még nagyon nem vágom mit jelent hogy átrakni. Most azt hogy a c és c pont ugyan olyan elhelyezkedésű az "origójaihoz" képest? Tehát átrakni azt jelenti hogy addig forgatom-tologatom a kordináta tengelyekkel eggyüt a pontot, míg azok ránem passzolnak a másik tér kordinátatengejeire?
De ha c pont amugy az origon van, akkor a c' is a másik origon lesz. Tehát ha átviszek egy origoközeli vektort(ami nincs is közel a falhoz),akkor az uj vektor az uj térbe olyan mintha közel lenne a falhoz ráadásul az iránya is megválztozik. Tehát ha van egy lámpára mutato vektorom, akkor az átvitt alakja másfelé fog mutatni, nem ugy mint az eredeti. Remélem érthető hogy mi(minden)t nem értek
Ami tönkremehet, az tönkre is megy!!!
   
newversion - Tag | 197 hsz       Online status #91965   2008.07.06 15:32 GMT+1 óra  
magasságértékböl fika modszerrel lehet normalt csinálni, de nem szokás
pl realtime displacemapnál ami szintén csak magasságértéket tárol, általában tároljuk a normalvectort is, mert igy a tuti, gyorsabb is meg jobb is
   
fpeti - Törzstag | 1280 hsz       Online status #91964   2008.07.06 15:01 GMT+1 óra  
Igazad van, normal mappingról van szó, csak sokszor bumpmapping-nek mondják (persze hibásan).. őszintén (ezek szerint ) bumpmapping-es kódot még nem is láttam, nálam egy kicsit össze is vannak keveredve a fogalmak, ez amiatt van, hogy a neten mindegy, bump- vagy normal-mapet mondanak, normalmapping-re gondolnak. Persze ha elé teszik, hogy 'parallax', akkor szétválik a dolog. - slendriánság, az biztos, de valahogy a 'normalmapping' soha nem terjedt el konyhanyelv körökben, akármilyen gémer cikket olvas az ember, mindíg 'bumpmappelt' minden
Mit mond a wiki:

Bump mapping is a computer graphics technique where at each pixel, a perturbation to the surface normal of the object being rendered is looked up in a heightmap and applied before the illumination calculation is done (see, for instance, Phong shading). The result is a richer, more detailed surface representation that more closely resembles the details inherent in the natural world. Normal mapping is the most commonly used bump mapping technique, but there are other alternatives, such as parallax mapping.

Ezek szerint a 'bump' gyűjtőfogalom, ha jól értem.
   
Matzi - Szerkesztő | 2519 hsz       Online status #91963   2008.07.06 14:23 GMT+1 óra  
fpeti:
Elhatalmasodott rajtam az az érzés, hogy te tulajdonképpen a normal mapról beszélsz. Mármint amikor fejtegeted, hogy a textúrából beolvasunk, meg ilyenek. A bumpmapban egy magasságérték van csak, ami az adott pont, normálisa mentén való elmozdítását jelzi, nem pedig egy normálvektor.

Ettől eprsze a textúratérbe transzformálgatás kb ugyanúgy működik, csak a textúrából kinyert érték nem egészen az.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
fpeti - Törzstag | 1280 hsz       Online status #91962   2008.07.06 14:11 GMT+1 óra  
"Betranszformája" a vektort (ált. fényitány) bumpmap xyz terébe - hívják ezt a teret texture-space-nek is. Így azonos térben lesz a vektor és a bumpmap beli normál, így lehet csak velük számolni.
Egy textúrában lévő bumpmap vektor(pixel) honnan tudhatná egyébként, hogy áll a térben egy 3szögön a bump-normal, de ezt a tbn megadja. A textúra tu,tv +a z koordináta, ami a vertex normálból jön kiadnak egy 3*3-as mátrixot, ez a tbn.

Meg lehetne azt is csinálni, hogy a bumpmap normálját a tbn inverzével visszaforgatni world-space-be, és akkor is lehetne szorozni a fény vektorával, de hülyeség lenne, mert sokkal egyszerűbb egy vektort forgatni, mint minden bumpmap normált. (deferred shadernél plö kb. ezt kell csinálni, utána jöhet akármennyi fény, megvan a bumpvektor, és számolható a fényintenzitás, de ez már más théma.)
   
AmidaBucu - Tag | 281 hsz       Online status #91956   2008.07.06 13:36 GMT+1 óra  
Jah értem.... Valamit hadd kérdezzek még. Ha egy tbn mátrixxal szorzunk egy vektort akkor a vektor el lesz forgatva ugy hogy ugy áljn az uj térben, mint a régiben, vagy mi?

Ezt a hozzászólást AmidaBucu módosította (2008.07.06 13:49 GMT+1 óra, ---)
Ami tönkremehet, az tönkre is megy!!!
   
fpeti - Törzstag | 1280 hsz       Online status #91952   2008.07.06 13:10 GMT+1 óra  
Ja, hát a textúrából így nyerik ki a normált (nomrál magyarul normális amúgy ) tényleg minden bumpmap-es shaderben benne van:
Kód:
float3 normal = tex2D(S0,texpos)*2-1; // esetleg normálatod is még..

legyen egy jó napod:
Azért kell ez mert egy textúra pixeleinek rgb-jei 0-255-ig, shaderben átváltva 0.f-1.f-ig mehetnek.
De egy normál koordinátája lehet negatív is, ezt kell ábrázolni 0-1 között, azaz:
0-1 között kell tárolni -1 +1 közötti értéket, ezért felszorozzák, hogy 0-1 közé essen kb így:
textúra.r = bumpmapnormal.x * 0.5+0.5 // próbáld ki, pl -1-re (-1*0.5)+0.5 = 0-t ad
így megy xyz->rgb-re, ezt a bumpmap generátor csinálja, neked nem kell.

Ha vissza akarod shaderben alakítani, akkor vissza kell konvertálni:
normal.x = (texturecolor.r*2)-1 // visszaadja a r=0.f nél az -1-et. és így csinálja xyz-re a FENTI KÓDSOR..

Remélem ebből tisztább lett
   
AmidaBucu - Tag | 281 hsz       Online status #91944   2008.07.06 12:50 GMT+1 óra  
Csám-csám. Elnyammogatom
Jah, tényleg gyagya voltam

Ezt a hozzászólást AmidaBucu módosította (2008.07.06 12:56 GMT+1 óra, ---)
Ami tönkremehet, az tönkre is megy!!!
   
Matzi - Szerkesztő | 2519 hsz       Online status #91930   2008.07.06 11:05 GMT+1 óra  
A normalokat tuti nem olvashatod ki egy az egyben a textúrából. Mármint kiolvashatod, de az nem nem egy teljes értékű normál lesz, hanem az adott felület normáljának a torzítása. Szóval fogod a felület normálját, modulálod a bumpmappal, és utána használhatod fel. Gondolj bele, a bumpmapban az értékek mindig ugyanazt mutatják, függetlenül a felőlet irányától, ami nyilván nem lehet jó.

A megoldás valami olyasmi, ha jól rémlik, bár meglehet, hogy tévedek, mert ilyet még nem csináltam, hogy mintavétlezgesz a bumpmapból, a kapott értékeket felszorozgatod a felületi normálissal, így lesz minimum 3 pontod (egy ahová kirajzolsz, kettő pedig a két külön irányba, x és y irányba egy kicsit eltolva)ezeknek a különbségeire számolsz egy keresztszorzatot, és akkor megkapod az új normált. Vagy valami ilyesmi.

Ha esetleg borzalmas baromságot írtam volna, akkor sorry.

Ezt a hozzászólást Matzi módosította (2008.07.06 11:13 GMT+1 óra, ---)
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
AmidaBucu - Tag | 281 hsz       Online status #91929   2008.07.06 10:55 GMT+1 óra  
Persze-persze. Mivel tisztában vagyok a vakfltokkal a tudásomban, ezér kérek segítséget.
Akkor biztos megtudod mondani hogy az alant látható kódban, mért nem elég ha a normalt ilyen modon cserélem ki? Mer amugy a PPL rész már müxik, de ahogy a normállal babrálok fejreál.
Ami tönkremehet, az tönkre is megy!!!
   
newversion - Tag | 197 hsz       Online status #91928   2008.07.06 10:51 GMT+1 óra  
szerintem elöször tanulj egy kis matekot, utána menni fog biztos
de ha nem igy gondolod akkor csak szenvedj
   
AmidaBucu - Tag | 281 hsz       Online status #91927   2008.07.06 10:47 GMT+1 óra  
Juj... gonosz.
Ugy gondoltam ha a fény felé irányulo vektor normalizált alakjának és a map komponenseiből kialakitott normal vektor szorzata agya a rátát ahoz, hogy a pixelen mennyire érvényesül a fény. Tehát a különbség csak annyi lenne hgy a ppl effektben a normált kicserélem egy map alapján, nem?

Ebbe nem tudom hol van a szaros turmixgép. Jobb ha mész máshova offolni, ha segíteni ugyse tudsz még.

Nah, ilyen gondja nem volt még valakinek?
Ami tönkremehet, az tönkre is megy!!!
   
newversion - Tag | 197 hsz       Online status #91926   2008.07.06 10:42 GMT+1 óra  
a shader nem egy turmixgép, amibe minden szart belehányunk aztán finom lesz ,sajnos...
matematikailag kéne levezetni aztán ha azt érted akkor azt kapod amit levezettél
   
AmidaBucu - Tag | 281 hsz       Online status #91922   2008.07.06 10:03 GMT+1 óra  
Nagyon nagyon
Gugliztam, de nem igazán találtam rá megoldást. Olvastam kodokat de olyat nem teláltam ahol ppl és bumpmap egy effektként lennének használva.
Csak annyit szeretnék tudni hogy az alant látható psben mi lehet a hiba.
Amugy, Igen jól elvagyok
Ami tönkremehet, az tönkre is megy!!!
   
Asylum - Törzstag | 5440 hsz       Online status #91918   2008.07.06 09:10 GMT+1 óra  
jól elvagy jön a szokásos szó: olvas

C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
AmidaBucu - Tag | 281 hsz       Online status #91894   2008.07.06 04:34 GMT+1 óra  
Nem jóóóóó! Próbáltam bumpmapet belecsinálni. De mikor a normált kicserélem a mapkomponenseire, akkor a fény határai "megszögeletesednek", egyenesek lesznek.
Mér?
Kód:
float4 color;
float3 normal = normalize(tex2D(bumptex, In.tex));
float at = 1-saturate(distance(lPos,In.WPos)/lRad);
float3 tL = normalize(lPos - In.WPos);
float3 tC = normalize(camPos - In.WPos);
float3 halfV = normalize(tL + tC);
float d = dot(halfV, normal);
             float4 diff =  dot(tL, normal);
             float4 spec = pow(saturate(d),lPow)* lSpec;
             color = ((tex2D(difftex,In.tex.xy)+(lDiff))*diff+spec)*at;
             return color;

Amugy a ppl-rész már müx.

Ezt a hozzászólást AmidaBucu módosította (2008.07.06 08:58 GMT+1 óra, ---)
Ami tönkremehet, az tönkre is megy!!!
   
AmidaBucu - Tag | 281 hsz       Online status #91886   2008.07.06 03:36 GMT+1 óra  
Köszi a mintádat! Tiédből meg az enyémből összekutyultam egy ilyet:
Kód:
loat4 color;
float at = 1-saturate(distance(lPos,In.WPos)/lRad);
float3 tL = normalize(lPos - In.WPos);
float3 tC = normalize(camPos - In.WPos);
float3 halfV = normalize(tL + tC);
float d = dot(halfV, In.normal);
    float4 diff =  dot(tL, In.normal);
    float4 spec = pow(saturate(d),6)* lSpec;
    color = ((tex2D(difftex,In.tex.xy)+(lDiff*at))*diff + spec)*at;
    return color;
és elég jól müxik. Arigato!
Ami tönkremehet, az tönkre is megy!!!
   
fpeti - Törzstag | 1280 hsz       Online status #91867   2008.07.05 16:22 GMT+1 óra  
Kisebb hatványokkal egyre nagyobb lesz a felület:
ha minden ok, akkor a dot -1 0 +1 között lehet (0-1 az érdekes) pl:
0.9999 sokadik hatványa is majdnem 0.9999, viszont 0.1 nek már gyakoraltilag a 3 hatványa is nulla, ha nálad a dot mindíg nagyon kicsi, akkor valami baj van.
Na jó bemásolok az enyiméből egy ide vonatkozó darabot (ez megy - nekem tetszik legalábbis)
hátha ad ötletet: (deferred shaderből való, csak részlet)
Kód:
        // fényerő
float att = (1-saturate(distance(worldpos,LightPos)/LightRadius));

float3 pixeltolight = normalize(LightPos - worldpos);
// specuarity now!
float3 pixeltocamera = normalize(CameraPos - worldpos);
float3 halfvec = normalize(pixeltolight+pixeltocamera);

// bump normal
float3 normal = tex2D(S0,texpos)*2-1;
// Tádám !
float NdotL = dot(normal,pixeltolight);
float spec = pow(saturate(dot(normal,halfvec)),12);
c0 = LightColor*att*(NdotL+spec);

kicsit más csak, van benne saturate, meg a legutsó sor. valamint a hatvány nálad 50.. nálam csak 12.. heh
   
AmidaBucu - Tag | 281 hsz       Online status #91866   2008.07.05 15:17 GMT+1 óra  
Az a baj, hogy mivel egy dot végeredménye csak pici lehet ezér a magasabb hatványai is icurkapicurkák lesznek. De akkor szinte 0 lesz a specular szorzója, tehát nincs ragyogás.
Ha pici hatványon van akkor meg a hatalmas szorzótol az egész felület hófehér. Ezt hogy lehet gátlásolni?
Ami tönkremehet, az tönkre is megy!!!
   
AmidaBucu - Tag | 281 hsz       Online status #91699   2008.07.05 06:55 GMT+1 óra  
nah mos szurom tökön magam. Ujrairtam az egészet most nem csuszik szét, de nem is müxik a speculár csillanás.
Kód:
float4x4 WVP;
float4x4 World;
float3 lPos = {0,0,0};
float4 lDiff = {0,1,1,1};
float4 lSpec = {1,1,0,1};
float4 camPos;
float power = 50;
texture tex;

sampler difftex = sampler_state
{
Texture = <tex>;
MinFilter = LINEAR;
MipFilter = LINEAR;
MagFilter = LINEAR;
};

struct TV
{
float4 pos : POSITION;
    float4 normal : NORMAL;
    float2 tex        : TEXCOORD0;
};

struct VTP
{
float4 pos : POSITION;
    float4 WPos     : TEXCOORD0;
    float4 normal : TEXCOORD1;
    float2 tex        : TEXCOORD2;
};

VTP VS(TV In)
{
    VTP Output = (VTP)0;

    Output.pos = mul(In.pos, WVP);
    Output.WPos = mul(In.pos, World);
    Output.normal = normalize(mul(In.normal, World));
    Output.tex = In.tex;
       
    return Output;
}

float4 PS(VTP In) : COLOR0
{
float4 color;
float3 tL = normalize(lPos - In.WPos);
float3 tC = normalize(camPos - In.WPos);
float3 halfV = normalize(tL + tC);
float d = dot(halfV, In.normal);
    float4 spec =  max(pow(d,power),0);
    float4 diff =  dot(tL, In.normal) * lDiff;
    color = tex2D(difftex,In.tex.xy)*diff + spec;
    return color;
}

technique Simple
{
    pass Pass0
    {
        VertexShader = compile vs_2_0 VS();
        PixelShader = compile ps_2_0 PS();
    }
}
Ami tönkremehet, az tönkre is megy!!!
   
AmidaBucu - Tag | 281 hsz       Online status #91680   2008.07.05 05:23 GMT+1 óra  
Shader nélkül nem csuszik szét.
2 változot adok a shadernek egy wvp-t és egy texturát. Nincs egy linketek egy ttál alap hlsl kódhz?
Ami tönkremehet, az tönkre is megy!!!
   
AmidaBucu - Tag | 281 hsz       Online status #91678   2008.07.05 05:13 GMT+1 óra  
lecsekkolom
Ami tönkremehet, az tönkre is megy!!!
   
Matzi - Szerkesztő | 2519 hsz       Online status #91677   2008.07.05 05:12 GMT+1 óra  
Semmi, nem lényeg.
Hát, a shaderben nem látok komoly hibát, nem lehet, hogy a hiba a kódban van?
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
AmidaBucu - Tag | 281 hsz       Online status #91674   2008.07.05 05:04 GMT+1 óra  
Avassatok be, nekem ez kinai
Amugy meg ugy uszik szét, mintha "ugrálnának" az oldalak.
Ami tönkremehet, az tönkre is megy!!!
   
newversion - Tag | 197 hsz       Online status #91652   2008.07.05 01:02 GMT+1 óra  
ha ilyen gyorsan lehetne inverzt számolni na az jo lenne
   
Matzi - Szerkesztő | 2519 hsz       Online status #91649   2008.07.05 00:39 GMT+1 óra  
szerk: Hm, sorry mégsem, megnéztem, és elvileg így is jó. Kb amúgy hogy esik szét?

newversion: Azért inverzet számítani sem egy nagy katasztrófa.

Ezt a hozzászólást Matzi módosította (2008.07.05 01:11 GMT+1 óra, ---)
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
AmidaBucu - Tag | 281 hsz       Online status #91574   2008.07.04 16:56 GMT+1 óra  
Hibakeresés gyanánt lecsupaszitottam, de igy is rosz ugyanugy szétcsuszik.
Kód:
float4x4 WVP : WORLDVIEWPROJECTION;
texture tex;

sampler difftex = sampler_state
{
Texture = <tex>;
MinFilter = LINEAR;
MipFilter = LINEAR;
MagFilter = LINEAR;
};

struct in_vs
{
float4 pos : POSITION;
float2 tex : TEXCOORD0;
};

struct out_vs
{
float4 WVPpos : POSITION;
float2 tex : TEXCOORD0;
};

out_vs VS(in_vs In)
{
out_vs Out;
Out.WVPpos = mul(WVP, In.pos);
Out.tex = In.tex;

return Out;
}

float4 PS(out_vs In) : COLOR0
{
float4 col = tex2D(difftex, In.tex.xy);
return col;
}

technique Simple
{
    pass Pass0
    {
        VertexShader = compile vs_2_0 VS();
        PixelShader = compile ps_2_0 PS();
    }
}
Ami tönkremehet, az tönkre is megy!!!
   
newversion - Tag | 197 hsz       Online status #91550   2008.07.04 15:46 GMT+1 óra  
normalizáld a normald a ps-ben talán
de szerinted el tudjuk képzelni a végeredményt ? nem hiszem
   
AmidaBucu - Tag | 281 hsz       Online status #91544   2008.07.04 14:54 GMT+1 óra  
Nah most ugyan "müködik" a csillanás, viszont nagyon érdeke az eredmény szétcsuszott minden.
Kód:
float4x4 World;
float4x4 WVP;
texture tex;
float ac=10;
int nLight = 1;
float3 lPos = {0.0f,0.0f,0.0f};
float3 camPos;
float4 lSpec = {1.0f,1.0f,1.0f,1.0f};
float4 lDiff = {1.0f,1.0f,1.0f,1.0f};

sampler difftex = sampler_state
{
Texture = <tex>;
MinFilter = LINEAR;
MipFilter = LINEAR;
MagFilter = LINEAR;
};

struct in_vs
{
float4 pos : POSITION;
float3 normal : NORMAL;
float2 tex : TEXCOORD0;
};

struct out_vs
{
float4 pos : TEXCOORD0;
float4 WVPpos : POSITION;
float2 tex : TEXCOORD1;
float4 normal : TEXCOORD2;
};

out_vs VS(in_vs In)
{
out_vs Out;
Out.normal = normalize(mul(In.normal,World));
Out.pos = mul(World, In.pos);
Out.WVPpos = mul(WVP, In.pos);
Out.tex = In.tex;

return Out;
}

float4 PS(out_vs In) : COLOR0
{
float3 toL = normalize(lPos-In.pos);
float3 toC = normalize(camPos-In.pos);
float3 halfv = normalize(toC+toL);
float d = dot(halfv, In.normal);
d = max(d,0);

float spec = pow(d,ac);
float diff = dot(toL,In.normal);
float4 col = (tex2D(difftex, In.tex.xy)*diff*lDiff)+(spec * lSpec);
return col;
}

technique Simple
{
    pass Pass0
    {
        VertexShader = compile vs_2_0 VS();
        PixelShader = compile ps_2_0 PS();
    }
}
Ami tönkremehet, az tönkre is megy!!!
   
Matzi - Szerkesztő | 2519 hsz       Online status #91539   2008.07.04 14:16 GMT+1 óra  
Másnak is kell lennie, mert vertex shaderben számolod a fényt, így csak a csúcsoknál van változás, ezért kcisit ronda lehet. Amúgy mintha a normált is érdemes lenne áttranszformálni a wilágtérbe, különben érdekes jelenségeket okozhat.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
AmidaBucu - Tag | 281 hsz       Online status #91537   2008.07.04 14:08 GMT+1 óra  
Nah átirtam, de még mindig olyan érdekes. Egyenes falületen háromszögről háromszögre másmés az eredmény nagyon érdekes...
Kód:
float4x4 World;
float4x4 WVP;
texture tex;
float ac=10;
int nLight = 1;
float3 lPos = {0.0f,0.0f,0.0f};
float3 camPos;
float4 lSpec = {1.0f,1.0f,1.0f,1.0f};
float4 lDiff = {1.0f,1.0f,1.0f,1.0f};

sampler diff = sampler_state
{
Texture = <tex>;
MinFilter = LINEAR;
MipFilter = LINEAR;
MagFilter = LINEAR;
};

struct in_vs
{
float4 pos : POSITION;
float3 normal : NORMAL;
float2 tex : TEXCOORD0;
};

struct out_vs
{
float4 pos : POSITION;
float2 tex : TEXCOORD0;
float diff : TEXCOORD1;
float spec : TEXCOORD2;
};

out_vs VS(in_vs In)
{
out_vs Out;
float4 pos = mul(World, In.pos);
float3 toL = normalize(lPos-pos);
float3 toC = normalize(camPos-pos);
float3 halfv = normalize(toC+toL);
float d = dot(halfv, In.normal);
d = max(d,0);

Out.spec = pow(d,ac);
Out.diff = dot(toL,In.normal);
Out.pos = mul(In.pos, WVP);
Out.tex = In.tex;
return Out;
}

float4 PS(out_vs In) : COLOR0
{
float4 col = (tex2D(diff, In.tex.xy)*In.diff*lDiff)+(In.spec * lSpec);
return col;
}

technique Simple
{
    pass Pass0
    {
        VertexShader = compile vs_2_0 VS();
        PixelShader = compile ps_2_0 PS();
    }
}
Ami tönkremehet, az tönkre is megy!!!
   
AmidaBucu - Tag | 281 hsz       Online status #91536   2008.07.04 14:03 GMT+1 óra  
okok, és akor a "spec" és "diff" változokat adjam át mint texcoord? akor jó köszi, kiprobálom
Ami tönkremehet, az tönkre is megy!!!
   
newversion - Tag | 197 hsz       Online status #91504   2008.07.04 11:09 GMT+1 óra  
biztos hogy vertex shaderbe akartad tenni a speculart?
ilyenkor csak a vertexek-nél számolja, nagy polygonoknál elég szar az eredmény
   
AmidaBucu - Tag | 281 hsz       Online status #91494   2008.07.04 10:29 GMT+1 óra  
Nah izé megint. Probáltam irni egy specular lájtingos effektet de olyan érdekes eredmény lett belőle.
Kód:
float4x4 World;
float4x4 WVP;
texture tex;
float ac=15;
int nLight = 1;
float3 lPos = {0.0f,0.0f,0.0f};
float3 camPos;
float4 lSpec = {1.0f,1.0f,1.0f,1.0f};
float4 lDiff = {1.0f,1.0f,1.0f,1.0f};

sampler diff = sampler_state
{
Texture = <tex>;
MinFilter = LINEAR;
MipFilter = LINEAR;
MagFilter = LINEAR;
};

struct in_vs
{
float4 pos : POSITION;
float3 normal : NORMAL;
float2 tex : TEXCOORD0;
};

struct out_vs
{
float4 pos : POSITION;
float2 tex : TEXCOORD0;
float4 diff : TEXCOORD1;
float4 spec : TEXCOORD2;
};

out_vs VS(in_vs In)
{
out_vs Out;
float4 pos = mul(World, In.pos);
float3 toL = normalize(lPos-pos);
float3 toC = normalize(camPos-pos);
float3 halfv = normalize(toC+toL);
float d = dot(halfv, In.normal);
d = max(d,0);

Out.spec = pow(d,ac) * lSpec;
Out.diff = lDiff * dot(normalize(toL),normalize(In.normal));
Out.pos = mul(In.pos, WVP);
Out.tex = In.tex;
return Out;
}

float4 PS(out_vs In) : COLOR0
{
float4 col = tex2D(diff, In.tex.xy)*In.diff+In.spec;
return col;
}

technique Simple
{
    pass Pass0
    {
        VertexShader = compile vs_2_0 VS();
        PixelShader = compile ps_2_0 PS();
    }
}

Má megint mit lámáztam el? :'(

Idézet
kuzanth :
Ezt a kérdést nem teljesen értem. Mi az, hogy nem ismered a típusát? Csak a típussal kompatibilis értéket adhatsz át, nem? De még sosem találkoztam ilyennel, hogy nem ismerem a típust. Valami példát tudsz adni, mert érdekelne?



Tényleg nincs ilyen eset, csak nem gondltam végig amit akartam De még jólgyühet...

Ezt a hozzászólást AmidaBucu módosította (2008.07.04 10:43 GMT+1 óra, ---)
Ami tönkremehet, az tönkre is megy!!!
   
Asylum - Törzstag | 5440 hsz       Online status #91090   2008.07.01 16:29 GMT+1 óra  
ami meg nem nehéz tekintve, hogy vektorregiszterekröl van szo
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
TPG - Tag | 3402 hsz       Online status #91050   2008.07.01 13:05 GMT+1 óra  
Idézet
AmidaBucu :
Az jó erre? Mekkora egy r*hadt láma vagyok....
Köszi


Ha ismered a változó nevét meg az feltöltendő adat méretét akkor ez a megoldás.
Reality is almost always wrong. - House

   
AmidaBucu - Tag | 281 hsz       Online status #91038   2008.07.01 12:37 GMT+1 óra  
Az jó erre? Mekkora egy r*hadt láma vagyok....
Köszi
Ami tönkremehet, az tönkre is megy!!!
   
TPG - Tag | 3402 hsz       Online status #90955   2008.07.01 09:29 GMT+1 óra  
Idézet
AmidaBucu :
Hello! Nem találtam rá sehol.
Ha egy effektet változójának akarok értéket adni dxben, aminek nem tudom a típusát, akkor csak semantic címkével lehet ezt megtenni? És ha igen akkor meik fügvény az? Vagy lehet máshogy is?


ID3DXEffect:: SetValue?
Reality is almost always wrong. - House

   
Kuz - Törzstag | 4455 hsz       Online status #90924   2008.07.01 08:24 GMT+1 óra  
Ezt a kérdést nem teljesen értem. Mi az, hogy nem ismered a típusát? Csak a típussal kompatibilis értéket adhatsz át, nem? De még sosem találkoztam ilyennel, hogy nem ismerem a típust. Valami példát tudsz adni, mert érdekelne?
A memóriám már nem a régi. És ráadásul még a memóriám sem a régi...
Az élet attól szép, hogy bármi megtörténhet. És attól szar, hogy meg is történik...
Ha az egyik szinkronúszó megfullad, mit csinál a többi???

   
AmidaBucu - Tag | 281 hsz       Online status #90909   2008.07.01 07:59 GMT+1 óra  
Hello! Nem találtam rá sehol.
Ha egy effektet változójának akarok értéket adni dxben, aminek nem tudom a típusát, akkor csak semantic címkével lehet ezt megtenni? És ha igen akkor meik fügvény az? Vagy lehet máshogy is?
Ami tönkremehet, az tönkre is megy!!!
   
newversion - Tag | 197 hsz       Online status #89340   2008.06.14 10:21 GMT+1 óra  
itt van egy egész használható

http://www.punkuser.net/vsm/vsm_paper.pdf
   
newversion - Tag | 197 hsz       Online status #89324   2008.06.14 03:25 GMT+1 óra  
azért vicces vagy, ez majdnem olyan kérdés volt hogy kell autot csinálni
milyen árnyékot, milyen minöségben, hány objectre , hány fps-el, milyen gépre, milyen shaderrel stb...
ha ezekre válaszolsz akkor talán tudunk irányt mutatni
   
Frissebbek | Korábbi postok
[1] [2] [3] [4] [5] [6] [7] [8] > 9 < [10] [15] [20] [22]