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:    2186
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]
TPG - Tag | 3402 hsz       Online status #32447   2006.10.16 03:52 GMT+1 óra  
Idézet
kuzanth :
Szívesen elküldöm a kódot, ha az segít, bár elég...hogy is mondjam...csúnya a külalak (egyelőre csak azt akartam, h fusson, aztán majd utánna szépítgetem.). A teljes kód zippelve 160k, az *.ex-et át kell nevezni *.exe-re. Elvileg ez lesz az


Már vizsgálom.
Reality is almost always wrong. - House

   
Kuz - Törzstag | 4455 hsz       Online status #32441   2006.10.16 02:40 GMT+1 óra  
Szívesen elküldöm a kódot, ha az segít, bár elég...hogy is mondjam...csúnya a külalak (egyelőre csak azt akartam, h fusson, aztán majd utánna szépítgetem.). A teljes kód zippelve 160k, az *.ex-et át kell nevezni *.exe-re. Elvileg ez lesz az
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???

   
TPG - Tag | 3402 hsz       Online status #32437   2006.10.16 02:21 GMT+1 óra  
Idézet
kuzanth :
Hát elvileg ez lett az eredménye az átiratnak . Valamit nagyon, de nagyon el......


Hmm egyenlőre próbálom felfogni mit ábrázol a kép, de nekem egyenlőre átkozottul ismerős valahonnan. Megpróbálom reprodukálni.
Reality is almost always wrong. - House

   
Kuz - Törzstag | 4455 hsz       Online status #32432   2006.10.16 01:45 GMT+1 óra  
Nézzük már meg a kódot, mert sztem zsír ugyanazt csinálom, mint ami a cikkben volt, de még mindig nem műkszik.

Kód:
...
//ez itt az osztály konstruktora

vb = new VertexBuffer(dev, 6*sizeof(float)+sizeof(uint), Usage.None, PointerVertexFVF, Pool.Default); //lehet, hogy itt lesz gond, mert C#-ban nem lehet előre meg nem határozott méretű vb-t létrehozni

D3DPOINTERVERTEX[] d3dpv = new D3DPOINTERVERTEX[4];
                        int[] array = new int[4];
                        vb.Lock(0, typeof(D3DPOINTERVERTEX), LockFlags.Discard, array);
                        d3dpv[0].color = d3dpv[1].color = d3dpv[2].color = d3dpv[3].color = 0xFFFFFFFF;
                        d3dpv[0].p = new Vector4(0.0f, 767.0f, 0.0f, 1.0f);
                        d3dpv[0].tu = 0.0f; d3dpv[0].tv = 1.0f;
                        d3dpv[1].p = new Vector4(0.0f, 0.0f, 0.0f, 1.0f);
                        d3dpv[1].tu = 0.0f; d3dpv[1].tv = 0.0f;
                        d3dpv[2].p = new Vector4(1023.0f, 767.0f, 0.0f, 1.0f);
                        d3dpv[2].tu = 1.0f; d3dpv[2].tv = 1.0f;
                        d3dpv[3].p = new Vector4(1023.0f, 0.0f, 0.0f, 1.0f);
                        d3dpv[3].tu = 1.0f; d3dpv[3].tv = 0.0f;
                        vb.Unlock();
...

...
//A renderen belül itt jön egy szimpla mátrix beállítás, és egy shaderes textúrázás, majd rajzolás, azaz semmi extra. Ezután jön a PP.

Texture rendertargettexure = new Texture(dev, dev.DisplayMode.Width, dev.DisplayMode.Height, 1, Usage.RenderTarget, Format.X8R8G8B8,
                    Pool.Default);
                oldrendersurface = dev.GetRenderTarget(0);
rendersurface = rendertargettexure.GetSurfaceLevel(0);
dev.StretchRectangle(oldrendersurface, renderrect, rendersurface, renderrect, TextureFilter.None);
dev.Clear(ClearFlags.Target | ClearFlags.ZBuffer,
                    System.Drawing.Color.FromArgb(0, 0, 0), 1.0f, 0);
                dev.SetRenderState(RenderStates.ZEnable, false);
                dev.SetRenderState(RenderStates.Lighting, false);

dev.BeginScene();
                passes = effect1.Begin(0);

                for (int ef = 0; ef < passes; ef++)
                {
                    effect1.SetValue("WorldViewProj", mat * view * proj);
                    effect1.SetValue("blurvalue", 3.0f);
                    effect1.SetValue("bloomvalue", 1.5f);
                    effect1.SetValue("meshtexture", rendertargettexure);
                    dev.SetStreamSource(10, vb, 10 * sizeof(float) + sizeof(uint)); //ez kérdéses
                    dev.VertexFormat = PointerVertexFVF; //és ez is kérdéses
                    effect1.BeginPass(ef);
                    dev.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2);
                    effect1.EndPass();
                }
                effect1.End();
                //dev.SetRenderState(RenderStates.ZEnable, true);
                //dev.SetRenderState(RenderStates.Lighting, true);
                dev.EndScene();

//Ezek után már csak a textek kiírása van hátra, tehát szintén semmi extra.


Mit rontok el?
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???

   
Kuz - Törzstag | 4455 hsz       Online status #32249   2006.10.13 02:19 GMT+1 óra  
Hát elvileg ez lett az eredménye az átiratnak . Valamit nagyon, de nagyon el......
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???

   
TPG - Tag | 3402 hsz       Online status #32003   2006.10.09 08:51 GMT+1 óra  
Idézet
kuzanth :
Úgy értem, hogy amikor megvan a bloom effect, a végeredményt kell ráhúzni a quadra, nem? Tehát megy a sima render, felette meg a quad, amin már a bloomos effect van. Ha nem akkor félreértettem az egész PostP.-t....


