Pagina 2 di 5

Re: SlaD3D

Inviato: 13/12/2011, 19:01
da Sla
Fatto l'importer OBJ.
Se nella stessa directory dell'OBJ specificato la funzione trova anche il suo MTL (non è necessario che si chiamino allo stesso modo: il nome del file .mtl è salvato nell' obj)
allora viene caricato anche quello.
Per chi non lo sapesse, i file .mtl di solito accompagnano quelli obj e contengono informazioni su texture e materiali.

Re: SlaD3D

Inviato: 15/12/2011, 18:45
da enick
Super_Slascio ha scritto:Fatto l'importer OBJ.
Se nella stessa directory dell'OBJ specificato la funzione trova anche il suo MTL (non è necessario che si chiamino allo stesso modo: il nome del file .mtl è salvato nell' obj)
allora viene caricato anche quello.
Per chi non lo sapesse, i file .mtl di solito accompagnano quelli obj e contengono informazioni su texture e materiali.
sla sono seriamente interessato a convertire il mio progetto con d3d von la tua dll, per ora non ho incluso alcun tipo di modello,dunque si tratta piu che altro di sprite 2d, e un insieme di floors,walls e cubi.

Dunque con il giusto supporto potrei iniziare a fare qualche test di conversione,vi è una lista di tutte le funzioni presenti fin ora?? (cosi posso vedere se posso convertire il tutto in generale)



PS: il mio progetto include piu che altro edifici,quindi costruzioni da pochi poligoni,fin ora la costruzione degli edifici è avvenuta completamente in codice assemblando vari muri e pavimenti,se mai dovessi per comodità e qualità passare a costuirmi gli edifici tramite software di modellazioni , trattandosi comunque di pochi poligoni a edificio ipotizziamo per assurdo un massimo di 50 poligoni per edificio , le prestazioni potrebbero peggiorare o forse migliorare?

Re: SlaD3D

Inviato: 15/12/2011, 18:59
da Sla
Se utilizzi i modelli invece di molte funzioni wall e floor le prestazioni non possono che migliorare, ma questo vale anche in game maker.
Se poi usi la mia DLL puoi anche evitare di prenderti la briga di preoccuparti dei poligoni, ti fai i modelli con software come sketchup e ci metti quanti vertici vuoi.
Da sketchup li salvi in 3ds e puoi importarli già texturati.
Per una lista delle funzioni ti passo direttamente un pezzo dell'header del progetto

Codice: Seleziona tutto

//GOING TO 3D MODE
export D d3d_start(D hwnd,D windowed);
export D d3d_end();
//D d3d_set_hidden(D enable);
//D d3d_set_perspective(D enable);
export D d3d_render_begin();
export D d3d_render_end();

export D d3d_set_mipmap(D enable);

//LIGHTING
export D d3d_set_lighting(D enable);
export D d3d_set_ambient(D color);
export D d3d_set_shading(D smooth);
export D d3d_light_define_direction(D ind,D dx,D dy,D dz,D col);
export D d3d_light_define_point(D ind,D x,D y,D z,D range,D col);
export D d3d_light_enable(D ind,D enable);
//VIEWING THE WORLD
export D d3d_set_projection(D xfrom,D yfrom,D zfrom,D xto,D yto,D zto,D xup,D yup,D zup);
export D d3d_set_projection_ext(D xfrom,D yfrom,D zfrom,D xto,D yto,D zto,D xup,D yup,D zup,D angle,D aspect,D znear,D zfar);

//FOG
export D d3d_set_fog(D enable,D color,D start,D end);


//DRAWING BASIC SHAPES
export D d3d_draw_block(D x1,D y1,D z1,D x2,D y2,D z2,D texid,D hrepeat,D vrepeat);
export D d3d_draw_floor(D x1,D y1,D z1,D x2,D y2,D z2,D texid,D hrepeat,D vrepeat);


//TEXTURE HANDLING
D texture_set_repeat(D repeat);
export D load_texture(S fname);
export D load_texturedir(S fname);
export D texture_destroy(D ind);
export D texture_set_directory(S dir);

