WoWs Model Exported
World of Warships 3D model Exporter
Loading...
Searching...
No Matches
wows-geometry.h
Go to the documentation of this file.
1
20#include <stdint.h>
21#include <stdbool.h>
22
27#define WOWS_ERROR_NOT_A_FILE 12
28#define WOWS_ERROR_NOT_A_DIR 13
29#define WOWS_ERROR_UNKNOWN 7
39#define WOWS_VER_UNKNOWN "unknown"
40#define WOWS_ID_UNKNOWN 0
42#define WOWS_VER_SET3_XYNUV2IIIWWTBPC "set3/xyznuv2iiiwwtbpc"
43#define WOWS_ID_SET3_XYNUV2IIIWWTBPC 1
44
45#define WOWS_VER_SET3_XYNUV2TBIPC "set3/xyznuv2tbipc"
46#define WOWS_ID_SET3_XYNUV2TBIPC 2
47
48#define WOWS_VER_SET3_XYNUV2TBPC "set3/xyznuv2tbpc"
49#define WOWS_ID_SET3_XYNUV2TBPC 3
50
51#define WOWS_VER_SET3_XYNUVIIIWWPC "set3/xyznuviiiwwpc"
52#define WOWS_ID_SET3_XYNUVIIIWWPC 4
53
54#define WOWS_VER_SET3_XYNUVIIIWWR "set3/xyznuviiiwwr"
55#define WOWS_ID_SET3_XYNUVIIIWWR 5
56
57#define WOWS_VER_SET3_XYNUVIIIWWTBPC "set3/xyznuviiiwwtbpc"
58#define WOWS_ID_SET3_XYNUVIIIWWTBPC 6
59
60#define WOWS_VER_SET3_XYNUVPC "set3/xyznuvpc"
61#define WOWS_ID_SET3_XYNUVPC 7
62
63#define WOWS_VER_SET3_XYNUVRPC "set3/xyznuvrpc"
64#define WOWS_ID_SET3_XYNUVRPC 8
65#define WOWS_SIZE_XYNUVRPC 28
67#define WOWS_VER_SET3_XYNUVTBIPC "set3/xyznuvtbipc"
68#define WOWS_ID_SET3_XYNUVTBIPC 9
69
70#define WOWS_VER_SET3_XYNUVTBOI "set3/xyznuvtboi"
71#define WOWS_ID_SET3_XYNUVTBOI 10
72
73#define WOWS_VER_SET3_XYNUVTBPC "set3/xyznuvtbpc"
74#define WOWS_ID_SET3_XYNUVTBPC 11
84#define WOWS_VERTEX_FIELDS \
85 float x; \
86 float y; \
87 float z; \
88 uint32_t n; \
89 float _nx; \
90 float _ny; \
91 float _nz; \
92 float u; \
93 float v;
100typedef struct {
103
110typedef struct {
112 uint32_t t;
113 float _tx;
114 float _ty;
115 float _tz;
116 uint32_t b;
117 float _bx;
118 float _by;
119 float _bz;
121
125typedef struct {
127 uint32_t r;
129
131#define WOWS_HEADER_SIZE 72
132
153
155#define WOWS_BLOC_INFO_SIZE 16
156
163typedef struct {
164 uint32_t mapping_id;
167 uint32_t items_offset;
168 uint32_t items_count;
170
172#define WOWS_VERTEX_META_SIZE 32
173
181typedef struct {
186 uint16_t s_vertex_size;
187 uint8_t b_flag_1;
188 uint8_t b_flag_2;
190 /* Parser-internal fields — not part of the on-disk format. */
191 size_t _abs_start;
192 size_t _abs_end;
193 uint8_t _vertex_type;
195
203typedef struct {
204 uint8_t *raw_data;
205 uint32_t vertex_count;
206 uint8_t _vertex_type;
208
210#define WOWS_INDEX_META_SIZE 16
211
225
229typedef struct {
230 uint8_t *raw_data;
231 uint32_t index_count;
232 uint16_t index_size;
234
252
259typedef struct {
260 uint8_t debug_level;
261 bool is_le;
262 char *err_msg;
264
280int wows_parse_geometry(char *input, wows_geometry **geometry_content);
281
292int wows_parse_geometry_fp(FILE *input, wows_geometry **geometry_content);
293
301int wows_geometry_print(wows_geometry *geometry_content, bool verbose);
302
312int wows_geometry_free(wows_geometry *geometry_content);
313
323int wows_geometry_to_glb(wows_geometry *geometry, const char *output_path);
324
337int wows_geometry_to_glb_sections(wows_geometry *geometry, const char *output_path, const uint32_t *sections,
338 uint32_t n_sections);
339
348int wows_parse_geometry_buffer(char *contents, size_t length, wows_geometry **geometry_content);
int wows_parse_geometry_fp(FILE *input, wows_geometry **geometry_content)
Parse a .geometry file from an already-open FILE stream.
int wows_parse_geometry_buffer(char *contents, size_t length, wows_geometry **geometry_content)
Parse a .geometry file from a raw memory buffer.
int wows_geometry_free(wows_geometry *geometry_content)
Free all memory associated with a parsed geometry.
int wows_parse_geometry(char *input, wows_geometry **geometry_content)
Parse a .geometry file from a memory-mapped path.
int wows_geometry_to_glb_sections(wows_geometry *geometry, const char *output_path, const uint32_t *sections, uint32_t n_sections)
Export a subset of draw-call sections as a GLB file.
int wows_geometry_to_glb(wows_geometry *geometry, const char *output_path)
Export a full geometry as a binary glTF (GLB) file.
int wows_geometry_print(wows_geometry *geometry_content, bool verbose)
Print a human-readable summary of a parsed geometry to stdout.
Library context holding global parse settings.
Definition wows-geometry.h:259
bool is_le
Definition wows-geometry.h:261
uint8_t debug_level
Definition wows-geometry.h:260
char * err_msg
Definition wows-geometry.h:262
Top-level .geometry file header at offset 0.
Definition wows-geometry.h:139
uint32_t n_armor_bloc
Definition wows-geometry.h:145
uint32_t n_vertex_bloc
Definition wows-geometry.h:142
uint64_t off_collision_models
Definition wows-geometry.h:150
uint32_t n_index_type
Definition wows-geometry.h:141
uint64_t off_merged_indices
Definition wows-geometry.h:149
uint64_t off_indices_mapping
Definition wows-geometry.h:147
uint64_t off_vertices_mapping
Definition wows-geometry.h:146
uint64_t off_armor_models
Definition wows-geometry.h:151
uint32_t n_vertex_type
Definition wows-geometry.h:140
uint64_t off_merged_vertices
Definition wows-geometry.h:148
uint32_t n_collision_bloc
Definition wows-geometry.h:144
uint32_t n_index_bloc
Definition wows-geometry.h:143
Metadata for one merged index buffer (ENCD block descriptor).
Definition wows-geometry.h:218
uint16_t s_index_size
Definition wows-geometry.h:222
uint32_t s_idx_bloc_size
Definition wows-geometry.h:220
size_t _abs_start
Definition wows-geometry.h:223
uint16_t _reserved
Definition wows-geometry.h:221
int64_t data_relptr
Definition wows-geometry.h:219
Decoded index buffer for one merged index stream.
Definition wows-geometry.h:229
uint16_t index_size
Definition wows-geometry.h:232
uint32_t index_count
Definition wows-geometry.h:231
uint8_t * raw_data
Definition wows-geometry.h:230
Draw-call descriptor mapping a render set to a slice of a merged buffer.
Definition wows-geometry.h:163
uint32_t items_offset
Definition wows-geometry.h:167
uint32_t items_count
Definition wows-geometry.h:168
uint32_t mapping_id
Definition wows-geometry.h:164
uint16_t packed_texel_density
Definition wows-geometry.h:166
uint16_t merged_buffer_index
Definition wows-geometry.h:165
Metadata for one merged vertex buffer (ENCD block descriptor).
Definition wows-geometry.h:181
uint8_t b_flag_1
Definition wows-geometry.h:187
uint64_t n_size_type_str
Definition wows-geometry.h:183
uint8_t b_flag_2
Definition wows-geometry.h:188
uint32_t s_ver_bloc_size
Definition wows-geometry.h:185
size_t _abs_end
Definition wows-geometry.h:192
uint64_t off_ver_bloc_end
Definition wows-geometry.h:184
size_t _abs_start
Definition wows-geometry.h:191
uint8_t _vertex_type
Definition wows-geometry.h:193
uint64_t off_ver_bloc_start
Definition wows-geometry.h:182
uint16_t s_vertex_size
Definition wows-geometry.h:186
Decoded vertex buffer for one merged vertex stream.
Definition wows-geometry.h:203
uint32_t vertex_count
Definition wows-geometry.h:205
uint8_t _vertex_type
Definition wows-geometry.h:206
uint8_t * raw_data
Definition wows-geometry.h:204
Top-level container for a fully parsed .geometry file.
Definition wows-geometry.h:241
wows_geometry_index_section_metadata * index_meta_sections
Definition wows-geometry.h:248
wows_geometry_header * header
Definition wows-geometry.h:242
wows_geometry_info * vertex_bloc_map
Definition wows-geometry.h:243
wows_geometry_vertex_section ** vertexes
Definition wows-geometry.h:249
wows_geometry_info * index_bloc_map
Definition wows-geometry.h:244
wows_geometry_vertex_section_metadata * vertex_meta_sections
Definition wows-geometry.h:246
wows_geometry_index_section ** indexes
Definition wows-geometry.h:250
Vertex with an extra 32-bit R attribute (R layouts).
Definition wows-geometry.h:125
WOWS_VERTEX_FIELDS uint32_t r
Definition wows-geometry.h:127
Vertex with tangent and binormal vectors (TB layouts).
Definition wows-geometry.h:110
uint32_t b
Definition wows-geometry.h:116
float _by
Definition wows-geometry.h:118
float _tx
Definition wows-geometry.h:113
WOWS_VERTEX_FIELDS uint32_t t
Definition wows-geometry.h:112
float _ty
Definition wows-geometry.h:114
float _bz
Definition wows-geometry.h:119
float _bx
Definition wows-geometry.h:117
float _tz
Definition wows-geometry.h:115
Minimal vertex containing only position, normal, and UV.
Definition wows-geometry.h:100
#define WOWS_VERTEX_FIELDS
Common vertex fields shared by every vertex layout.
Definition wows-geometry.h:84