Ha jól értem jah. Fogod az RT texet amit bloomolni akarsz rápakolod a fullscreen quad-ra, ráengeded a bloom shadert és renderelsz. A ZBuffer-t meg kilövöd mert tök felesleges és csak bekavarhat.
Reality is almost always wrong. - House

   
Kuz - Törzstag | 4455 hsz       Online status #32002   2006.10.09 08:45 GMT+1 óra  
Úgy értem, hogy amikor megvan a bloom effect, a végeredményt kell ráhúzni a quadra, nem? Tehát megy a sima render, felette meg a quad, amin már a bloomos effect van. Ha nem akkor félreértettem az egész PostP.-t....
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???

   
TPG - Tag | 3402 hsz       Online status #32001   2006.10.09 08:36 GMT+1 óra  
Idézet
kuzanth :
Biztos a vertexbuffert csinálom meg rosszul, de egyelőre csak fekete hátteret látok, ill. néha-néha bejön egy színes háromszög-szerű izé (de legalább már nincs hiba üzenet...). Az előző kérdésem pedig nem a bloomhoz kapcsolódott, hanem a megjelenítéséhez.


Azt próbáltad már hogy csak egy sima texet húzol a fullscreen quadra? Az eredményeiből elég sokmindenre lehet következtetni.
Egyébként a bloom megjelenítése nem a bloomhoz kapcsolódik? Itt is az a lényeg hogy a bloomot nem az objektumokon hajtjuk végre hanem post process az elkészült 64/128bites lebegőpontos textúrán elég sok menetben (ugyebár a bloom annyiban különbözik a HDR-től hogy nincs luminance calc, hanem fix lum értékkel dolgoznak csak bright pass, exposure conrtol/tone mapping meg bloom és star filter van).
Reality is almost always wrong. - House

   
Kuz - Törzstag | 4455 hsz       Online status #31994   2006.10.09 08:07 GMT+1 óra  
Biztos a vertexbuffert csinálom meg rosszul, de egyelőre csak fekete hátteret látok, ill. néha-néha bejön egy színes háromszög-szerű izé (de legalább már nincs hiba üzenet...). Az előző kérdésem pedig nem a bloomhoz kapcsolódott, hanem a megjelenítéséhez.
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???

   
TPG - Tag | 3402 hsz       Online status #31793   2006.10.06 07:36 GMT+1 óra  
Idézet
kuzanth :
Sajna még nem tudtam tesztelni, de közben eszembe jutott egy dolog (hívhatjuk problémának is ). Ha csak bizonyos dolgokat akarunk bloomolni, akkor ugye azokkal külön kell foglalkozni. Ezzel nincs is baj. De mi van akkor, ha egy bloomos modellt FÉLIG(!!!) eltakar egy nem bloomos??? A bloom nem fog "átlátszani" az elöl lévő modellen??? Itt ugyanis már ki van kapcsolva a ZBuffer, szóval még azt sem tudnám mondani, hogy majd ott eldől, hogy mi látszódjon és mi ne... Ha sikerül előcsalnom az effectet, ezt mindenképp megpróbálom, de addig érdekelnek a vélemények!


