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

Pretender:    2498
szeki:    2440
Seeting:    2306
Geri:    2188
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] [25] [30] [35] > 40 < [45] [50] [55] [60] [65] [70] [75] [80] [82]
Seeting - Törzstag | 2306 hsz       Online status #126899   2010.01.24 10:20 GMT+1 óra  
6 oldalú kocka GL_QUAD-okból, egy oldal 4 vertex egy vertex 3 poz (x,y,z):

6*4=24
24*3=72

Ha carlos könyvére gondolsz az pont meg is van, de az dx-szes. Azért a hardveres dolgokat majd átrágom, mivel az gondolom ugyanaz.
   
wazowski - Tag | 3 hsz       Online status #126877   2010.01.23 23:44 GMT+1 óra  
seeting :

Még új vagyok, de lehet hasznos a tanácsom. Elsőnek rágd át magad pár doksin, hogy is működik a videókártya, vagy az egész render pipeline, mert a kérdéseidből az jön le, hogy nagyon hiányzik neked pár alapvető koncepció.

Asszem van valami magyar csóka, aki írt játékfejlesztésről könyvet, ami kezdőknek jó, és elmagyarázza az alapokat. Azzal megpróbálkozhatnál (nem emlékszem pontosan a címére, valamilyen Károly írta), állítólag alapos (nekem is csak ajánlották).

A probléma valszeg az volt, hogy a depth test nem volt beállítva. Komplexebb geometriáknál a cull face meg nem oldja meg ugyanezt a problémát, és akkor megint fejvakargatás lesz.

A másik, az összes vertex mellett ott kell lennie az összes egyéb adatnak is (texcoord0-32). A 72 hogy jött ki neked? 6 Oldalú kocka, a legprimitívebb módszerrel is, oldalanként 2 tri, az 3 vertex strip nélkül. 6 * 3 * 2 = 36

   
Seeting - Törzstag | 2306 hsz       Online status #126868   2010.01.23 15:17 GMT+1 óra  
Megoldva

glCullFace(GL_BACK);
   
Seeting - Törzstag | 2306 hsz       Online status #126864   2010.01.23 15:00 GMT+1 óra  
Ilyen, most csak két oldalt definiáltam:


A képet a Képfeltöltés.hu tárolja. http://www.kepfeltoltes.hu
   
Joga - Törzstag | 1791 hsz       Online status #126863   2010.01.23 14:57 GMT+1 óra  
Vagy a backface culling, vagy a depth test, sok választás nincs
(ಠ ›ಠ) Stewie!

   
Seeting - Törzstag | 2306 hsz       Online status #126862   2010.01.23 14:56 GMT+1 óra  
Rájöttem, hogy nem is átlátszó... Azt csinálja hogy a kocka első lapja mögötti lapot (ami kocka hátoldala) az első lap elé rajzolja.
   
Joga - Törzstag | 1791 hsz       Online status #126860   2010.01.23 14:45 GMT+1 óra  
Akkor bizony nem maradt más, nem lehetne egy kicsit hosszabb kódot kapni, vagy hogy mikhez nyúlsz hozzá?( textúra, bufferek, stb )
(ಠ ›ಠ) Stewie!

   
Seeting - Törzstag | 2306 hsz       Online status #126859   2010.01.23 14:38 GMT+1 óra  
Nincs color arrayem. glMaterialfv-t használok. Az első két ponthoz biztosan nem nyúltam. Poltergeist...
   
Joga - Törzstag | 1791 hsz       Online status #126858   2010.01.23 14:34 GMT+1 óra  
Nincs sok választási lehetőség:
1.: depth buffer/depth maskot megpiszkáltad
2.: A color arrayban piszkáltál valami, vagy a glColor4f-fel bűvészkedtél valamit, és elfelejtetted
3.: Stenciltesztel bűvészkedtél és az maradt benn
4.: Háromnap múlva belenézel a kódodra, és a fejedre csapsz, hogy "Hogyan nem vettem észre?!"
(ಠ ›ಠ) Stewie!

   
Seeting - Törzstag | 2306 hsz       Online status #126857   2010.01.23 14:32 GMT+1 óra  
Értem. De szerintem nem ezért átlátszó mert a shotot kínomban ilyen állapotban csináltam:

