feat: ajout fichier 3DS, et debut écriture fonction de chargement fichier 3DS
This commit is contained in:
parent
c4e4462313
commit
5f526bf2b7
114
include/3d.h
114
include/3d.h
|
@ -5,7 +5,16 @@
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "video.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 {
|
union {
|
||||||
struct {
|
struct {
|
||||||
float x;
|
float x;
|
||||||
|
@ -18,3 +27,106 @@ typedef struct vertex3d{
|
||||||
|
|
||||||
void proj(vector4 list[], vertex2d plane[], vector4 origin[], u16 number, float factor);
|
void proj(vector4 list[], vertex2d plane[], vector4 origin[], u16 number, float factor);
|
||||||
void cube(vector4 list[], vector4 *origin, u16 size);
|
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
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
36
lib/3d.c
36
lib/3d.c
|
@ -54,3 +54,39 @@ void cube(vector4 list[], vector4 *origin, u16 size)
|
||||||
list[7].z=origin->z+size;
|
list[7].z=origin->z+size;
|
||||||
list[7].w=1.0f;
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
u8 ansilogo[]="\
|
static u8 ansilogo[]="\
|
||||||
\033[0m\033[1m\
|
\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\
|
\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\
|
\033[0m\xB3\033[77C\033[1;30m\xB3\r\n\
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#include "math.h"
|
#include "math.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "VGA/ansi.c"
|
#include "VGA/ansi.c"
|
||||||
|
#include "3D/sphere.c"
|
||||||
|
|
||||||
static command commands[] = {
|
static command commands[] = {
|
||||||
{"reboot" , "", &rebootnow},
|
{"reboot" , "", &rebootnow},
|
||||||
|
@ -427,6 +428,8 @@ int test3d()
|
||||||
print("Mode graphique necessaire afin de lancer ce programme\r\n");
|
print("Mode graphique necessaire afin de lancer ce programme\r\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
model3d model;
|
||||||
|
load3ds(&sphere, &model);
|
||||||
vector4 list3d[8];
|
vector4 list3d[8];
|
||||||
vertex2d list2d[8];
|
vertex2d list2d[8];
|
||||||
matrix44 rotatex,rotatey,rotatez,mrotatex,mrotatey,mrotatez;
|
matrix44 rotatex,rotatey,rotatez,mrotatex,mrotatey,mrotatez;
|
||||||
|
|
Loading…
Reference in New Issue