AmiDARK Engine – Alpha test release 1

11 sujets de 1 à 11 (sur un total de 11)

  • AmiDARK

      #7999

      Salut à tous,

      J’ai uploadé sur os4depot.net une version de démo/test de l’AmiDARK Engine dans son état actuel de développement.

      Elle est disponible ici :

      http://www.os4depot.net/?function=showfile&file=development/language/amidark_engine.lha

      Cette version est encore loin de la version finale du produit. Seules quelques fonctions sont utilisables mais déjà, vous pouvez voir un peu comment le système fonctionne et son potentiel.

      Cette version n’est pas faite pour du développement ! uniquement pour du test et de l’évaluation.

      Vous pouvez glisser vos commentaires sur le projet ici ou par e-mail.

      @+

      AmiDARK

      thellier

        #123740

        Bonjour.

        Bravo pour ton projet AmiDARK Engine je vais le télécharger et tester.

        Un point est peu clair qu’apporte AmiDARK Engine par rapport à un prog GL + glut (qui serait lui aussi portable sur toute plateformes) ? Même si j’ ai cru notamment voir que l’on pouvais charger des textures ou des objets directement avec AmiDARK Engine

        mais y doit y avoir d’autres choses…

        D’autre part vaudrait il pas mieux utiliser LibDevIL au lieu de LibPNG pour avoir ainsi le support de tout les formats ?

        Alain Thellier

        AmiDARK

          #123741

          @Thellier :

          AmiDARK Engine est une sorte de DarkGDK pour Amiga.

          C’est un intermédiaire entre le C et le langage basic.

          Les jeux de commandes font tout le travail pour toi genre :

          DELoadObject( char* Fichier, int ObjetID );

          Qui charge un objet 3D

          DETextureObject( int ObjetID, int ImageID );

          Texture un objet

          , etc …

          L’objectif est de fournir un outil complet et qui permette de créer rapidement des jeux sur Amiga… Il couvrira plusieurs aspects ( tracés 2D, images, sprites, objets 3D, matrices/terrains, lumières 3D, brouillard, shaders, fichiers, blocs mémoire, etc … En théorie quasiment les mêmes jeux de commandes que DarkGDK (et donc que DarkBASIC Professional)

          Voila :)

          J’espère avoir répondu à ta question.

          @+

          AmiDARK

          Concernant les formats de fichiers supportés, rien n’est définitif. J’avais besoin d’avoir un moins 1 format supporté pour pouvoir faire les tests 2D et 3D des fonctions que je développe pour le GDK ( Game Development Kit )

          thellier

            #123742

            Ok je vois mieux maintenant

            Ton DELoadObject peut charger quoi comme format d’objet ?

            Dans « Tales of Tamar » j’utilisais surtout le .OBJ/.MTL

            qui est un format assez bien… Et pour les textures soit du RAW ou du JPEG 99% encapsulé dans le même fichier que l’objet 3D avce libjpg (pour les textures alpha = un chunck/fichier jpg 24 bits et un autre 8bits )

            >quasiment les mêmes jeux de commandes que DarkGDK

            Ca m’aide pas vraiment comme je connais pas non plus ;-P

            Anyway bon courage dans ton projet

            Quand j’aurais testé AmiDARK Engine j’en dirai plus

            Alain

            (tu peut me mailer si besoin)

            AmiDARK

              #123743

              Pour l’instant pas grand chose :p

              Seulement un format custmo made in me :p

              Mais il est prévu 3DS, .X, DBO et le format AmiDARK Engine 3D Object…

              Peut-être d’autres formats mais rien de sûr pour l’instant…

              elwood

                #123744

                Les .lwo c’est indispensable :-)

                thellier

                  #123745

                  >.lwo c’est indispensable

                  Bon voilà ce que j’ai sur LWO : je fais mon père Noël…

                  (implémenter ReOrderBytes si on passe sur AROS x86)

                  Alain

                  /*==========================================================================*/

                  #define SKIPBYTES(n) L.pt=L.pt+n;

                  /*==========================================================================*/

                  void GetNameLWO(UBYTE *name)

                  {

                  LONG n;

                  strcpy(name,L.pt);

                  n=strlen(name)+1;

                  if(n AND 1) n++;

                  SKIPBYTES(n);

                  }

                  /*==========================================================================*/

                  void GetNameC4D(UBYTE *name)

                  {

                  LONG size,n;

                  size=L.pt[0];

                  NLOOP(size)

                  name[n]=L.pt[n+1];

                  name=0;

                  n=size+1;

                  if(n AND 1) n++;

                  SKIPBYTES(n);

                  }

                  /*==========================================================================*/

                  BYTE GetByte()

                  {

                  BYTE *pt;

                  pt=(BYTE *)L.pt;

                  SKIPBYTES(1);

                  return(*pt);

                  }

                  /*==========================================================================*/

                  WORD GetWord()

                  {

                  WORD *pt;

                  pt=(WORD *)L.pt;

                  ReOrderBytes(L.pt,2,0,1,1);

                  SKIPBYTES(2);

                  return(*pt);

                  }

                  /*==========================================================================*/

                  LONG GetLong()

                  {

                  LONG *pt;

                  pt=(LONG *)L.pt;

                  ReOrderBytes(L.pt,4,0,1,1);

                  SKIPBYTES(4);

                  return(*pt);

                  }

                  /*==========================================================================*/

                  float GetFloat()

                  {

                  float *fpt;

                  LONG *pt;

                  pt=(LONG *)L.pt;

                  ReOrderBytes(L.pt,4,0,1,1);

                  fpt=(float *)pt;

                  SKIPBYTES(4);

                  return(*fpt);

                  }

                  /*==========================================================================*/

                  void GetVector(float *f)

                  {

                  UBYTE n;

                  NLOOP(3)

                  f[n]=GetFloat();

                  }

                  /*==========================================================================*/

                  void GetID(UBYTE *ID)

                  {

                  ID[0]=L.pt[0];

                  ID[1]=L.pt[1];

                  ID[2]=L.pt[2];

                  ID[3]=L.pt[3];

                  ID[4]=0;

                  L.pt=L.pt+4;

                  }

                  /*==========================================================================*/

                  WBOOL LoadNextChunck(FILE *fp)

                  {

                  LONG size;

                  /* REM(LoadNextChunck) */

                  size=fread(&ChunckHeader,4*2,1,fp);

                  if(size==0) {REM(cant load ChunckHeader!!!);return(FALSE);}

                  L.pt =&ChunckHeader;

                  GetID(&ChunckID);

                  ChunckSize=GetLong();

                  if(ChunckSize AND 1) ChunckSize++; /* IFF spec: pad byte if odd chunk length*/

                  ChunckBuffer=MYmalloc(ChunckSize, »ChunckBuffer »);

                  if(ChunckBuffer==NULL) return(FALSE);

                  REMP(« IFF CHUNCK [%s] %d bytes ==================n »,ChunckID,ChunckSize);

                  size=fread(ChunckBuffer,ChunckSize,1,fp);

                  if(size==0) {REM(cant load ChunckBuffer!!!);return(FALSE);}

                  L.pt=ChunckBuffer;

                  DumpMemHex(L.pt,80);

                  ChunckBufferEnd=ChunckBuffer+ChunckSize;

                  return(TRUE);

                  }

                  /*==========================================================================*/

                  void LoadLWO()

                  {

                  FILE *fp=NULL;

                  LONG PInb,Fnb,Fnum,Tnum,Onb,Vnb,Inum,Onum,m,n,i,UVi,MAnb;

                  struct object3D *O;

                  struct texture3D *T;

                  struct objectTMP *OT;

                  struct faceTMP *FT;

                  LONG *UVI;

                  WORD level;

                  float x,y,z,u,v;

                  UBYTE *datas;

                  struct uv3D *UV;

                  struct material3D *MA;

                  UBYTE name[256];

                  LONG size;

                  LONG color;

                  UBYTE *RGBA;

                  REM(loadLWO)

                  Engine.FileByteOrder=’M’;

                  if(L.VersionFormat==0) return;

                  /*


                  */

                  while (GetHeaderIFF()==TRUE)

                  {

                  /*


                  */

                  IFCHUNCK(LAYR) /* object chunck */

                  {

                  SKIPBYTES(2+2);

                  x=GetFloat();

                  y=GetFloat();

                  z=GetFloat();

                  level=0;

                  GetNameLWO(&name);

                  if ((ChunckSize-16-strlen(name)-1) >= 2)

                  {

                  Onum=GetWord(); /* still a parent object in chunck*/

                  if(Onum!=-1)

                  { OT=GET(&Engine.PAT.OT,Onum); level=OT->FR.level+1; }

                  }

                  Onum=AddObjectTmp(name,level);

                  OT=GET(&Engine.PAT.OT,Onum);

                  }

                  /*


                  */

                  IFCHUNCK(BBOX)

                  {

                  GetVector((float *)&OT->min.x);

                  GetVector((float *)&OT->max.x);

                  }

                  /*


                  */

                  IFCHUNCK(PNTS)

                  {

                  Onb=GETNB(&Engine.PAT.OT);

                  if(Onb==0)

                  {

                  strcpy(name,L.filename);

                  name[strlen(name) – 4]=0; /* cut .lwo */

                  Onum=AddObjectTmp(name,0);

                  OT=GET(&Engine.PAT.OT,Onum);

                  }

                  Vnb=ChunckSize/12;

                  VOIR(Vnb)

                  NLOOP(Vnb)

                  {

                  x=GetFloat();

                  y=GetFloat();

                  z=GetFloat();

                  u=0.0;

                  v=0.0;

                  AddV(x,y,z);

                  AddUV(u,v); /* define also an UV mapping per point */

                  }

                  GO

                  }

                  /*


                  */

                  if(L.VersionFormat==1)

                  IFCHUNCK(POLS)

                  {

                  REM(Faces – L.VersionFormat 1.0)

                  while(L.ptVnb))

                  AddVIUVI(i,i); /* use also fake UV */

                  }

                  Tnum=GetWord();

                  if(Tnum<0) {Tnum=-Tnum; Fnb=GetWord();}

                  FT=LAST(&Engine.PAT.FT);

                  FT->Tnum=Tnum-1;

                  VOIR(FT->Tnum)

                  }

                  }

                  /*


                  */

                  if(L.VersionFormat==6)

                  IFCHUNCK(POLS)

                  IFSUBCHUNCK(FACE) /* faces */

                  {

                  REM(Faces – L.VersionFormat 6.0)

                  while(L.pt */

                  IFCHUNCK(SRFS)

                  {

                  REM(Surfaces names…)

                  while(L.pt */

                  IFCHUNCK(SURF)

                  {

                  REM(Materials…)

                  MAnb=GETNB(&Engine.PAV.MA);

                  MA=NEW(&Engine.PAV.MA);

                  GetNameLWO(MA->name);

                  REMP(« MATERIAL[%d] <%s>n »,MAnb,MA->name);

                  while(L.ptbase.RGBA[0]=GetByte();

                  MA->base.RGBA[1]=GetByte();

                  MA->base.RGBA[2]=GetByte();

                  MA->base.RGBA[3]=GetByte();

                  Tnum=GETNB(&Engine.PAV.T);

                  T=NEW(&Engine.PAV.T);

                  InitializeT(T, » »,2,2,32,MA->name);

                  RGBA=T->pt;

                  MLOOP(2*2)

                  {

                  RGBA[0]=m+MA->base.RGBA[0];

                  RGBA[1]=m+MA->base.RGBA[1];

                  RGBA[2]=m+MA->base.RGBA[2];

                  RGBA[3]=255;

                  RGBA=&(RGBA[4]);

                  }

                  }

                  IFSUBCHUNCK(FLAG)

                  MA->MaterialMode =GetWord();

                  IFSUBCHUNCK(LUMI)

                  MA->luminosity.value =1.0/256.0*(float)GetWord();

                  IFSUBCHUNCK(DIFF)

                  MA->diffuse.value =1.0/256.0*(float)GetWord();

                  IFSUBCHUNCK(SPEC)

                  MA->specular.value =1.0/256.0*(float)GetWord();

                  IFSUBCHUNCK(REFL)

                  MA->reflection.value =1.0/256.0*(float)GetWord();

                  IFSUBCHUNCK(TRAN)

                  MA->transparency.value =1.0/256.0*(float)GetWord();

                  IFSUBCHUNCK(VLUM)

                  MA->luminosity.value =GetFloat();

                  IFSUBCHUNCK(VDIF)

                  MA->diffuse.value =GetFloat();

                  IFSUBCHUNCK(VSPC)

                  MA->specular.value =GetFloat();

                  IFSUBCHUNCK(VRFL)

                  MA->reflection.value =GetFloat();

                  IFSUBCHUNCK(VTRN)

                  MA->transparency.value =GetFloat();

                  IFSUBCHUNCK(3DOS)

                  MA->glossiness.value =1.0/1024.0*(float)GetWord();

                  }

                  GO

                  }

                  /*


                  */

                  IFCHUNCK(PTAG)

                  IFSUBCHUNCK(SURF)

                  {

                  REM(Texture per face…)

                  SKIPBYTES(4);

                  Fnb=(ChunckSize-4)/4;

                  NLOOP(Fnb)

                  {

                  Fnum=GetWord();

                  Tnum=GetWord();

                  FT=(struct faceTMP *)OT->FT;

                  FT[Fnum].Tnum=Tnum-1;

                  }

                  }

                  /*


                  */

                  IFCHUNCK(VMAP)

                  IFSUBCHUNCK(TXUV)

                  {

                  REM(UV texturing…)

                  SKIPBYTES(4);

                  n=GetWord(); /*dimension=2*/

                  GetNameLWO(name);

                  SKIPBYTES(2);

                  Vnb=(ChunckSize -4 -2 -n)/10;

                  VOIR(Vnb)

                  NLOOP(Vnb)

                  {

                  i=GetWord();

                  u =GetFloat();

                  v =GetFloat();

                  if (u < 0.0) u=0.0; if (1.0 <= u) u=0.9999; if (v < 0.0) v=0.0; if (1.0 <= v) v=0.9999; UV=OT->UV;

                  UV.u=u;

                  UV.v=v;

                  SKIPBYTES(10);

                  }

                  }

                  /*


                  */

                  IFCHUNCK(VMAD)

                  IFSUBCHUNCK(TXUV)

                  {

                  REM(UV texturing…)

                  SKIPBYTES(4);

                  n=GetWord(); /*dimension=2*/

                  GetNameLWO(name);

                  SKIPBYTES(2);

                  Vnb=(ChunckSize -4 -2 -n)/12;

                  VOIR(Vnb)

                  NLOOP(Vnb)

                  {

                  i =GetWord();

                  Fnum =GetWord();

                  u =GetFloat();

                  v =GetFloat();

                  AddUV(u,v); /* define also a new UV mapping per face/point */

                  UVi=OT->UVnb;

                  FT=(struct faceTMP *)OT->FT;

                  UVI=FT[Fnum].UVI;

                  UVI=UVi; /* index on this new UV value */

                  SKIPBYTES(12);

                  }

                  }

                  /*


                  */

                  }

                  Fnum=GETNB(&Engine.PAT.FT);

                  if(Fnum==0)

                  {

                  AddFaceTmp(0);

                  NLOOP(OT->Pnb)

                  AddVIUVI(n,n); /* use also fake UV */

                  }

                  }

                  /*==========================================================================*/

                  AmiDARK

                    #123746

                    Bonsoir

                    et merci pour vos réponses.

                    Concernant ces requêtes, merci de les faire parvenir sur mon e-mail que je puisse centraliser le tout.

                    E-mail : fred ( at ) amidark-engine ( dot ) com

                    Merci :)

                    A partir de cela, je verrais si je peux incorporer cela dans mon moteur de jeu …

                    (à moins que ce soit un truc de ouf … cela devrait pouvoir être mis en place)

                    Teutch

                      #123747

                      Salut !

                      C’est un projet énorme, bravo ! :clap:

                      A1230 Blizzard IV + 8Mo + DD 320Mo + WB 3.0 (en vacances)
                      A4000 PPC 604 + CyberVision + TOCCATA + 128Mo + WB 3.9 (en vacances)
                      WinUAE (pour assurer la perm)

                      ElWiNoL

                        #123748

                        Salut jeune homme, content de te revoir par ici :pint:

                        Je peut te dire que ton projet fait quelques heureux !

                        Bravo :clap: :clap: :clap:

                        AmiDARK

                          #123749

                          Merci à tous pour votre soutien :)

                          J’ai récupéré de la doc pour les .3DS et les .OBJ.

                          J’ai aussi trouvé des informations sur le .X (ascii)

                          Je vais essayer d’ajouter le support pour ces formats d’objets 3D.

                          @+

                        11 sujets de 1 à 11 (sur un total de 11)

                        • Vous devez être connecté pour répondre à ce sujet.

                        Forums AmigaOS, MorphOS et AROS Développement AmiDARK Engine – Alpha test release 1

                        Amiga Impact