glVertexPointer(3, GL_FLOAT, 0, ((*prModellsIt).second).Vertices);
glNormal3f(1.0f,0.0f,0.0f);
glDrawArrays(GL_QUADS,0,24);

Szóval elvileg minden vertexnek ugyanaz a normálvektora. Eszerint a kocka csak egy oldalán veri vissza a fényt teljesen, a többi sötét marad. De mitől látszik át?
   
Joga - Törzstag | 1791 hsz       Online status #126856   2010.01.23 14:28 GMT+1 óra  
Nem, egy vertexhez tartozik egy normálvektor
( 72 vertexhez 72 normál )

egy face-hez pedig annyi normálvektor tartozik, ahány csúcsa van, triangle esetén 3, quad esetén 4, stb

mivel quadokat adsz meg, ezért egy face-hez 4 normál fog tartozni
(ಠ ›ಠ) Stewie!

   
Seeting - Törzstag | 2306 hsz       Online status #126855   2010.01.23 14:23 GMT+1 óra  
Idézet
Joga :
azt, hogy a normálvektor array 18 elemű ugye úgy érted, hogy kockánként 18 elemű, ugye?

72 elemű vertex arrayhoz 72elemű normálvektor array tartozik



Azért gondoltam, hogy 18 elemű, mert a kockának 6 oldala van, 1 oldal 1 face és 1 face-hez 3 normálvektor pozíció tartozik.

6*3=18

Magyarázd már el kérlek, hogy miért 72 elemű normálvektor kell
   
Seeting - Törzstag | 2306 hsz       Online status #126854   2010.01.23 14:21 GMT+1 óra  
Idézet
fpeti :
Lehet hülyeség, de nem backface-eket rajzolod? az is így néz ki.



glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, material);

és counter clockwise-ban rajzolok.

Ezt a hozzászólást Seeting módosította (2010.01.23 14:26 GMT+1 óra, ---)
   
fpeti - Törzstag | 1291 hsz       Online status #126853   2010.01.23 14:18 GMT+1 óra  
Lehet hülyeség, de nem backface-eket rajzolod? az is így néz ki.
   
Joga - Törzstag | 1791 hsz       Online status #126852   2010.01.23 14:16 GMT+1 óra  
azt, hogy a normálvektor array 18 elemű ugye úgy érted, hogy kockánként 18 elemű, ugye?

72 elemű vertex arrayhoz 72elemű normálvektor array tartozik
(ಠ ›ಠ) Stewie!

   
Seeting - Törzstag | 2306 hsz       Online status #126849   2010.01.23 14:01 GMT+1 óra  
Mitől lehet az, hogy az objektumaim átlátszanak?


A képet a Képfeltöltés.hu tárolja. http://www.kepfeltoltes.hu

A fényeket állítottam be rosszul? Vagy talán hibás a vertex array? Esetleg a Normalvector array?

Ha van egy 72 elemű vertex array-em, ami GL_QUAD-okat határoz meg, akkor a normálvektor array 18 elemű, igaz?
   
Joga - Törzstag | 1791 hsz       Online status #126835   2010.01.23 08:55 GMT+1 óra  
(ಠ ›ಠ) Stewie!

   
Seeting - Törzstag | 2306 hsz       Online status #126834   2010.01.23 08:51 GMT+1 óra  
Ez bejött, köszi!

Azt nem tudom, hogy ezek a fickók hogy nem jöttek rá:
http://stackoverflow.com/questions/535317/checking-value-exist-in-a-stdmap-c
   
