mirror of
https://github.com/bulletphysics/bullet3
synced 2024-12-16 22:50:04 +00:00
160 lines
2.7 KiB
C
160 lines
2.7 KiB
C
#ifndef OBJ_PARSER_H
|
|
#define OBJ_PARSER_H
|
|
|
|
#include "list.h"
|
|
|
|
#define OBJ_FILENAME_LENGTH 500
|
|
#define MATERIAL_NAME_SIZE 255
|
|
#define OBJECT_NAME_SIZE 255
|
|
|
|
#define OBJ_LINE_SIZE 500
|
|
#define MAX_VERTEX_COUNT 4 //can only handle quads or triangles
|
|
|
|
|
|
|
|
typedef struct obj_face
|
|
{
|
|
int vertex_index[MAX_VERTEX_COUNT];
|
|
int normal_index[MAX_VERTEX_COUNT];
|
|
int texture_index[MAX_VERTEX_COUNT];
|
|
int vertex_count;
|
|
int material_index;
|
|
};
|
|
|
|
typedef struct obj_sphere
|
|
{
|
|
int pos_index;
|
|
int up_normal_index;
|
|
int equator_normal_index;
|
|
int texture_index[MAX_VERTEX_COUNT];
|
|
int material_index;
|
|
};
|
|
|
|
typedef struct obj_plane
|
|
{
|
|
int pos_index;
|
|
int normal_index;
|
|
int rotation_normal_index;
|
|
int texture_index[MAX_VERTEX_COUNT];
|
|
int material_index;
|
|
};
|
|
|
|
typedef struct obj_vector
|
|
{
|
|
double e[3];
|
|
};
|
|
|
|
typedef struct obj_material
|
|
{
|
|
char name[MATERIAL_NAME_SIZE];
|
|
char texture_filename[OBJ_FILENAME_LENGTH];
|
|
double amb[3];
|
|
double diff[3];
|
|
double spec[3];
|
|
double reflect;
|
|
double refract;
|
|
double trans;
|
|
double shiny;
|
|
double glossy;
|
|
double refract_index;
|
|
};
|
|
|
|
typedef struct obj_camera
|
|
{
|
|
int camera_pos_index;
|
|
int camera_look_point_index;
|
|
int camera_up_norm_index;
|
|
};
|
|
|
|
typedef struct obj_light_point
|
|
{
|
|
int pos_index;
|
|
int material_index;
|
|
};
|
|
|
|
typedef struct obj_light_disc
|
|
{
|
|
int pos_index;
|
|
int normal_index;
|
|
int material_index;
|
|
};
|
|
|
|
typedef struct obj_light_quad
|
|
{
|
|
int vertex_index[MAX_VERTEX_COUNT];
|
|
int material_index;
|
|
};
|
|
|
|
typedef struct obj_object
|
|
{
|
|
int vertex_offset;
|
|
int face_offset;
|
|
char name[OBJECT_NAME_SIZE];
|
|
};
|
|
|
|
typedef struct obj_growable_scene_data
|
|
{
|
|
// vector extreme_dimensions[2];
|
|
char scene_filename[OBJ_FILENAME_LENGTH];
|
|
char material_filename[OBJ_FILENAME_LENGTH];
|
|
|
|
list vertex_list;
|
|
list vertex_normal_list;
|
|
list vertex_texture_list;
|
|
|
|
list face_list;
|
|
list sphere_list;
|
|
list plane_list;
|
|
|
|
list light_point_list;
|
|
list light_quad_list;
|
|
list light_disc_list;
|
|
|
|
list material_list;
|
|
|
|
list object_list;
|
|
|
|
obj_camera *camera;
|
|
};
|
|
|
|
typedef struct obj_scene_data
|
|
{
|
|
obj_vector **vertex_list;
|
|
obj_vector **vertex_normal_list;
|
|
obj_vector **vertex_texture_list;
|
|
|
|
obj_face **face_list;
|
|
obj_sphere **sphere_list;
|
|
obj_plane **plane_list;
|
|
|
|
obj_light_point **light_point_list;
|
|
obj_light_quad **light_quad_list;
|
|
obj_light_disc **light_disc_list;
|
|
|
|
obj_material **material_list;
|
|
|
|
obj_object** object_list;
|
|
int object_count;
|
|
|
|
int vertex_count;
|
|
int vertex_normal_count;
|
|
int vertex_texture_count;
|
|
|
|
int face_count;
|
|
int sphere_count;
|
|
int plane_count;
|
|
|
|
int light_point_count;
|
|
int light_quad_count;
|
|
int light_disc_count;
|
|
|
|
int material_count;
|
|
|
|
obj_camera *camera;
|
|
};
|
|
|
|
int parse_obj_scene(obj_scene_data *data_out, char *filename);
|
|
void delete_obj_data(obj_scene_data *data_out);
|
|
|
|
#endif
|