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

Pretender:    2498
szeki:    2440
Seeting:    2306
Geri:    2195
Orphy:    1893
Joga:    1791
Bacce:    1783
MaNiAc:    1735
ddbwo:    1654
syam:    1491
Frissebbek | Korábbi postok
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [15] [20] > 25 < [30] [35] [40] [45] [50] [55] [60] [65] [70] [75] [80] [82]
Pretender - Törzstag | 2498 hsz       Online status #172045   2012.01.05 19:00 GMT+1 óra  
előtte van beállítva, nem kell aggódni
Megvan a megoldás, bár még nem próbáltam ki, de biztos ez a baja:
Idézet
Another solution, available in OpenGL 1.2 (and as an extension to many 1.1 implementations), is glEnable(GL_RESCALE_NORMAL)


szerk.:
Ezzel így valóban jó.

   
Asylum - Törzstag | 5476 hsz       Online status #172043   2012.01.05 18:54 GMT+1 óra  
Mivel szorzod be a mátrixot ha nincs beállitva semmi? (brotip: glLoadIdentity())
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Pretender - Törzstag | 2498 hsz       Online status #172038   2012.01.05 18:04 GMT+1 óra  
Sikeresen betöltöttem egy modellt, vannak pozíciók, texcoordok meg normálok (normalizáltak).
Beállítottam egy fényt is:
Kód:
float lAmbient[] = {0.2f, 0.2f, 0.2f, 1.0f};
float lDiffuse[] = {1.0f, 0.85f, 0.7f, 1.0f};
float lPos[] = {-100.0f, 50.0f, -25.0f, 1.0f};

glLightfv(GL_LIGHT1, GL_AMBIENT, lAmbient);
glLightfv(GL_LIGHT1, GL_DIFFUSE, lDiffuse);
glLightfv(GL_LIGHT1, GL_POSITION, lPos);
Base::StateManager::GetInstance()->Enable(GL_LIGHT1);

Base::StateManager::GetInstance()->Enable(GL_LIGHTING);

Nagyon jól működik, amíg a ModelView mátrixot nem skálázom. Így jó
Kód:
glPushMatrix();
{
    Matrix world = Matrix::RotationY(a);
    glMultMatrixf((const float*)&world.m);

    m->GetMesh(0)->Draw();
}
glPopMatrix();

így meg nem
Kód:
glPushMatrix();
{
    Matrix world = Matrix::Scale(0.01f) * Matrix::RotationY(a);
    glMultMatrixf((const float*)&world.m);

    m->GetMesh(0)->Draw();
}
glPopMatrix();

Ez így gondolom nem egészen természetes.

Renderelés: VBO, fixed function

   
MaNiAc - Szerkesztő | 1735 hsz       Online status #171932   2012.01.04 13:28 GMT+1 óra  
Idézet
Mangal :
Szerintetek érdemes építeni az opengl-es pickingre vagy inkább sajátkezűleg számoljam ki?

Bonyulultabb a manuális, de ha jól megírod, sokkal gyorsabb. Ha scenegraph-os techikával renderelsz, akkor pedig könnyű beilleszteni is.
Dare to imagine!
http://www.insaneidea.hu
   
Mangal - Tag | 19 hsz       Online status #171928   2012.01.04 12:46 GMT+1 óra  
Szerintetek érdemes építeni az opengl-es pickingre vagy inkább sajátkezűleg számoljam ki?

   
Pretender - Törzstag | 2498 hsz       Online status #171844   2012.01.03 12:13 GMT+1 óra  
tudom, le van töltve, de előbb inkább körülnézek- és kérdezősködök

   
Asylum - Törzstag | 5476 hsz       Online status #171840   2012.01.03 11:40 GMT+1 óra  
Igen, hasonlo mint a vertexdecl de tobbet tud.