//CREATING MODELS
export D d3d_model_create();
export D d3d_model_exists(D ind);
export D d3d_model_destroy(D ind);
export D d3d_model_clear(D ind);
export D d3d_model_save(D ind,S fname);
export D d3d_model_load(D ind,S fname);

export D d3d_model_load_ex(D ind,S fname,D flag);

export D d3d_material_create(D ambient,D diffuse,D diff_alpha,D emissive,D power,D specular);
export D d3d_material_destroy(D ind);

export D d3d_model_primitive_begin(D ind,D kind);
export D d3d_model_primitive_end(D ind);
//export D d3d_model_primitive_end_ex(D ind, D matID,D texID);

export D d3d_model_vertex(D ind,D x,D y,D z);
export D d3d_model_vertex_color(D ind,D x,D y,D z,D col,D alpha);
export D d3d_model_vertex_texture(D ind,D x,D y,D z,D xtex,D ytex);
export D d3d_model_vertex_texture_color(D ind,D x,D y,D z,D xtex,D ytex,D col,D alpha);
export D d3d_model_vertex_normal(D ind,D x,D y,D z,D nx,D ny,D nz);
export D d3d_model_vertex_normal_texture(D ind,D x,D y,D z,D nx,D ny,D nz,D xtex,D ytex);
export D d3d_model_vertex_normal_color(D ind,D x,D y,D z,D nx,D ny,D nz,D col,D alpha);
export D d3d_model_vertex_normal_texture_color(D ind,D x,D y,D z,D nx,D ny,D nz,D xtex,D ytex,D col,D alpha);

export D d3d_model_draw(D ind,D x,D y,D z,D texid);

export D d3d_model_calculate_normals(D ind);

//TRANSFORMATIONS
export D d3d_transform_set_identity();

export D d3d_transform_set_translation(D xt,D yt,D zt);
export D d3d_transform_set_scaling(D xs,D ys,D zs);
export D d3d_transform_set_rotation_x(D angle);
export D d3d_transform_set_rotation_y(D angle);
export D d3d_transform_set_rotation_z(D angle);
export D d3d_transform_set_rotation_axis(D xa,D ya,D za,D angle);

export D d3d_transform_add_translation(D xt,D yt,D zt);
export D d3d_transform_add_scaling(D xs,D ys,D zs);
export D d3d_transform_add_rotation_x(D angle);
export D d3d_transform_add_rotation_y(D angle);
export D d3d_transform_add_rotation_z(D angle);
export D d3d_transform_add_rotation_axis(D xa,D ya,D za,D angle);

//COLLISION DETECTION
export D d3d_collision_ray_model(D xr,D yr,D zr,D xv,D yv,D zv,D model);

Re: SlaD3D

Inviato: 15/12/2011, 19:35
da enick
Super_Slascio ha scritto:Se utilizzi i modelli invece di molte funzioni wall e floor le prestazioni non possono che migliorare, ma questo vale anche in game maker.
Se poi usi la mia DLL puoi anche evitare di prenderti la briga di preoccuparti dei poligoni, ti fai i modelli con software come sketchup e ci metti quanti vertici vuoi.
Da sketchup li salvi in 3ds e puoi importarli già texturati.
Per una lista delle funzioni ti passo direttamente un pezzo dell'header del progetto

Codice: Seleziona tutto

//GOING TO 3D MODE
export D d3d_start(D hwnd,D windowed);
export D d3d_end();
//D d3d_set_hidden(D enable);
//D d3d_set_perspective(D enable);
export D d3d_render_begin();
export D d3d_render_end();

export D d3d_set_mipmap(D enable);