Joga - Törzstag | 1791 hsz       Online status #126833   2010.01.23 08:45 GMT+1 óra  
mymap.count( index )
Ez visszaadja, hány darab index-szel jelölt elem van, ebben az esetben egy, ha van, nulla, ha nincs ilyen elem
(ಠ ›ಠ) Stewie!

   
Seeting - Törzstag | 2306 hsz       Online status #126832   2010.01.23 08:42 GMT+1 óra  
Ebben meg lehet nézni valahogy, hogy létezik-e a keresett elem?
   
Seeting - Törzstag | 2306 hsz       Online status #126831   2010.01.23 08:21 GMT+1 óra  
   
Joga - Törzstag | 1791 hsz       Online status #126830   2010.01.23 08:18 GMT+1 óra  
Én azt mondom az sdl::map jobb, ha index alapján tárolsz dolgokat
(ಠ ›ಠ) Stewie!

   
Seeting - Törzstag | 2306 hsz       Online status #126829   2010.01.23 08:15 GMT+1 óra  
Ez a map így első ránézésre pont úgy hangzik mint ami nekem kell. Lehetne a key az index, a mapped value meg a modell osztály példánya.

Akkor azt mondod, hogy dobjam az stl::vector-t?
   
Seeting - Törzstag | 2306 hsz       Online status #126828   2010.01.23 08:12 GMT+1 óra  


Nem kellett volna boroznom tegnap.
   
Joga - Törzstag | 1791 hsz       Online status #126826   2010.01.23 08:11 GMT+1 óra  
Jó, de a program sorbarendezheti betöltéskor a modelleket, nem?

szerk.: vagy próbálkozhatsz std::map-pal az valszeg jól fogja bírni a strapát
(ಠ ›ಠ) Stewie!

   
Seeting - Törzstag | 2306 hsz       Online status #126824   2010.01.23 08:08 GMT+1 óra  
De az index az tetszőleges, a szkripter adja meg. Egyfajta azonosítója a modellnek. Nem növekszik.

pl.

//file elérés, index
load modell "modell1.lwo",145
load modell "modell2.lwo",93

float szog=get modell angle x(93)

Most a vectorban a 93-as modell a második helyen van, de a lekérdezés nem ezt a helyet kéri hanem az indexet.
   
Joga - Törzstag | 1791 hsz       Online status #126823   2010.01.23 08:05 GMT+1 óra  
Asszem bináris keresésnek hívják:

Sorbarendezed a modelleket index szerint.
Van x modelled.
megnézed az x/2 dik modelled indexét, ha nagyobb, mint amit keresel balra, ha kisebb jobbra keresel, azt a részt is kettébontod, amíg meg nem találod
(ಠ ›ಠ) Stewie!

   
Seeting - Törzstag | 2306 hsz       Online status #126821   2010.01.23 08:02 GMT+1 óra  
Hogy lehetne gazdaságosan tárolni a modell indexeket?

Úgy szeretném megírni a scenemanagert, hogy könnyen lehessen szkriptelni a scene-t. Azt akarom, hogy ha betöltök egy modellt, akkor a betöltő eljárás bemenetében szerepeljen az adott modell indexe, amit a szkripter ad meg. Ez egy int.

Úgy tárolom a modelleket, hogy a modell osztálynak van egy id privátja, és egy vector-ba teszem magát a példányosított modellt.

Na most ez nem bizonyul gazdaságosnak: Ha például a játék loopjában le akarom kérdezni a modell pozícióját (a lekérdező fv. egy indexet kér be), akkor ahányszor meghívódik ez a fv, végig kell mennem a vektoron, hogy megnézzem hogy a benne lévő modellek közül melyiknek azonos az indexe a bemenettel.

Egy játék loopban rengeteg lekérdezést kell végezni számos létező modellhez, ezért nem akarom hogy x milliószor végigmenjen ugyanazon a cikluson.