Amugy utalom reklamozni magam de a honlapomon meg mindig ottvannak a gl progik (mas kerdes hogy nem teljesen "validak". Onnan tudsz lesni.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
MaNiAc - Szerkesztő | 1735 hsz       Online status #171839   2012.01.03 11:23 GMT+1 óra  
Szerk: Nevermind, már látom, hogy megoldottad
Dare to imagine!
http://www.insaneidea.hu
   
Pretender - Törzstag | 2498 hsz       Online status #171811   2012.01.02 22:36 GMT+1 óra  
Kipróbáltam, hogy külön vettem az értékeket. Úgy se jó. Érdekes módon ez után:
Kód:
glBufferDataARB(GL_ARRAY_BUFFER_ARB, numVertices * sizeof(Vertex), &vertices[0].px, GL_STATIC_DRAW_ARB);

GL_INVALID_VALUE error-t ad a glGetError(), ami a doksi szerint akkor jön elő, ha a size negatív. Pedig megnéztem, és 768 ha jól rémlik, ami szerintem nem negatív

szerk.:
megjavult. Hülye voltam Extension-nél benéztem... először azt néztem, hogy kell ez a SubData is, aztán copy-paste volt, aztán rájöttem, hogy nem fog kelleni, kiszedtem a sub részt, de így a sima glBufferData a "glBufferSubData" extension lett. Na, működik, az a lényeg.

Ezek a gl*Pointer hívások olyasmik, mint dx-ben a SetVertexDeclaration, ha jól értem

szerk.2:
Ahogy egyelőre észrevettem, a gl*Pointer dolgokat elég a bufferek létrehozásakor az unbindelés előtt beállítani, a client state-ket pedig az összes mesh előtt és után. Legalábbis egyelőre.

Ezt a hozzászólást Pretender módosította (2012.01.03 07:16 GMT+1 óra, ---)

   
Pretender - Törzstag | 2498 hsz       Online status #171806   2012.01.02 21:19 GMT+1 óra  
Csak gondoltam spórolok ezen is Amúgy milyen oka lehet annak, hogy ha VBO-val próbálok rajzolni, akkor semmi nem látszik? az lehetséges, hogy azért, mert a GPU-nak feltöltött Vertexstruktúrámban a Position, Normal meg Texcoord egy-egy másik struktúra? (Vector3, Vector2)
Szóval így:
Kód:
struct Vertex
{
    Vector3 Position;
    Vector3 Normal;
    Vector2 Texcoord;

    static const int SIZE = 32;

   
Asylum - Törzstag | 5476 hsz       Online status #171800   2012.01.02 20:40 GMT+1 óra  
Idézet
Pretender :
A bind az nekem rendben van, én a client statekre, meg a glVertexPointer-re és társaira gondolok. Ha az minden egyes modellnél azonos (pl. Position, Normal, Texcoord mindegyiknél), akkor ezeket nem elég egyszer beállítani? Hasonlóan a glEnableClientState.



Erre ne építs, sose tudhatod hogy mikor bövited ki ugy az enginet, hogy tetszöleges layoutot tudjon használni (nálam az van, bár a dx miatt van egy default konvencióm, de egy maces programozó pont le fogja szarni). Azt viszont meg lehet csinálni, hogy minden layouthoz csinálsz egy egyedi azonositót, és ezeket a glpointer fveket levéded.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
syam - Törzstag | 1491 hsz       Online status #171797   2012.01.02 20:01 GMT+1 óra  
Ezt nem tudom. Meg kell nézni doksiban, hogy a vbo bindja érvényteleníti-e a már beállított offsetet.
alias aalberik
   
Pretender - Törzstag | 2498 hsz       Online status #171796   2012.01.02 19:53 GMT+1 óra  
A bind az nekem rendben van, én a client statekre, meg a glVertexPointer-re és társaira gondolok. Ha az minden egyes modellnél azonos (pl. Position, Normal, Texcoord mindegyiknél), akkor ezeket nem elég egyszer beállítani? Hasonlóan a glEnableClientState.

   
syam - Törzstag | 1491 hsz       Online status #171795   2012.01.02 19:38 GMT+1 óra  
A "belőni" az nem teljesen egyértelmű számomra.

Kitalálod mit raksz a vboba és amikor használni akarod a belerakott adatot akkor bindolod azt. Ha olyan adatot akarsz használni ami nem abban a vboban / nincs egyáltalán vboban akkor bindolod a másik vbot / 0-t bindolsz.
alias aalberik
   
Pretender - Törzstag | 2498 hsz       Online status #171794   2012.01.02 19:31 GMT+1 óra  
de ha az összes mesh "komponensei" megegyeznek (azaz pl. mindegyik csak position, texcoord, normal), akkor azt elég egyszer belőni az összes mesh előtt, és nem kell mindegyiknél?

   
syam - Törzstag | 1491 hsz       Online status #171793   2012.01.02 19:12 GMT+1 óra  
Mangal:
Per-fragment árnyalás kell neked csak azzal tudsz ilyet - vagy tesszellálod a 2 quadot.

Pretender:
A VBO az nem egyenlő vertex array. Nincs belőle többféle és nincs hozzá enable/disable - "bind van csak". A VBO "gpu oldali" adattárolásra való, nem tudja milyen adat van benne, hány komponensű. Csak a méretét tudja byteban.
A glvertexattribpointer vagy glvertexpointer és társaira van hatással ill. a gldraw... függvényekre.
alias aalberik
   
Mangal - Tag | 19 hsz       Online status #171792   2012.01.02 18:39 GMT+1 óra  
Azzal is ez a helyzet,csak a csúcspontokat világítja be.

   
Pretender - Törzstag | 2498 hsz       Online status #171791   2012.01.02 18:33 GMT+1 óra  
Idézet
Mangal :
Heló!
Irányított fénynél hogy lehet elérni,hogy egy 2d quadnál egy kört világítson ki,ne pedig csúcspontokra számolja ki a hatást?


Az irányított fénynek a lényege, hogy minden pontra ugyan úgy hat. Kört az spot lighttal tudsz

   
Pretender - Törzstag | 2498 hsz       Online status #171790   2012.01.02 18:32 GMT+1 óra  
akkor ahol lehet, érdemes az ARB-s verziót használni, ha jól értem.
Mostanában nem csináltam semmit, szóval ismét VBO: hogy van ez akkor? Láttam több félét is, pl. EnableClientState minden egyes mesh esetén kell, vagy csak rajzolás előtt, és Disable az összes mesh rajzolása után? Illetve:
glEnableVertexAttribArray vs. gl*Pointer
Illetve ugye ehhez kapcsolódóan igaz-e ez is, az előzőre? (összes mesh rajzolása előtt, vagy minden mesh előtt?)

   
Mangal - Tag | 19 hsz       Online status #171788   2012.01.02 18:23 GMT+1 óra  
Heló!
Irányított fénynél hogy lehet elérni,hogy egy 2d quadnál egy kört világítson ki,ne pedig csúcspontokra számolja ki a hatást?

   
Asylum - Törzstag | 5476 hsz       Online status #171787   2012.01.02 17:41 GMT+1 óra  
Arra figyelj, hogy nem mindegyiknél csak a postfix a különbség; például a shaderes extension eléggé át lett nevezgetve (viszont so far ez az egyetlen lényeges).
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
syam - Törzstag | 1491 hsz       Online status #171786   2012.01.02 17:23 GMT+1 óra  
Elvileg semmi.
Gyakorlatilag a postfix nélküli változat már a core része vagyis ahhoz már az adott verziójú OGL támogatás szükséges.
Pl. ha FBO-t használsz EXT nélkül, akkor 3.0 a min. verziókövetelmény, ha EXT-tel használod akkor csak 1.1 (+ FBO extension támogatás).
alias aalberik
   
Pretender - Törzstag | 2498 hsz       Online status #171784   2012.01.02 16:32 GMT+1 óra  
Mi a különbség a "sima" és az ARB extensionök között? pl. glBufferData vs. glBufferDataARB

   
Pretender - Törzstag | 2498 hsz       Online status #171745   2012.01.01 20:14 GMT+1 óra  
Idézet
Geri :
szerintem felesleges ilyesmivel bonyolítani a dolgot, csak a kódod komplexitását növeli feleslegesen. nem lesz jelentősen lassabb a rendszered akkor se, ha szűkség esetén textúrát váltassz


Na, meg is van egy újabb optimalizáció a számodra. Jó munkát

   
Asylum - Törzstag | 5476 hsz       Online status #171744   2012.01.01 20:02 GMT+1 óra  
Idézet
zeller :
kezelheted kulon modulkent



Ilyet ne mondj neki, az lassitja a forditást
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
zeller - Törzstag | 486 hsz       Online status #171743   2012.01.01 20:01 GMT+1 óra  
@geri
Sztem egy ilyen kodot eleg egyszer megirni, ha standardizalod a parametereit a texturanak, ezt pedig kezelheted kulon modulkent igy nem fujja fel a kodot. Sot, a legjobb, ha meta kodot irsz es forditokat gpu-kra

   
Asylum - Törzstag | 5476 hsz       Online status #171742   2012.01.01 20:01 GMT+1 óra  
Én minden epszilonnál kisebb marhasághoz textura atlaszt használok (és mellé természetesen static vagy dynamic batchinget ami részecskéknél elengedhetetlen).
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
fpeti - Törzstag | 1295 hsz       Online status #171741   2012.01.01 19:52 GMT+1 óra  
Én az összes részecskerendszert is képes vagyok egy rajzolással megoldani, mert color-ban átadok tile méretet x,y indexet tile-ra és elfordulást, így még külön-külön foroghatnak is - ezt pixelshaderben, a tileozás vs-ben mehet. Elég jól bevált. így egy rajzolás a alfásoknak, egy a addivitve és egy a sima blendelteknek. Mondjuk ez azoknak lehet fontos, ahol sok minden robbanhat egyszerre. hehe
   
Geri - Törzstag | 2195 hsz       Online status #171739   2012.01.01 19:03 GMT+1 óra  
szerintem felesleges ilyesmivel bonyolítani a dolgot, csak a kódod komplexitását növeli feleslegesen. nem lesz jelentősen lassabb a rendszered akkor se, ha szűkség esetén textúrát váltassz

   
syam - Törzstag | 1491 hsz       Online status #171734   2012.01.01 14:45 GMT+1 óra  
Igen. Egy részecskerendszert akár egy textúraváltással megúszol.
alias aalberik
   
Mangal - Tag | 19 hsz       Online status #171733   2012.01.01 14:37 GMT+1 óra  
Sebesség szempontjából is a 2.ik az előnyösebb?

   
Matzi - Szerkesztő | 2526 hsz       Online status #171732   2012.01.01 14:27 GMT+1 óra  
Az utóbbit, mert úgy jó eséllyel ráférsz egyetlen értelmes méretű textúrára, és nem kell sok apró kicsit betöltened hozzá.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
Mangal - Tag | 19 hsz       Online status #171731   2012.01.01 14:23 GMT+1 óra  
Heló!
Szerintetek sprite alapú animáció kezelésénél melyik a célszerűbb
,a képkockákat külön textúraként legenerálni, vagy pedig az össz képet egy nagy képként, és azt úgy feszíteni a quadtra hogy csak egy képkocka látszon belőle?

   
MaNiAc - Szerkesztő | 1735 hsz       Online status #171521   2011.12.28 22:51 GMT+1 óra  
Idézet
proof88 :
hát nem le lettem cseszve?!
de most valszeg nem az lesz a bottleneck hogy 4x4-et használ 3x3 helyett, na!

Részemről abszolút nem lecseszésnek szántam. Csak annyit mondtam, hogy egyetértek Gerivel abban, hogy sok kis optimizációs lehetőség kihagyása is okozhat nagy performance-veszteséget.
Dare to imagine!
http://www.insaneidea.hu
   
proof88 - Törzstag | 530 hsz       Online status #171518   2011.12.28 22:29 GMT+1 óra  
hát nem le lettem cseszve?!
de most valszeg nem az lesz a bottleneck hogy 4x4-et használ 3x3 helyett, na!
   
syam - Törzstag | 1491 hsz       Online status #171511   2011.12.28 20:11 GMT+1 óra  
Ha tudod egy mátrixról, h csak eltolást és forgatást tartalmaz akkor azt gyorsan tudod invertálni: minor mátrix transzponálás aztán az eltolást transzformálod és negálod a transzponált minor mátrixszal.
Ha jól tudom a skálázást is bele lehet venni a tengelyek hosszának figyelembevételével.
alias aalberik
   
Asylum - Törzstag | 5476 hsz       Online status #171510   2011.12.28 20:09 GMT+1 óra  
Lagrange-féle kifejtési tétel (ez az a bizonyos aldeterminánsos). Telejesen jól használható, nem kell hozzá se ciklus se semmi (viszont jó sok szorzás).
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Eldor - Tag | 163 hsz       Online status #171508   2011.12.28 20:00 GMT+1 óra  
Ketfele modszert tanultam invertalasra. Az egyik bazistranszformaciokkal tortenik, a masik pedig adjungalt matrixszal es determinansokkal. Ha jol sejtem, akkor a determinans szamolas futasi ideje faktorialis, szoval ez esetben egyaltalan nem mindegy, hogy 2x2-es vagy 3x3-as determinansokkal kell szamolni. Elso megerzesre a masik algoritmus kobos, igy ez esetben sem lenyegtelen a ketto kozti kulonbseg. Szoval ha van ra mod, akkor sporolok. Bar meg mindig nem hiszem, hogy hasznalni fogom.
Amugy Ti melyiket implementalnatok? Vagy valami mas algoritmust hasznaltok?

   
Pretender - Törzstag | 2498 hsz       Online status #171493   2011.12.28 18:08 GMT+1 óra  
ja, azt csak összeröffentettem tudom mi mit csinál...

   
gaborlabor - Moderátor | 4449 hsz       Online status #171492   2011.12.28 18:03 GMT+1 óra  
Idézet
Pretender :
Idézet
MaNiAc :
Ott a pont! Például kezdésnek mi értelme a glLoadIdentity()-nek glLoadMatrix() előtt, ráadásul 2x is?

(Idezet a glLoadMatrix() doksijabol: "glLoadMatrix replaces the current matrix..."


most miről is beszélsz?


Arról, hogy a kódodban indokolatlanul sok a glLoadIdentity(...)

   
Asylum - Törzstag | 5476 hsz       Online status #171483   2011.12.28 17:17 GMT+1 óra  
Idézet
Geri :




Igen, neked szólt, Geri. Tudom, hogy te framenként vered a milliós rajzolási számot, lászik is a szarjaidon.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Pretender - Törzstag | 2498 hsz       Online status #171481   2011.12.28 17:15 GMT+1 óra  
Idézet
MaNiAc :
Idézet
Geri :
Idézet
proof88 :
sose ilyen piszlicsáré dolgokon próbálj spórolni ... add meg a módját a dolgoknak, az algoritmusokon optimalizálj! Keresgélj, olvass utána módszereknek, van-e jobb, stb. Ilyen bájtokon nem érdemes spórolni.



ott kell spórolni, ahol bottleneck van. ha framenként 2 milliószor megcsinálod a piszlicsárét, és amiatt szaggat a gecibe, akkor a piszlicsárén kell spórolni more

Ott a pont! Például kezdésnek mi értelme a glLoadIdentity()-nek glLoadMatrix() előtt, ráadásul 2x is?

(Idezet a glLoadMatrix() doksijabol: "glLoadMatrix replaces the current matrix..."


most miről is beszélsz?

   
Geri - Törzstag | 2195 hsz       Online status #171479   2011.12.28 17:12 GMT+1 óra  
lol, asylum megszólalt megint

Idézet
Asylum :
Ha valamit framenként 2 millioszor csinál, akkor inkább ne is programozzon.




   
Asylum - Törzstag | 5476 hsz       Online status #171478   2011.12.28 17:10 GMT+1 óra  
Idézet
Matzi :
Egy pixel shader kód azért simán lefut 2 milliószor framenként, néha ott kell optimalizálni.



Párhuzamositva nem ér
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
syam - Törzstag | 1491 hsz       Online status #171475   2011.12.28 16:20 GMT+1 óra  
Kövessétek a Samsung driveríróinak a tanácsát: ne renderelj sokat, mert lassít!
alias aalberik
   
Matzi - Szerkesztő | 2526 hsz       Online status #171474   2011.12.28 15:38 GMT+1 óra  
Egy pixel shader kód azért simán lefut 2 milliószor framenként, néha ott kell optimalizálni.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
Asylum - Törzstag | 5476 hsz       Online status #171473   2011.12.28 15:34 GMT+1 óra  
Ha valamit framenként 2 millioszor csinál, akkor inkább ne is programozzon.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
MaNiAc - Szerkesztő | 1735 hsz       Online status #171468   2011.12.28 13:36 GMT+1 óra  
Idézet
Geri :
Idézet
proof88 :
sose ilyen piszlicsáré dolgokon próbálj spórolni ... add meg a módját a dolgoknak, az algoritmusokon optimalizálj! Keresgélj, olvass utána módszereknek, van-e jobb, stb. Ilyen bájtokon nem érdemes spórolni.



ott kell spórolni, ahol bottleneck van. ha framenként 2 milliószor megcsinálod a piszlicsárét, és amiatt szaggat a gecibe, akkor a piszlicsárén kell spórolni more

Ott a pont! Például kezdésnek mi értelme a glLoadIdentity()-nek glLoadMatrix() előtt, ráadásul 2x is?

(Idezet a glLoadMatrix() doksijabol: "glLoadMatrix replaces the current matrix..."
Dare to imagine!
http://www.insaneidea.hu
   
Geri - Törzstag | 2195 hsz       Online status #171462   2011.12.28 13:19 GMT+1 óra  
Idézet
proof88 :
sose ilyen piszlicsáré dolgokon próbálj spórolni ... add meg a módját a dolgoknak, az algoritmusokon optimalizálj! Keresgélj, olvass utána módszereknek, van-e jobb, stb. Ilyen bájtokon nem érdemes spórolni.



ott kell spórolni, ahol bottleneck van. ha framenként 2 milliószor megcsinálod a piszlicsárét, és amiatt szaggat a gecibe, akkor a piszlicsárén kell spórolni more

   
proof88 - Törzstag | 530 hsz       Online status #171432   2011.12.27 21:48 GMT+1 óra  
sose ilyen piszlicsáré dolgokon próbálj spórolni ... add meg a módját a dolgoknak, az algoritmusokon optimalizálj! Keresgélj, olvass utána módszereknek, van-e jobb, stb. Ilyen bájtokon nem érdemes spórolni.
   
Frissebbek | Korábbi postok
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [15] [20] > 25 < [30] [35] [40] [45] [50] [55] [60] [65] [70] [75] [80] [82]