//LIGHTING
export D d3d_set_lighting(D enable);
export D d3d_set_ambient(D color);
export D d3d_set_shading(D smooth);
export D d3d_light_define_direction(D ind,D dx,D dy,D dz,D col);
export D d3d_light_define_point(D ind,D x,D y,D z,D range,D col);
export D d3d_light_enable(D ind,D enable);
//VIEWING THE WORLD
export D d3d_set_projection(D xfrom,D yfrom,D zfrom,D xto,D yto,D zto,D xup,D yup,D zup);
export D d3d_set_projection_ext(D xfrom,D yfrom,D zfrom,D xto,D yto,D zto,D xup,D yup,D zup,D angle,D aspect,D znear,D zfar);

//FOG
export D d3d_set_fog(D enable,D color,D start,D end);


//DRAWING BASIC SHAPES
export D d3d_draw_block(D x1,D y1,D z1,D x2,D y2,D z2,D texid,D hrepeat,D vrepeat);
export D d3d_draw_floor(D x1,D y1,D z1,D x2,D y2,D z2,D texid,D hrepeat,D vrepeat);


//TEXTURE HANDLING
D texture_set_repeat(D repeat);
export D load_texture(S fname);
export D load_texturedir(S fname);
export D texture_destroy(D ind);
export D texture_set_directory(S dir);

//CREATING MODELS
export D d3d_model_create();
export D d3d_model_exists(D ind);
export D d3d_model_destroy(D ind);
export D d3d_model_clear(D ind);
export D d3d_model_save(D ind,S fname);
export D d3d_model_load(D ind,S fname);

export D d3d_model_load_ex(D ind,S fname,D flag);

export D d3d_material_create(D ambient,D diffuse,D diff_alpha,D emissive,D power,D specular);
export D d3d_material_destroy(D ind);

export D d3d_model_primitive_begin(D ind,D kind);
export D d3d_model_primitive_end(D ind);
//export D d3d_model_primitive_end_ex(D ind, D matID,D texID);

export D d3d_model_vertex(D ind,D x,D y,D z);
export D d3d_model_vertex_color(D ind,D x,D y,D z,D col,D alpha);
export D d3d_model_vertex_texture(D ind,D x,D y,D z,D xtex,D ytex);
export D d3d_model_vertex_texture_color(D ind,D x,D y,D z,D xtex,D ytex,D col,D alpha);
export D d3d_model_vertex_normal(D ind,D x,D y,D z,D nx,D ny,D nz);
export D d3d_model_vertex_normal_texture(D ind,D x,D y,D z,D nx,D ny,D nz,D xtex,D ytex);
export D d3d_model_vertex_normal_color(D ind,D x,D y,D z,D nx,D ny,D nz,D col,D alpha);
export D d3d_model_vertex_normal_texture_color(D ind,D x,D y,D z,D nx,D ny,D nz,D xtex,D ytex,D col,D alpha);

export D d3d_model_draw(D ind,D x,D y,D z,D texid);

export D d3d_model_calculate_normals(D ind);

//TRANSFORMATIONS
export D d3d_transform_set_identity();

export D d3d_transform_set_translation(D xt,D yt,D zt);
export D d3d_transform_set_scaling(D xs,D ys,D zs);
export D d3d_transform_set_rotation_x(D angle);
export D d3d_transform_set_rotation_y(D angle);
export D d3d_transform_set_rotation_z(D angle);
export D d3d_transform_set_rotation_axis(D xa,D ya,D za,D angle);

export D d3d_transform_add_translation(D xt,D yt,D zt);
export D d3d_transform_add_scaling(D xs,D ys,D zs);
export D d3d_transform_add_rotation_x(D angle);
export D d3d_transform_add_rotation_y(D angle);
export D d3d_transform_add_rotation_z(D angle);
export D d3d_transform_add_rotation_axis(D xa,D ya,D za,D angle);

//COLLISION DETECTION
export D d3d_collision_ray_model(D xr,D yr,D zr,D xv,D yv,D zv,D model);

x ora per convertire il mio progetto , giusto per qualche test necessiterei dei draw fondametali : d3d_draw_wall e draw_floor nell'ultimo esempio che ho scaricato c è invece solo draw_block,se hai il tempo includere e aggiornare aspetto il prossimo rilascio, dopo qualche test posso provare invece ad utilizzare modelli ;)

Re: SlaD3D