Úgy akarom megoldani, mint ahogy a darkBASIC-ben van. Vajon ők hogy csinálták?
   
Eldor - Tag | 163 hsz       Online status #125840   2010.01.07 08:42 GMT+1 óra  
Le tudom kérdezni GLSL-ben, hogy engedélyezve van-e a textúrázás, vagy a fények és ha az utóbbi igen, akkor azok közül melyikek?

   
Eldor - Tag | 163 hsz       Online status #124772   2009.12.24 06:59 GMT+1 óra  
Ez gyors volt. Köszönöm a választ.

   
gaborlabor - Moderátor | 4449 hsz       Online status #124771   2009.12.24 06:58 GMT+1 óra  
A glReadBuffer() függvénnyel tudod szabályozni, hogy honnan olvasson. De az alapértelmezett érték a háttérbuffer (GL_BACK), tehát nem is kell módosítanod.

   
Eldor - Tag | 163 hsz       Online status #124770   2009.12.24 06:52 GMT+1 óra  
A glReadPixels() függvény a képernyőről vagy a háttérbufferből olvas? Ha a képernyőről, akkor van valami módszer arra, hogy a háttérbufferből olvassam ki az adatokat?

   
Joga - Törzstag | 1791 hsz       Online status #122987   2009.11.24 12:39 GMT+1 óra  
Nah, remélem, most nem postolás után 3 másodperccel jövök rá a megoldásra, viszont az megfogott, hogy az alábbi kód lefutása után a shaderben mindhárom sampler2D ugyanarra a textúrára mutat:
Kód:
    glActiveTexture( GL_TEXTURE0 );
    glEnable( GL_TEXTURE_2D );
    glBindTexture( GL_TEXTURE_2D, textures[0] );
    glUniform1i( glGetUniformLocation( fs, "tex0" ), GL_TEXTURE0 );


    glActiveTexture( GL_TEXTURE1 );
    glEnable( GL_TEXTURE_2D );
    glBindTexture( GL_TEXTURE_2D, textures[1] );
    glUniform1i( glGetUniformLocation( fs, "tex1" ), GL_TEXTURE1 );

    glActiveTexture( GL_TEXTURE2 );
    glEnable( GL_TEXTURE_2D );
    glBindTexture( GL_TEXTURE_2D, textures[2] );
    glUniform1i( glGetUniformLocation( fs, "tex2" ), GL_TEXTURE2 );
(ಠ ›ಠ) Stewie!

   
Joga - Törzstag | 1791 hsz       Online status #122970   2009.11.24 07:40 GMT+1 óra  
Szerk.: Semmi, hihetetlen balkuki voltam, és annyir szerkesztettem a kódot, hogy végül kikerült belőle a glCreateProgram();

na jó, mégsem lett jó
glee használata mellett döntöttem, viszont az alábbi program nem változtat az FFP-n, hibaüzenetet sem ír ki a shaderre.....Szóval az alábbi a kód az
Kód:
SDL_Init( .. );
SDL_SetVideoMode( .. ) ;

után van:
Kód:
   
    GLeeInit();
    vs = glCreateShader( GL_VERTEX_SHADER );
    fs = glCreateShader( GL_FRAGMENT_SHADER );

    const GLchar *src_vs = LoadSource( "shader.vs" );
    const GLchar *src_fs = LoadSource( "shader.fs" );

    glShaderSource( vs, 1, &src_vs, 0 );
    glShaderSource( fs, 1, &src_fs, 0 );

    glCompileShader( vs );
    glCompileShader( fs );

    char buffer[2048];  //Csakúgy poénból
    int l;
    glGetShaderInfoLog( vs, 2048, &l, buffer );
    if( l > 0 )cout << "Hiba a vertex shaderben:\n\t" << buffer << endl;
    glGetShaderInfoLog( fs, 2048, &l, buffer );
    if( l > 0 )cout << "Hiba a fragment shaderben:\n\t" << buffer << endl;

    glAttachShader( program, fs );
    glAttachShader( program, vs );
    glLinkProgram( program );