Szerintem félreérted a bloom fogalmát teljesen, most nem állok neki megmagyarázni mivel tervezem az egész bloom/HDR témát cikk keretein belül kitárgyalni még a hétvégén (meg be akarom fejezni a shaderes cikk második részét és belekezdeni egy Deffered Shading-et tárgyalóba, márcsak az a kérdés mi fog ebből megvalósulni).
Reality is almost always wrong. - House

   
Kuz - Törzstag | 4455 hsz       Online status #31781   2006.10.06 05:00 GMT+1 óra  
Sajna még nem tudtam tesztelni, de közben eszembe jutott egy dolog (hívhatjuk problémának is ). Ha csak bizonyos dolgokat akarunk bloomolni, akkor ugye azokkal külön kell foglalkozni. Ezzel nincs is baj. De mi van akkor, ha egy bloomos modellt FÉLIG(!!!) eltakar egy nem bloomos??? A bloom nem fog "átlátszani" az elöl lévő modellen??? Itt ugyanis már ki van kapcsolva a ZBuffer, szóval még azt sem tudnám mondani, hogy majd ott eldől, hogy mi látszódjon és mi ne... Ha sikerül előcsalnom az effectet, ezt mindenképp megpróbálom, de addig érdekelnek a vélemények!
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???

   
TPG - Tag | 3402 hsz       Online status #31645   2006.10.04 06:48 GMT+1 óra  
Idézet
kuzanth :
Már majdnem megcsináltam a működő kódot, amikor észrevettem, hogy valamilyen egyéni vertexbuffert kéne használni. A cikkedben ennyit látok : D3DSCREENVERTEX. Ennek viszont nem látom a megvalósítását. Bár magamtól próbáltam olyan vb-t csinálni, ami a kódból valószínűnek tűnik, de amikor beírtam a "4*sizeof()"-ot, azt mondta, hogy ez unmanaged kódhoz vezet, mert nincs pontos kezdő méret. Megtennéd, hogy bedobod ide a vb-hez tartozó kódot?! Kösze! Ja és kéne a felhasználni kívánt vertexek típusa is (én vmi ilyet írtam, mert C#-ban nem volt olyan típus, mint a cikkedben : vertextype.Position | vertextype.Texture1). Ez így nem tudom jó-e...?


Én egy picit univerzálisabb FVF-et használok:

struct D3DPOINTERVERTEX
{
D3DXVECTOR4 p;
DWORD color;
FLOAT tu, tv; //lehetne D3DXVECTOR2 is de nekem ez valamiért megragadt a kódban
};
const DWORD PointerVertexFVF = (D3DFVF_XYZW|D3DFVF_DIFFUSE|D3DFVF_TEX1);

A Diffuse color jól jöhet bármikor de lényegében elhagyható, a D3DFVF_XYZW meg lehet még D3DFVF_XYZRHW is de nem D3DFVF_XYZ (a D3DFVF_XYZW és a D3DFVF_XYZRHW is már transzformált koordinátákat feltételez a vertex bufferben tehát nem fogja végigszorozni a három mátrix-al). Gondolom innen már pillanatok alatt át tudod tolni kódot C# alá.
Reality is almost always wrong. - House

   
Kuz - Törzstag | 4455 hsz       Online status #31632   2006.10.04 03:13 GMT+1 óra  
Már majdnem megcsináltam a működő kódot, amikor észrevettem, hogy valamilyen egyéni vertexbuffert kéne használni. A cikkedben ennyit látok : D3DSCREENVERTEX. Ennek viszont nem látom a megvalósítását. Bár magamtól próbáltam olyan vb-t csinálni, ami a kódból valószínűnek tűnik, de amikor beírtam a "4*sizeof()"-ot, azt mondta, hogy ez unmanaged kódhoz vezet, mert nincs pontos kezdő méret. Megtennéd, hogy bedobod ide a vb-hez tartozó kódot?! Kösze! Ja és kéne a felhasználni kívánt vertexek típusa is (én vmi ilyet írtam, mert C#-ban nem volt olyan típus, mint a cikkedben : vertextype.Position | vertextype.Texture1). Ez így nem tudom jó-e...?
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???

   
TPG - Tag | 3402 hsz       Online status #31327   2006.09.29 07:30 GMT+1 óra  
Idézet
kuzanth :
Mivel sikerült megoldanom ezt a textúrás meg surface-es problémát, jó lenne tisztázni, hogy pontosan milyen lépések kellenek a glow/bloom (már azt se tudom melyik, úgy össze vagyok kavarva) effecthez. Ez így jó? :
1. Két surface deklarálása (globálisként, vagy elég lokálisként a Render fgv-ben?)
2. Mátrix beállítás (world, view, proj)
3. device.Clear(..) + RenderStates.ZEnable = true
4. BeginScene() - EndScene() közé a kirajzolás (ha ezt egy textúrázó effect csinálja, kell a device.SetTexture()?)
5. Texture rendertargettexure = new Texture(dev, dev.DisplayMode.Width, dev.DisplayMode.Height, 1, Usage.RenderTarget, Format.X8R8G8B8,
Pool.Default)
6. oldrendersurface = dev.GetRenderTarget(0)
7. rendersurface = rendertargettexure.GetSurfaceLevel(0)
8. dev.StretchRectangle(oldrendersurface, renderrect, rendersurface, renderrect, TextureFilter.None) //renderrect a Rectangle, mert a null-t valamiért nekem nem fogadja el
9. dev.Clear(ClearFlags.Target | ClearFlags.ZBuffer,
System.Drawing.Color.FromArgb(0, 0, 0), 1.0f, 0) + dev.SetRenderState(RenderStates.ZEnable, true);
10. BeginScene() után az effectes kirajzolás, ahol az effect.SetValuenak át kell adni a rendertargettexture-t, mint textúrát + az egyéb változókat? Itt, ha megintcsak normál kirajzolásról van szó, kell a dev.SetTexture() a DrawSubset elé?
11. dev.EndScene() + dev.Present();


A kérdésekre meg külön válaszolok:
1. attól függ hol akarodv még használni ezeket a surface-eket
4. nem kell device.SetTexture() effecteknél viszont ilyenkor az effekt Value-ját kell használni. Működik a device-es SetTexture-el is kicsit másképp de sztem az elég fapados módszer.
10. Device.SetTexture() Fixed Function Pipeline-nál kell, programmable pipeline-nál (shaderek) az effect-en keresztül érdemes beálltani a texturát.
Reality is almost always wrong. - House

   
TPG - Tag | 3402 hsz       Online status #31326   2006.09.29 07:24 GMT+1 óra  
Idézet
kuzanth :
Mivel sikerült megoldanom ezt a textúrás meg surface-es problémát, jó lenne tisztázni, hogy pontosan milyen lépések kellenek a glow/bloom (már azt se tudom melyik, úgy össze vagyok kavarva) effecthez. Ez így jó? :
1. Két surface deklarálása (globálisként, vagy elég lokálisként a Render fgv-ben?)
2. Mátrix beállítás (world, view, proj)
3. device.Clear(..) + RenderStates.ZEnable = true
4. BeginScene() - EndScene() közé a kirajzolás (ha ezt egy textúrázó effect csinálja, kell a device.SetTexture()?)
5. Texture rendertargettexure = new Texture(dev, dev.DisplayMode.Width, dev.DisplayMode.Height, 1, Usage.RenderTarget, Format.X8R8G8B8,
Pool.Default)
6. oldrendersurface = dev.GetRenderTarget(0)
7. rendersurface = rendertargettexure.GetSurfaceLevel(0)
8. dev.StretchRectangle(oldrendersurface, renderrect, rendersurface, renderrect, TextureFilter.None) //renderrect a Rectangle, mert a null-t valamiért nekem nem fogadja el
9. dev.Clear(ClearFlags.Target | ClearFlags.ZBuffer,
System.Drawing.Color.FromArgb(0, 0, 0), 1.0f, 0) + dev.SetRenderState(RenderStates.ZEnable, true);
10. BeginScene() után az effectes kirajzolás, ahol az effect.SetValuenak át kell adni a rendertargettexture-t, mint textúrát + az egyéb változókat? Itt, ha megintcsak normál kirajzolásról van szó, kell a dev.SetTexture() a DrawSubset elé?
11. dev.EndScene() + dev.Present();


Glow:
Rendertarget tex létrehozása;
Fullscreen Quad létrehozása;

1 render fázis:
Clear();
BeginScene();
RenderObjects(); //mártixok texek shaderek beállítása és render
EndScene();

2 render fázis:
Z kikapcs;
Két surface deklarálása és kinullozása;
Az egyikbe lekéred a backbuffert a másikba a tex nulladik mip szintjét.
StrechRect-el összepasszintod őket.
BeginScene();
Effect->SetTexture(a render target);
Begin();
BeginPass(); //itt most az egyszerűségért elhagyom a for ciklust de ettől még kell
RenderQuad();
EndPass();
End();
EndScene();
Z bekapcs;
Present();
Reality is almost always wrong. - House

   
TPG - Tag | 3402 hsz       Online status #31325   2006.09.29 07:15 GMT+1 óra  
Idézet
kuzanth :
Jól tudom, hogy a bloom csak az objetumon belül látszik, a glow, pedig azon kívül is (tehát a bloom az objektumon lévő textúra színeit erősíti, a glow meg fénylővé teszi)? Ez így elég fapados megfogalmazás volt, de asszem érthető a kérdés...


A Bloom is meg a Glow is látszik az objektumon kívül is annyi a különbséghogy Glownál az objektum konstans saját színében izzik míg Bloomnál a fénytől izzik az objektum (a Bloom egy gyengített HDR, csak a luminance calc. hiányzik belőle).
Reality is almost always wrong. - House

   
Kuz - Törzstag | 4455 hsz       Online status #31307   2006.09.29 03:22 GMT+1 óra  
Jól tudom, hogy a bloom csak az objetumon belül látszik, a glow, pedig azon kívül is (tehát a bloom az objektumon lévő textúra színeit erősíti, a glow meg fénylővé teszi)? Ez így elég fapados megfogalmazás volt, de asszem érthető a kérdés...
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???

   
Kuz - Törzstag | 4455 hsz       Online status #31160   2006.09.28 03:19 GMT+1 óra  
Ezt azért kérdezem, mert egyelőre itt járok, de hiányzik az a fényeffectus, ami nem csak az objektumon belül szokott lenni, hanem kívül is. Vagy ez egy jó végeredmény? Ha igen, akkor ez most melyik effect ?
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???

   
Kuz - Törzstag | 4455 hsz       Online status #31159   2006.09.28 03:12 GMT+1 óra  
Mivel sikerült megoldanom ezt a textúrás meg surface-es problémát, jó lenne tisztázni, hogy pontosan milyen lépések kellenek a glow/bloom (már azt se tudom melyik, úgy össze vagyok kavarva) effecthez. Ez így jó? :
1. Két surface deklarálása (globálisként, vagy elég lokálisként a Render fgv-ben?)
2. Mátrix beállítás (world, view, proj)
3. device.Clear(..) + RenderStates.ZEnable = true
4. BeginScene() - EndScene() közé a kirajzolás (ha ezt egy textúrázó effect csinálja, kell a device.SetTexture()?)
5. Texture rendertargettexure = new Texture(dev, dev.DisplayMode.Width, dev.DisplayMode.Height, 1, Usage.RenderTarget, Format.X8R8G8B8,
Pool.Default)
6. oldrendersurface = dev.GetRenderTarget(0)
7. rendersurface = rendertargettexure.GetSurfaceLevel(0)
8. dev.StretchRectangle(oldrendersurface, renderrect, rendersurface, renderrect, TextureFilter.None) //renderrect a Rectangle, mert a null-t valamiért nekem nem fogadja el
9. dev.Clear(ClearFlags.Target | ClearFlags.ZBuffer,
System.Drawing.Color.FromArgb(0, 0, 0), 1.0f, 0) + dev.SetRenderState(RenderStates.ZEnable, true);
10. BeginScene() után az effectes kirajzolás, ahol az effect.SetValuenak át kell adni a rendertargettexture-t, mint textúrát + az egyéb változókat? Itt, ha megintcsak normál kirajzolásról van szó, kell a dev.SetTexture() a DrawSubset elé?
11. dev.EndScene() + dev.Present();
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???

   
Kuz - Törzstag | 4455 hsz       Online status #31050   2006.09.27 07:30 GMT+1 óra  
SDK : 2006 február (de már úton van az augusztusi). A .Net-et most töltöttem le úgy 3 hete. Hibakezelés (egyelőre) sehol sincs, így ha vmi hiba van, fel kell jönnie egy messageboxnak, hogy "A progiban hiba volt...", majd ok-ra kattintva kilépés. Egyébként a textúrás dolgot megoldottam, a Managed DX topicban frissítettem a dolgot. Ha megtennéd, hogy megnézed és kitalálunk valamit...
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???

   
TPG - Tag | 3402 hsz       Online status #31049   2006.09.27 07:19 GMT+1 óra  
Idézet
kuzanth :
Minden szépen elindul (hibaüzenet nélkül), csak nem látszik a shader-hatás. Ha esetleg valakinek van ATI kártyája (ha pont x1300xt az még jobb ), esetleg elküldhetem neki a progit, és ha jelentkezett a hiba, csinál egy screenshotot, és mindenki látni fogja, hogy mi történt. Az alul megadott linken látszik, h a 6600GT-n hogy néz ki a dolog (elvileg ez a jó eredmény...).


És egyik fv sem dob semmit ami a shaderek körül dolgozik? Itt nem feltétlen hibaüzenetre meg hibával kifagyásra gondolok hanem pl egyszerű lekezelt exception-re mondjuk. A másik meg hogy melyik SDK-val van fordítva a progi (hónap+év)?
Reality is almost always wrong. - House

   
TPG - Tag | 3402 hsz       Online status #31048   2006.09.27 07:15 GMT+1 óra  
Idézet
kuzanth :
Megnéztem a PostProcess cikkedet. Sajnos C#-on belül valamiért nem műkszik a Stretch és a texture.GetSurfaceLevel(0)!!! Mindig elszáll vmi hibával a progi. Erre van ötlete valakinek?


Olyan nincs hogy nem működik, egyértelmű hogy a textúrával van valami elcseszve. Az elszáll itt konkrétan az jelenti hogy kihal a desktopra? Ha igen akkor debug fordítással nem próbáltad még megkeresni a hibát?
Reality is almost always wrong. - House

   
Kuz - Törzstag | 4455 hsz       Online status #31043   2006.09.27 07:05 GMT+1 óra  
Cseles a gmail és észreveszi (már próbáltam)...
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???

   
Csaba42 - Törzstag | 946 hsz       Online status #31039   2006.09.27 06:56 GMT+1 óra  
Idézet
kuzanth :
Most már végülis mind1, mert nem freemail . Viszont a .Net mindemképp kell a fordításhoz, mert az exe-t le kell törölnöm, mert exe-t nem küld a gmail (vagy átnevezem, és akkor csak az exe, és a sok-sok resource megy, így megsprórolunk néhány byte-ot )...


És mi lenne, ha összetömörítenéd a fájlokat, s így csak azt a .zip vagy .rar fájlt küldenéd?

   
Kuz - Törzstag | 4455 hsz       Online status #31032   2006.09.27 06:10 GMT+1 óra  
Most már végülis mind1, mert nem freemail . Viszont a .Net mindemképp kell a fordításhoz, mert az exe-t le kell törölnöm, mert exe-t nem küld a gmail (vagy átnevezem, és akkor csak az exe, és a sok-sok resource megy, így megsprórolunk néhány byte-ot )...
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???

   
Csaba42 - Törzstag | 946 hsz       Online status #31031   2006.09.27 06:04 GMT+1 óra  
A Freemail-cím összesen 25 MB adatot tud tárolni, egyszerre egy fájl mérete (amit küldesz) 5 MB lehet.

   
KergeDelfin - Törzstag | 667 hsz       Online status #31024   2006.09.27 04:54 GMT+1 óra  
Nem, dehogy. Legalább egy jó indok arra hogy végre letöltsem.
Ore wa... yurusaretaintadomo... un... Ore wa yurusaretai...

Isles of Tranquility - Ecco fanoknak kötelező
   
Kuz - Törzstag | 4455 hsz       Online status #31023   2006.09.27 04:51 GMT+1 óra  
Oooopszzz.... így elsőre freemail-nek tűnt... Viszont a progihoz VS2005C# kell. Remélem ez nem gond?!
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???

   
KergeDelfin - Törzstag | 667 hsz       Online status #31022   2006.09.27 04:48 GMT+1 óra  
Nem tudom, hogy tud a freemail fogadni 5mb adatot, de ha megnézed a mailcímem, nem is freemail hanem FIBERMAIL, nagy különbség. Oks, akkor holnap.
Ore wa... yurusaretaintadomo... un... Ore wa yurusaretai...

Isles of Tranquility - Ecco fanoknak kötelező
   
Kuz - Törzstag | 4455 hsz       Online status #31018   2006.09.27 04:14 GMT+1 óra  
KergeDelfin : tud fogadni a freemail 5mb adatot ? Én úgy tudom, h nem...Holnap majd elküldöm, mert most nincs nálam (kellett a hely az augusztusi sdk-nak )...
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???

   
KergeDelfin - Törzstag | 667 hsz       Online status #30948   2006.09.26 06:30 GMT+1 óra  
Idézet
kuzanth :
Minden szépen elindul (hibaüzenet nélkül), csak nem látszik a shader-hatás. Ha esetleg valakinek van ATI kártyája (ha pont x1300xt az még jobb ), esetleg elküldhetem neki a progit, és ha jelentkezett a hiba, csinál egy screenshotot, és mindenki látni fogja, hogy mi történt. Az alul megadott linken látszik, h a 6600GT-n hogy néz ki a dolog (elvileg ez a jó eredmény...).


Nekem egy radeon9600pro-m van, ha átdobod, megnézném.
msnm: flipper@fibermail.hu, este leszek elérhető.
Nálam hasonló probléma lépett fel glsl-el fordított irányban. (a saját kártyámon ment, Gef6600-on nem)
Ore wa... yurusaretaintadomo... un... Ore wa yurusaretai...

Isles of Tranquility - Ecco fanoknak kötelező
   
Kuz - Törzstag | 4455 hsz       Online status #30916   2006.09.26 02:20 GMT+1 óra  
Megnéztem a PostProcess cikkedet. Sajnos C#-on belül valamiért nem műkszik a Stretch és a texture.GetSurfaceLevel(0)!!! Mindig elszáll vmi hibával a progi. Erre van ötlete valakinek?
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???

   
Kuz - Törzstag | 4455 hsz       Online status #30915   2006.09.26 02:06 GMT+1 óra  
Minden szépen elindul (hibaüzenet nélkül), csak nem látszik a shader-hatás. Ha esetleg valakinek van ATI kártyája (ha pont x1300xt az még jobb ), esetleg elküldhetem neki a progit, és ha jelentkezett a hiba, csinál egy screenshotot, és mindenki látni fogja, hogy mi történt. Az alul megadott linken látszik, h a 6600GT-n hogy néz ki a dolog (elvileg ez a jó eredmény...).
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???

   
TPG - Tag | 3402 hsz       Online status #30827   2006.09.25 05:46 GMT+1 óra  
Idézet
kuzanth :
Technikai kérdés következik : nekem GeForce6600GT karim van, és az eddigi effectelős progikat is csak ezen a gépen próbáltam ki. A napokban viszont egy x1300XT (remélem jól írtam a típust)karin akartuk megnézni a progit, és sem a normal mapping nem volt észrevehető, sem pedig a vízfelszín nem jelent meg(ezt akartuk tesztelni, de se csillogás, se vízfelszín, csak egy-két fehéres csík...). Ezek szerint a HLSL csak GeForce kártyákon műkszik hibátlanul, és az ATI-kon nem? Esetleg az utasításkészlet nem egyezik meg teljesen, és ATI-hoz más utasításokat kellene használni (mondjuk ebben az esetben vmi hibával el kellett volna szállnia a proginak, nem?)?


Ilyesmi nincs, a HLSL szabvány szerinti nyelv és a Shader Model-ek is szabványok, nem különböznek sehol sem. Semmi hibát nem dob renderelésnél vagy valami ilyesmi? RefRast-al működik?
Reality is almost always wrong. - House

   
TPG - Tag | 3402 hsz       Online status #30825   2006.09.25 05:43 GMT+1 óra  
Idézet
kuzanth :
Így többszöri átolvasás után megértettem, hogy ugyanezt csinálom én is...De ha az 1-es opció a nyerő, akkor kell egy külső ciklus, ami végigmegy az összes effectelendő mesh-en, nem? Valahogy így :

Kód:
effect.Technique = "..."; // "..." = a tech. neve, de ez most lényegtelen
int passes = effect.Begin(0);
effect.SetValue(...); //ide jönnek azok, amik nem változnak
...
for(int i=0;i<meshlist.Count;i++) //meshlist most pl egy arraylist a mesh-ek számára
{
   effect.SetValue(...); //ide jönnek azok, amik változnak

   for(int j=0;j<passes;j++) //minden meshre ráküldjük a passokban található effectet
   {
      effect.BeginPass(j);
         //ide meg jöhet a drawsubset()
      effect.EndPass(j);
   }
}
effect.End();



Hopp látom multkor elfelejtettem válaszolni (el volt tárolva a memóriámban de ezek szerint nem sokáig ). Tehát igen ez így lerendereli ugyanazzal a shaderrel az összes mesht. Ez mellé két féle képpen lehet motion blur-t tolni, vagy az oldschool módszerrel hogy rengetegszer újra rendereled a mesheket az előző world matrixokkal és minél öregebb a mátrix annál átlátszóbbá teszed a renderelt mesht. Eléggé favágó módszer. Vagy használod a postprocessing előnyeit, itt újra két választás van: vagy azt csinálod meg ami az SDK-ban Pixel Motion blur néven fut vagy bizonyos számú framet eltárolsz visszamenőleg és ezeket mosod össze.
Reality is almost always wrong. - House

   
Kuz - Törzstag | 4455 hsz       Online status #30815   2006.09.25 04:16 GMT+1 óra  
Technikai kérdés következik : nekem GeForce6600GT karim van, és az eddigi effectelős progikat is csak ezen a gépen próbáltam ki. A napokban viszont egy x1300XT (remélem jól írtam a típust)karin akartuk megnézni a progit, és sem a normal mapping nem volt észrevehető, sem pedig a vízfelszín nem jelent meg(ezt akartuk tesztelni, de se csillogás, se vízfelszín, csak egy-két fehéres csík...). Ezek szerint a HLSL csak GeForce kártyákon műkszik hibátlanul, és az ATI-kon nem? Esetleg az utasításkészlet nem egyezik meg teljesen, és ATI-hoz más utasításokat kellene használni (mondjuk ebben az esetben vmi hibával el kellett volna szállnia a proginak, nem?)?
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???

   
Kuz - Törzstag | 4455 hsz       Online status #30814   2006.09.25 04:05 GMT+1 óra  
Kösze (TPG-nek is )! Remélem C#-ra egy az egyben át lehet ültetni...
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???

   
Csaba42 - Törzstag | 946 hsz       Online status #30811   2006.09.25 03:42 GMT+1 óra  
Idézet
kuzanth :
Köv. kérdés : hogyan lehet real-time elérni a lerenderelt "képet", mint "textúrát"? Feltételezem nem a surfaceloader.save ill. savetostream-mel, ezzel ugyanis egy képet lehet lementeni (mint ahogy azt a screenshot-nál is használom), és igényeimhez sajnos baromi lassú. Én ugyanis azt szeretném elérni, hogy amikor megtörtént/megtörténik a renderelés, a kész képet szeretném manipulálni, majd az eredményt megjeleníteni a képernyőn. Tehát valahogy így : backbufferből kinyerni a képet, manipulálni a képet, majd azt visszaírni a backbufferbe (esetleg rögtön a frontba, bár asszem ezért van a device.Present()...). Remélem érthető volt a kérdésem. Hangsúlyoznám, hogy nem a screenshot miatt kell, mert az már megvan, de ide sajnos ez lassú, mert egy jpg-t is kb 1,5-2 mp alatt csinál meg, én pedig szeretném az eddigi legalább 200fps-t fenntartani, ezért gondoltam, hogy valami real-time manipuláció segítene!


Ajánlom figyelmedbe TheProGamer cikkét a PostProcessingről, abban (már ha még jól emlékszem a cikk tartalmára) megtalálod a megfelelő választ a kérdésedre!

   
Kuz - Törzstag | 4455 hsz       Online status #30809   2006.09.25 03:32 GMT+1 óra  
Köv. kérdés : hogyan lehet real-time elérni a lerenderelt "képet", mint "textúrát"? Feltételezem nem a surfaceloader.save ill. savetostream-mel, ezzel ugyanis egy képet lehet lementeni (mint ahogy azt a screenshot-nál is használom), és igényeimhez sajnos baromi lassú. Én ugyanis azt szeretném elérni, hogy amikor megtörtént/megtörténik a renderelés, a kész képet szeretném manipulálni, majd az eredményt megjeleníteni a képernyőn. Tehát valahogy így : backbufferből kinyerni a képet, manipulálni a képet, majd azt visszaírni a backbufferbe (esetleg rögtön a frontba, bár asszem ezért van a device.Present()...). Remélem érthető volt a kérdésem. Hangsúlyoznám, hogy nem a screenshot miatt kell, mert az már megvan, de ide sajnos ez lassú, mert egy jpg-t is kb 1,5-2 mp alatt csinál meg, én pedig szeretném az eddigi legalább 200fps-t fenntartani, ezért gondoltam, hogy valami real-time manipuláció segítene!
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???

   
Kuz - Törzstag | 4455 hsz       Online status #29411   2006.09.08 06:07 GMT+1 óra  
Így többszöri átolvasás után megértettem, hogy ugyanezt csinálom én is...De ha az 1-es opció a nyerő, akkor kell egy külső ciklus, ami végigmegy az összes effectelendő mesh-en, nem? Valahogy így :

Kód:
effect.Technique = "..."; // "..." = a tech. neve, de ez most lényegtelen
int passes = effect.Begin(0);
effect.SetValue(...); //ide jönnek azok, amik nem változnak
...
for(int i=0;i<meshlist.Count;i++) //meshlist most pl egy arraylist a mesh-ek számára
{
   effect.SetValue(...); //ide jönnek azok, amik változnak

   for(int j=0;j<passes;j++) //minden meshre ráküldjük a passokban található effectet
   {
      effect.BeginPass(j);
         //ide meg jöhet a drawsubset()
      effect.EndPass(j);
   }
}
effect.End();
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???

   
TPG - Tag | 3402 hsz       Online status #29408   2006.09.08 05:42 GMT+1 óra  
Idézet
kuzanth :
Ezek szerint nem minden effecttípust lehet egyszerre használni olyan formában, ahogy az 1. pontban leírtam?
Ill. a C# kód hogy néz ki több effect esetén?
1.
...
effect beállítások (SetValue, BeginPass(),...)
majd jöhet a mesh drawsubset-je
effect pass, és effect lezárás

És ezt annyiszor ismételni, ahány mesh van (azaz ciklikusan!) Vagy :

2.
effect1 beállítások (SetValue, BeginPass(),...)
effect2 beállítások (SetValue, BeginPass(),...)
...
effectn beállítások (SetValue, BeginPass(),...)
majd jöhet az összes mesh drawsubset-je
effect1 pass, és effect1 lezárás
effect2 pass, és effect2 lezárás
...
effectn pass, és effectn lezárás

Remélem ez most nem csak a számomra érthető ...


A második opcióval nem érdemes foglalkozni. Az első meg valahog úgy néz ki de leírom pontosan hogy megy:
Begin, ennek elmented a visszatérési értékét
SetValue, azon értékek beállítása amik nem változnak a passok közben
for ciklus -> for (int i = 0; i < passes; i++) ->passes a Begin által vissza adott érték
SetValue, azon értékek beállítása amik passok közben változnak
BeginPass
DrawSubset
EndPass
for ciklus zárása
End

Remélem nem csesztem el semmit a leírás során de megeshet
Reality is almost always wrong. - House

   
TPG - Tag | 3402 hsz       Online status #29405   2006.09.08 05:23 GMT+1 óra  
Idézet
kuzanth :
Ezek szerint nem minden effecttípust lehet egyszerre használni olyan formában, ahogy az 1. pontban leírtam?


Mindenfélét lehet ami ugyanazon dolgozik. Viszont míg a Normal mapping a modellen dolgozik addig a motion blur a már kész renderelt képen tehát abszolút más renderelési szakaszban dolgoznak.
Reality is almost always wrong. - House

   
Kuz - Törzstag | 4455 hsz       Online status #29404   2006.09.08 05:20 GMT+1 óra  
Ezek szerint nem minden effecttípust lehet egyszerre használni olyan formában, ahogy az 1. pontban leírtam?
Ill. a C# kód hogy néz ki több effect esetén?
1.
...
effect beállítások (SetValue, BeginPass(),...)
majd jöhet a mesh drawsubset-je
effect pass, és effect lezárás

És ezt annyiszor ismételni, ahány mesh van (azaz ciklikusan!) Vagy :

2.
effect1 beállítások (SetValue, BeginPass(),...)
effect2 beállítások (SetValue, BeginPass(),...)
...
effectn beállítások (SetValue, BeginPass(),...)
majd jöhet az összes mesh drawsubset-je
effect1 pass, és effect1 lezárás
effect2 pass, és effect2 lezárás
...
effectn pass, és effectn lezárás

Remélem ez most nem csak a számomra érthető ...
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???

   
TPG - Tag | 3402 hsz       Online status #29350   2006.09.07 08:16 GMT+1 óra  
Idézet
kuzanth :
Bár az eddigi problémáim még nem oldódtak meg, azért csak kérdezek mást is, hátha azzal sikerrel járok. Kérdésem : hogy lehet egyszerre kétféle effectet használni (pl egy normalmappinget és egy motion blurt, csak hogy nevén nevezzük a két konkrét effectet )? A következőket már próbáltam :

- 1 .fx file, benne egy technique két pass-al, első pass-ban vertexshader+normalmap pixelshader, a másodikban pedig a motion blur pixelshader
-1 .fx file, benne két technique egy-egy pass-al, első tech. vertexshader+normalmap pixelshader, a másodikban pedig a motion blur pixelshader (megnéztem úgy is, hogy mellé tettem mégegyszer a vertexshadert)
- 2 .fx file, bennük egy technique egy pass-al, első fileban vertexshader+normalmap pixelshader, a másodikban pedig a vertexsahder+motion blur pixelshader.

Ha ezek valamelyike jó, akkor már a C# kódban szúrtam el valamit...Ötletek, lehetőségek?


Az első lenne ilyenkor a hatásos viszont neked nem ez kell. A motion blur post-process effect kivéve ha Geometry Shader-el csinálod de gondolom nem.

Szerk: a Normal mappinges problémára egyenlőre nem tudok mondani semmit, nem is teljesen látom át a kódot de asszem írok egy ilyen shadert én is és ott kipróbálom a hibalehetőségeket.
Reality is almost always wrong. - House

   
Kuz - Törzstag | 4455 hsz       Online status #29320   2006.09.07 02:52 GMT+1 óra  
Bár az eddigi problémáim még nem oldódtak meg, azért csak kérdezek mást is, hátha azzal sikerrel járok. Kérdésem : hogy lehet egyszerre kétféle effectet használni (pl egy normalmappinget és egy motion blurt, csak hogy nevén nevezzük a két konkrét effectet )? A következőket már próbáltam :

- 1 .fx file, benne egy technique két pass-al, első pass-ban vertexshader+normalmap pixelshader, a másodikban pedig a motion blur pixelshader
-1 .fx file, benne két technique egy-egy pass-al, első tech. vertexshader+normalmap pixelshader, a másodikban pedig a motion blur pixelshader (megnéztem úgy is, hogy mellé tettem mégegyszer a vertexshadert)
- 2 .fx file, bennük egy technique egy pass-al, első fileban vertexshader+normalmap pixelshader, a másodikban pedig a vertexsahder+motion blur pixelshader.

Ha ezek valamelyike jó, akkor már a C# kódban szúrtam el valamit...Ötletek, lehetőségek?
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???

   
Kuz - Törzstag | 4455 hsz       Online status #29128   2006.09.04 05:30 GMT+1 óra  
Megnéztem +-al és *-al is, de egyik sem a várt eredményt adja. Ötletek?
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???

   
TPG - Tag | 3402 hsz       Online status #28727   2006.08.30 08:25 GMT+1 óra  
Normalizálni kellene miután a két normal map értéket összeadtad. Ha két normál vektort összeadsz az eredmény vektornak már nem 1 lesz a hossza. Egyébként még soha nem láttam olyan hogy egy objektumhoz két normal map tartozott. A másik dolog: minek szorzod 1-el a normal értékeket? Az 1-el szorzás felesleges művelet meg amúgyis 2-vel szokták.
Reality is almost always wrong. - House

   
Kuz - Törzstag | 4455 hsz       Online status #28413   2006.08.29 04:45 GMT+1 óra  
Nézd már meg ezt, plíz : csúúúúúnya! Asszem nem így kéne kinéznie... Behúzom a teljes shader kódot, mert lehet, hogy csak vmit rosszul írtam, de én tényleg nem látom, h mi a hiba. Elvileg ez egy normal mappinges dolog lenne, ami egy textúra esetén működik is.
Kód:
texture meshtexture1;
texture meshtexture2;
texture meshtexture1N;
texture meshtexture2N;
float4x4 ModelWorld;
float4x4 ModelViewProj;
float4 LightPos;

sampler MeshTextureSampler1 =
sampler_state
{
Texture = <meshtexture1>;
MipFilter = LINEAR;
MinFilter = LINEAR;
MagFilter = LINEAR;
};

sampler MeshTextureSampler2 =
sampler_state
{
Texture = <meshtexture2>;
MipFilter = LINEAR;
MinFilter = LINEAR;
MagFilter = LINEAR;
};

sampler MeshTextureSampler1N =
sampler_state
{
Texture = <meshtexture1N>;
MipFilter = LINEAR;
MinFilter = LINEAR;
MagFilter = LINEAR;
};

sampler MeshTextureSampler2N =
sampler_state
{
Texture = <meshtexture2N>;
MipFilter = LINEAR;
MinFilter = LINEAR;
MagFilter = LINEAR;
};

struct a2v
{
float4 Position  : POSITION0;
float3 Normal    : NORMAL;
float2 Texcoord0 : TEXCOORD0;
float2 Texcoord1 : TEXCOORD1;
float3 Tangent   : TANGENT;
float3 Binormal  : BINORMAL;
};

struct v2p
{
float4 Position  : POSITION0;
float2 Texcoord0 : TEXCOORD0;
float2 Texcoord1 : TEXCOORD1;
float3 LightVec  : TEXCOORD2;
float  Att : TEXCOORD3;
float3 vHalf : TEXCOORD4;
};

struct p2f
{
float4 Color : COLOR0;
};

void vs(in a2v IN, out v2p OUT)
{
OUT.Position = mul(IN.Position, mul(ModelWorld, ModelViewProj));

float4 posWorld = mul(IN.Position, ModelWorld);

float3 light = normalize(LightPos - posWorld);

float3 eye = normalize(posWorld - light);

float3 vHalf = normalize(eye - LightPos);

float3x3 TBNMatrix = float3x3(IN.Tangent, IN.Binormal, IN.Normal);

OUT.LightVec = mul(TBNMatrix, light);

OUT.vHalf = mul(TBNMatrix, vHalf);

OUT.Att = 1.0f/( 1.0f + ( 0.005f * distance(LightPos.xyz, posWorld) ) );

OUT.Texcoord0 = IN.Texcoord0;
OUT.Texcoord1 = IN.Texcoord1;
}

void ps(in v2p IN, out p2f OUT)
{
float4 color = tex2D(MeshTextureSampler1, IN.Texcoord0) +
       tex2D(MeshTextureSampler2, IN.Texcoord1);

float3 normal = (1.0f * tex2D(MeshTextureSampler1N, IN.Texcoord0).rgb - 1.0f) +
(1.0f * tex2D(MeshTextureSampler2N, IN.Texcoord1).rgb - 1.0f);

float3 light = normalize(IN.LightVec);

float3 vHalf = normalize(IN.vHalf);

float diffuse = saturate(dot(normal, light));

float specular = pow(dot( normal, IN.vHalf) , 16);

float dsColor = 2.0 * (diffuse * specular) + 1.0;

OUT.Color = IN.Att * color * dsColor;
}

technique RenderScene_v2_0
{
    pass P0
    {
vertexshader = compile vs_2_0 vs();
        pixelshader  = compile ps_2_0 ps();
    }
}

technique RenderScene_v3_0
{
    pass P0
    {
vertexshader = compile vs_3_0 vs();
pixelshader  = compile ps_3_0 ps();
    }
}
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???

   
TPG - Tag | 3402 hsz       Online status #28126   2006.08.28 07:44 GMT+1 óra  
Idézet
kuzanth :
Megnéztem...Biztos, h így kell ezt csinálni?

Kód:
OUT.Color = tex2D(MeshTextureSampler0, IN.Texcoord0) +
                           tex2D(MeshTextureSampler1, IN.Texcoord1);


Mert ez nem azt csinálja, amit kellene (vagy én szúrtam el vhol vmit...).


Ha a két textúrához két külön texcoord tartozik a mesh-nél igen ez az egyik módszer. De két textúra értékét milliónyi módszerrel lehet keverni, ez az egyik. Lehetne a két mintát szorozni, kivonni, osztani stb a DXSDK-ban egy rakás módszert onnan ki tudod választani a mgefelelőt. De a két leggyakoribb módszer a minták összeadása és szorzása.
Reality is almost always wrong. - House

   
Kuz - Törzstag | 4455 hsz       Online status #28064   2006.08.28 04:58 GMT+1 óra  
Megnéztem...Biztos, h így kell ezt csinálni?

Kód:
OUT.Color = tex2D(MeshTextureSampler0, IN.Texcoord0) +
                           tex2D(MeshTextureSampler1, IN.Texcoord1);


Mert ez nem azt csinálja, amit kellene (vagy én szúrtam el vhol vmit...).
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???

   
Frissebbek | Korábbi postok
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [15] > 20 < [22]