feat: ajout fichier 3DS, et debut écriture fonction de chargement fichier 3DS

This commit is contained in:
Nicolas Hordé 2018-10-30 19:21:18 +01:00
parent c4e4462313
commit 5f526bf2b7
5 changed files with 1629 additions and 2 deletions

View File

@ -5,7 +5,16 @@
#include "matrix.h"
#include "video.h"
typedef struct vertex3d{
typedef struct model3d {
u8 name[12];
matrix44 view;
vector4 **vertexlist;
u16 vertexnb;
u16 **facelist;
u16 facenb;
} model3d __attribute__ ((packed));
typedef struct vertex3d {
union {
struct {
float x;
@ -18,3 +27,106 @@ typedef struct vertex3d{
void proj(vector4 list[], vertex2d plane[], vector4 origin[], u16 number, float factor);
void cube(vector4 list[], vector4 *origin, u16 size);
/*******************************************************************************/
/* Fichier 3DS */
#define MAIN3DS 0x4D4D
//>------ Main Chunks
#define EDIT3DS 0x3D3D // this is the start of the editor config
#define KEYF3DS 0xB000 // this is the start of the keyframer config
//>------ sub defines of EDIT3DS
#define EDIT_MATERIAL 0xAFFF
#define EDIT_CONFIG1 0x0100
#define EDIT_CONFIG2 0x3E3D
#define EDIT_VIEW_P1 0x7012
#define EDIT_VIEW_P2 0x7011
#define EDIT_VIEW_P3 0x7020
#define EDIT_VIEW1 0x7001
#define EDIT_BACKGR 0x1200
#define EDIT_AMBIENT 0x2100
#define EDIT_OBJECT 0x4000
#define EDIT_UNKNW01 0x1100
#define EDIT_UNKNW02 0x1201
#define EDIT_UNKNW03 0x1300
#define EDIT_UNKNW04 0x1400
#define EDIT_UNKNW05 0x1420
#define EDIT_UNKNW06 0x1450
#define EDIT_UNKNW07 0x1500
#define EDIT_UNKNW08 0x2200
#define EDIT_UNKNW09 0x2201
#define EDIT_UNKNW10 0x2210
#define EDIT_UNKNW11 0x2300
#define EDIT_UNKNW12 0x2302 // new chunk type
#define EDIT_UNKNW13 0x3000
#define EDIT_UNKNW14 0xAFFF
//>------ sub defines of EDIT_MATERIAL
#define MAT_NAME01 0xA000 //> includes name (see mli doc for materials)
//>------ sub defines of EDIT_OBJECT
#define OBJ_TRIMESH 0x4100
#define OBJ_LIGHT 0x4600
#define OBJ_CAMERA 0x4700
#define OBJ_UNKNWN01 0x4010
#define OBJ_UNKNWN02 0x4012 //>>---- Could be shadow
//>------ sub defines of OBJ_CAMERA
#define CAM_UNKNWN01 0x4710 // new chunk type
#define CAM_UNKNWN02 0x4720 // new chunk type
//>------ sub defines of OBJ_LIGHT
#define LIT_OFF 0x4620
#define LIT_SPOT 0x4610
#define LIT_UNKNWN01 0x465A
//>------ sub defines of OBJ_TRIMESH
#define TRI_VERTEXL 0x4110
#define TRI_FACEL2 0x4111 // unknown yet
#define TRI_FACEL1 0x4120
#define TRI_SMOOTH 0x4150
#define TRI_LOCAL 0x4160
#define TRI_VISIBLE 0x4165
//>>------ sub defs of KEYF3DS
#define KEYF_UNKNWN01 0xB009
#define KEYF_UNKNWN02 0xB00A
#define KEYF_FRAMES 0xB008
#define KEYF_OBJDES 0xB002
#define KEYF_OBJHIERARCH 0xB010
#define KEYF_OBJDUMMYNAME 0xB011
#define KEYF_OBJUNKNWN01 0xB013
#define KEYF_OBJUNKNWN02 0xB014
#define KEYF_OBJUNKNWN03 0xB015
#define KEYF_OBJPIVOT 0xB020
#define KEYF_OBJUNKNWN04 0xB021
#define KEYF_OBJUNKNWN05 0xB022
//>>------ these define the different color chunk types
#define COL_RGB 0x0010
#define COL_TRU 0x0011
#define COL_UNK 0x0013 // unknown
//>>------ defines for viewport chunks
#define TOP 0x0001
#define BOTTOM 0x0002
#define LEFT 0x0003
#define RIGHT 0x0004
#define FRONT 0x0005
#define BACK 0x0006
#define USER 0x0007
#define CAMERA 0x0008 // 0xFFFF is the code read from file
#define LIGHT 0x0009
#define DISABLED 0x0010
#define BOGUS 0x0011

1476
lib/3D/sphere.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -54,3 +54,39 @@ void cube(vector4 list[], vector4 *origin, u16 size)
list[7].z=origin->z+size;
list[7].w=1.0f;
}
/*******************************************************************************/
/* Charge un fichier 3DS */
void load3ds(u8 *pointer, model3d *model)
{
u16 chunk;
u32 size;
bool formatok;
while(true) {
chunk=(u16) *(pointer);
pointer+=2;
size=(u32) *(pointer);
pointer+=4;
switch(chunk)
{
case MAIN3DS:
break;
case EDIT3DS:
break;
case EDIT_OBJECT:
break;
case OBJ_TRIMESH:
break;
case TRI_VERTEXL:
break;
case TRI_FACEL1:
break;
case TRI_LOCAL:
break;
default:
break;
}
}
}

View File

@ -1,4 +1,4 @@
u8 ansilogo[]="\
static u8 ansilogo[]="\
\033[0m\033[1m\
\xDA\033[0m\xC4\xC4\033[1;30m\xC4\033[0m\xC4\033[1;30m\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\033[37m \033[0;31mC\033[1;37m \033[31m\x4F\033[37m \033[33mS\033[37m \033[36m2\033[37m \033[0;36m0\033[1;37m \033[34m0\033[37m \033[0;34m0\033[1;37m \033[0mV2.2.1\033[1m \033[30m\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xBF\r\n\
\033[0m\xB3\033[77C\033[1;30m\xB3\r\n\

View File

@ -15,6 +15,7 @@
#include "math.h"
#include "debug.h"
#include "VGA/ansi.c"
#include "3D/sphere.c"
static command commands[] = {
{"reboot" , "", &rebootnow},
@ -427,6 +428,8 @@ int test3d()
print("Mode graphique necessaire afin de lancer ce programme\r\n");
return 1;
}
model3d model;
load3ds(&sphere, &model);
vector4 list3d[8];
vertex2d list2d[8];
matrix44 rotatex,rotatey,rotatez,mrotatex,mrotatey,mrotatez;