Inviato: 30/12/2011, 17:33
da Sla
Presto posto una nuova release.
Sto studiando gli shader in HLSL e sto creando un sistema alternativo di luci.
utilizzando semplicemente

Codice: Seleziona tutto

d3d_set_pixel_lighting(true)
potete renderizzare tutte le luci che avete creato in pixel lighting invece di vertex-lighting.
Immagine.

Re: SlaD3D

Inviato: 30/12/2011, 19:36
da BaronVsCorsar
Super_Slascio ha scritto:Presto posto una nuova release.
Sto studiando gli shader in HLSL e sto creando un sistema alternativo di luci.
utilizzando semplicemente

Codice: Seleziona tutto

d3d_set_pixel_lighting(true)
potete renderizzare tutte le luci che avete creato in pixel lighting invece di vertex-lighting.
Immagine.
questo significa che la luce si diffonde bene anceh se ho un poligono di 10000x10000, esattamente come se lo ridefinisco utilizzando un triangle_fan con migliaia di vertici?
molto interessante...

Re: SlaD3D

Inviato: 30/12/2011, 19:55
da Sla
Esattamente.
Il pixel-lighting funziona con uno shader che definisce il colore pixel per pixel, non importa il numero di vertici.
Il vertex-lighting di game maker colora triangolo per triangolo, un effetto cosi non può venire se non con centinaia di triangoli (l'esempio ne ha 2 per faccia).
Ora implementando lo shader per l'effetto specular, ovvero la riflessione della luce in punti più luminosi propria dei materiali più lucidi.
Immagine

Re: SlaD3D

Inviato: 30/12/2011, 20:42
da enick
:fapensare: FICATA, voglio testare con mano .v. , PS: come d3d supporterà l'utilizzo delle risorse interne?

Re: SlaD3D

Inviato: 30/12/2011, 20:50
da Sla
No, non posso utilizzare le risorse caricate sul device di game maker perchè è creato con Directx8, mentre sto facendo la DLL con DX9. Dovrai salvare la risorsa in un file e caricarla con le apposite funzioni.

Re: SlaD3D

Inviato: 30/12/2011, 21:37
da Jak
Sei arrivato all'hlsl finalmente, ottimo lavoro :sisisi:
BaronVsCorsar ha scritto:questo significa che la luce si diffonde bene anceh se ho un poligono di 10000x10000, esattamente come se lo ridefinisco utilizzando un triangle_fan con migliaia di vertici?
molto interessante...
Baron che si stupisce di fronte ad uno shader basilare? Incredibile!
Quindi pensavi che una sfera bump mappata avesse decine di migliaia di triangoli? :paura:
Ti sorprenderà sopratutto la velocità di effetti simili :twisted:

Re: SlaD3D

Inviato: 30/12/2011, 21:41
da enick
Super_Slascio ha scritto:No, non posso utilizzare le risorse caricate sul device di game maker perchè è creato con Directx8, mentre sto facendo la DLL con DX9. Dovrai salvare la risorsa in un file e caricarla con le apposite funzioni.
Possibile che ci sia la piu remoto possibilità di importare sprites? cioe *.gmspr con relative informazioni x rimediare a questa "pecca" ? :fapensare:

Re: SlaD3D

Inviato: 30/12/2011, 22:17
da Sla
Fai come tutti i veri giochi e carichi la risorsa esternamente. Se proprio vuoi puoi posso aggiungere qualche funzione per caricare file criptati e protetti da password (che scegli te).

Re: SlaD3D

Inviato: 30/12/2011, 22:24
da enick
Super_Slascio ha scritto:Fai come tutti i veri giochi e carichi la risorsa esternamente. Se proprio vuoi puoi posso aggiungere qualche funzione per caricare file criptati e protetti da password (che scegli te).
era piu per una questione di comodità che ho riscontrato in d3d che appunto lo permette a differenza di u3d , so bene che l'importazione delle risorse è una cosa ormai obbligatoria per un gioco come si deve ma la mie esigenze nascono dal fatto che per i tds 3d,un misto di sprites e scenario 3d, ho molto a che fare con immagini 2d,dunque sprites, dunque variabili relative agli sprites come xorigin e y origin ecc...

Poi se questo ovviamente non è fattibile mi adatterò dico solo che siccome sempre di GM si tratta rendere possibile o quantomeno "simulare" o rattoppare questa "falla" sarebbe un idea non di certo inutile.

Re: SlaD3D

Inviato: 30/12/2011, 22:47
da Sla
non capisco..
nel 3d cambia qualcosa se modifichi i valori xorigin/yorigin di una sprite nel momento in cui la usi come texture? mi pare proprio di no.. cosi come le altre variabili.
Se è una questione di comodità per poter lavorare sulla immagine sprite con gm ti fai lo script:
sprite_save("ciao.bmp");
dll_load_texture("ciao.bmp")
file_delete("ciao.bmp");
e lo esegui una volta ad inizio gioco.

cmq, implementato lo specular, viene uguale alla immagine postata prima, che avevo preso da wiki 8)