(ಠ ›ಠ) Stewie!

   
syam - Törzstag | 1491 hsz       Online status #122927   2009.11.23 14:16 GMT+1 óra  
Nincs valahol engedélyezve több texcoord array (glclientactivtexture) ? Esetleg normalpointer....
alias aalberik
   
Seeting - Törzstag | 2306 hsz       Online status #122924   2009.11.23 12:26 GMT+1 óra  
Örvendek.

Az én problémám sajnos ennél komplexebb

Az a baj, hogy túl hardver-közeli lett a program és ezeket a bugokat már nagyon kényes megtalálni. Már egy hete erőszakolom, és semmi. Memória gondok... lehet hogy így bosszulja meg magát a Java amiért a C++-t választottam XD
   
Joga - Törzstag | 1791 hsz       Online status #122922   2009.11.23 12:03 GMT+1 óra  
igen, le
Szerk.: Meg is van a megoldás: nem használtam a glew-t

Ezt a hozzászólást Joga módosította (2009.11.23 12:21 GMT+1 óra, ---)
(ಠ ›ಠ) Stewie!

   
Seeting - Törzstag | 2306 hsz       Online status #122921   2009.11.23 12:03 GMT+1 óra  
A többi gl-es hívás lefut?
   
Joga - Törzstag | 1791 hsz       Online status #122918   2009.11.23 11:52 GMT+1 óra  
Valakinek van valami tippje arra, hogy miért tekinti a fordító a GLSL-lel kapcsolatos függvényeket( glShaderSource, glCompileShader ) deklarálatlannak, amikor az intellisense felismeri és a header file-okban is benne van?
( Code::Blocks, SDL-lel, és a glext is iclude-olva van, az OpenGL verzióm pedig 2.0.3 )
(ಠ ›ಠ) Stewie!

   
Seeting - Törzstag | 2306 hsz       Online status #122909   2009.11.23 09:59 GMT+1 óra  
Itt valami felülíródik a memóriában a haverom kódjában szerintem ami hatással lehet a bufferekre.
   
Seeting - Törzstag | 2306 hsz       Online status #122908   2009.11.23 09:58 GMT+1 óra  
Így is elszáll:

Kód:
if (glIsEnabled(GL_VERTEX_ARRAY)) {glDisableClientState(GL_VERTEX_ARRAY);}
    if (glIsEnabled(GL_COLOR_ARRAY)) {glDisableClientState(GL_COLOR_ARRAY);}
    if (glIsEnabled(GL_BLEND)) {glDisableClientState(GL_BLEND);}
    if (glIsEnabled(GL_TEXTURE_COORD_ARRAY)) {glDisableClientState(GL_TEXTURE_COORD_ARRAY);}
     glEnableClientState(GL_VERTEX_ARRAY);
        glBindBuffer(GL_ARRAY_BUFFER, t);
        glVertexPointer(3, GL_FLOAT, 0, 0);
        glDrawArrays(GL_TRIANGLES, 0, 3);
        glBindBuffer(GL_ARRAY_BUFFER,0);
        glDisable(GL_VERTEX_ARRAY);
   
syam - Törzstag | 1491 hsz       Online status #122907   2009.11.23 09:55 GMT+1 óra  
Próbálj minden létező arrayt tiltani (gldisableclientstate) kivéve a vertex_arrayt...
alias aalberik
   
Seeting - Törzstag | 2306 hsz       Online status #122904   2009.11.23 09:21 GMT+1 óra  
Idézet
syam :
Ez egyre érdekesebb....

Próbáltad már GL_STATIC_DRAW-val?
Egy OGL contextben használod a vbokat?



A nehe-s első tutorial kódra építek mindent. Linuxosra. GLX ablak.
Ott ez van:
/* create a GLX context */
GLWin.ctx = glXCreateContext(GLWin.dpy, vi, 0, GL_TRUE);