Re: SlaD3D

Inviato: 30/12/2011, 22:57
da enick
ora che ci penso forse sto dicendo delle cazzate, però ad esempio in u3d ho potuto impostare xorigin e y origin solamente nel "draw_cube" , mentre nei wall e floor no, queste assurdità spero che nel tuo non ci saranno :D , poi un altra cosa che secondo me è utilissima sarebbe utile una funzione che restituisca le coordinate 2d del mouse col 3d attivo.

Re: SlaD3D

Inviato: 30/12/2011, 23:04
da Sla
ehm... le coordinate 2d del mouse non cambiano.
Intendi il picking? Cioè quale punto nello spazio 3d stai puntando col mouse (ammesso che stai puntando un triangolo disegnato) ?
Non è difficile da fare :)

(Eccoti una teapot illuminata a puntino con l'effetto specular appena aggiunto)
Immagine

Re: SlaD3D

Inviato: 30/12/2011, 23:16
da enick
Super_Slascio ha scritto:ehm... le coordinate 2d del mouse non cambiano.
Intendi il picking? Cioè quale punto nello spazio 3d stai puntando col mouse (ammesso che stai puntando un triangolo disegnato) ?
Non è difficile da fare :)

(Eccoti una teapot illuminata a puntino con l'effetto specular appena aggiunto)
Immagine
davvero bellissimo effetto... comunque parlavo del rilevamento di mouse_x e mouse_y, dato che nel 3d queste coordinate non corrispondono all'effettiva posizione del mouse.Infatti esistono script per convertire il vettore delle coordinate del mouse in coordinate 2d mi pare.

Re: SlaD3D

Inviato: 30/12/2011, 23:18
da Sla
?!? si che corrispondono! Cmq, anche se cosi non fosse, gm resta nella modalità 2d mentre la dll disegna sulla finestra di gioco. mouse_x e mouse_y non vengono intaccati

Re: SlaD3D

Inviato: 30/12/2011, 23:21
da enick
Super_Slascio ha scritto:?!? si che corrispondono! Cmq, anche se cosi non fosse, gm resta nella modalità 2d mentre la dll disegna sulla finestra di gioco. mouse_x e mouse_y non vengono intaccati
be nel d3d e nell u3d vengono "sballati" se mai dovessi far ruotare qualcosa in base a point_direction(x,y,mouse_x,mouse_y) la direzione non corrisponderebbe a quella diretta verso il mouse come nel 2d.

Re: SlaD3D

Inviato: 30/12/2011, 23:22
da Tizzio
Super_Slascio ha scritto:ehm... le coordinate 2d del mouse non cambiano.
Intendi il picking? Cioè quale punto nello spazio 3d stai puntando col mouse (ammesso che stai puntando un triangolo disegnato) ?
Non è difficile da fare :)

(Eccoti una teapot illuminata a puntino con l'effetto specular appena aggiunto)
Immagine
http://learningwebgl.com/blog/?p=1658
Cel'avete tutti colla teiera?