Ehhez nem nagyon értek, azért kopiztam onnan.

Idézet
proof88 :
csinálj egy új projektet, a lehető legkevesebb kóddal és próbáld ott reprodukálni a hibát



Nem csinálok, mert tudom, hogy úgy megy. Összeraktuk a kódunkat haverommal és mégis az enyémnél száll el (a rajzolásnál).
   
proof88 - Törzstag | 530 hsz       Online status #122903   2009.11.23 09:18 GMT+1 óra  
csinálj egy új projektet, a lehető legkevesebb kóddal és próbáld ott reprodukálni a hibát
   
syam - Törzstag | 1491 hsz       Online status #122902   2009.11.23 09:07 GMT+1 óra  
Ez egyre érdekesebb....

Próbáltad már GL_STATIC_DRAW-val?
Egy OGL contextben használod a vbokat?
alias aalberik
   
Seeting - Törzstag | 2306 hsz       Online status #122891   2009.11.23 08:18 GMT+1 óra  
Már simán csak ennél is elszáll:

Initbe:

Kód:
    glGenBuffers(1,&t);
    GLfloat v[9];
    v[0]=-1;v[1]=-1;v[2]=0;
    v[3]=1;v[4]=-1;v[5]=0;
    v[6]=0;v[7]=1;v[8]=0;
    glBindBuffer(GL_ARRAY_BUFFER,t);
    glBufferData(GL_ARRAY_BUFFER, sizeof(v), v, GL_DYNAMIC_DRAW);


A Loopba:

Kód:
        glEnableClientState(GL_VERTEX_ARRAY);
        glBindBuffer(GL_ARRAY_BUFFER, t);
        glVertexPointer(3, GL_FLOAT, 0, 0);
        glDrawArrays(GL_TRIANGLES, 0, 3);


És nem tudom, hogy hol hibázik és miért... Segfault a drawarraysnél.
   
Thrall - Törzstag | 609 hsz       Online status #122716   2009.11.22 09:06 GMT+1 óra  
hello, csak egy rövid kérdés: Ha a void glutLeaveGameMode(); ot meghívom kilépés előtt, a gépem felbntása akkora lesz, mint a programomban.
Nincs valami függvény, ami mindent visszaállít kilépés előtt?
Naná, hogy most jöttem rá... Visszavonva a kérdés...

Ezt a hozzászólást Thrall módosította (2009.11.22 09:18 GMT+1 óra, ---)
Jatekfejlesztes.hu közös projekt: próbálunk összerakni egy olyan csapatot, akik együtt el tudnak készíteni egy komolyabb játékot megfelelő minőségben. Érdekel?
Link:
JF.hu közös projekt
http://frogbonegame.uw.hu/
   
syam - Törzstag | 1491 hsz       Online status #122577   2009.11.21 04:47 GMT+1 óra  
Próbálj meg csak egy háromszöget renderelni, hogy ugyis elszáll-e.
Ha nem, akkor nem minden buffered uolyan nagy,
ha igen, akkor valamelyik buffer rosszul van csatolva.
alias aalberik
   
Seeting - Törzstag | 2306 hsz       Online status #122535   2009.11.20 10:21 GMT+1 óra  
Kód:
       glDrawArrays(Objects[i]->getVMODE(), Objects[i]->getVFIRST(), Objects[i]->getVCOUNT());

        glBindBufferARB(GL_ARRAY_BUFFER_ARB,0);
        glBindTexture(GL_TEXTURE_2D, 0);


Erre gondoltál? Mert ilyet csinálok és még így is crashel.
   
Kuz - Törzstag | 4455 hsz       Online status #122529   2009.11.20 07:38 GMT+1 óra  
Do, or do not. But do not try!
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] [25] [30] [35] > 40 < [45] [50] [55] [60] [65] [70] [75] [80] [82]