Add ring model and init RSD conversion tool

This commit is contained in:
Lucas S. Vieira 2024-09-20 01:50:18 -03:00
parent 864505aa8d
commit b0fd36db4f
6 changed files with 2208 additions and 0 deletions

429
assets/objs/common/ring.mat Normal file
View file

@ -0,0 +1,429 @@
@MAT940801
# Number of Items
425
# Materials
0 0 F C 255 255 0
1 0 F C 255 255 0
2 0 F C 255 255 0
3 0 F C 255 255 0
4 0 F C 255 255 0
5 0 F C 255 255 0
6 0 F C 255 255 0
7 0 F C 255 255 0
8 0 F C 255 255 0
9 0 F C 255 255 0
10 0 F C 255 255 0
11 0 F C 255 255 0
12 0 F C 255 255 0
13 0 F C 255 255 0
14 0 F C 255 255 0
15 0 F C 255 255 0
16 0 F C 255 255 0
17 0 F C 255 255 0
18 0 F C 255 255 0
19 0 F C 255 255 0
20 0 F C 255 255 0
21 0 F C 255 255 0
22 0 F C 255 255 0
23 0 F C 255 255 0
24 0 F C 255 255 0
25 0 F C 255 255 0
26 0 F C 255 255 0
27 0 F C 255 255 0
28 0 F C 255 255 0
29 0 F C 255 255 0
30 0 F C 255 255 0
31 0 F C 255 255 0
32 0 F C 255 255 0
33 0 F C 255 255 0
34 0 F C 255 255 0
35 0 F C 255 255 0
36 0 F C 255 255 0
37 0 F C 255 255 0
38 0 F C 255 255 0
39 0 F C 255 255 0
40 0 F C 255 255 0
41 0 F C 255 255 0
42 0 F C 255 255 0
43 0 F C 255 255 0
44 0 F C 255 255 0
45 0 F C 255 255 0
46 0 F C 255 255 0
47 0 F C 255 255 0
48 0 F C 255 255 0
49 0 F C 255 255 0
50 0 F C 255 255 0
51 0 F C 255 255 0
52 0 F C 255 255 0
53 0 F C 255 255 0
54 0 F C 255 255 0
55 0 F C 255 255 0
56 0 F C 255 255 0
57 0 F C 255 255 0
58 0 F C 255 255 0
59 0 F C 255 255 0
60 0 F C 255 255 0
61 0 F C 255 255 0
62 0 F C 255 255 0
63 0 F C 255 255 0
64 0 F C 255 255 0
65 0 F C 255 255 0
66 0 F C 255 255 0
67 0 F C 255 255 0
68 0 F C 255 255 0
69 0 F C 255 255 0
70 0 F C 255 255 0
71 0 F C 255 255 0
72 0 F C 255 255 0
73 0 F C 255 255 0
74 0 F C 255 255 0
75 0 F C 255 255 0
76 0 F C 255 255 0
77 0 F C 255 255 0
78 0 F C 255 255 0
79 0 F C 255 255 0
80 0 F C 255 255 0
81 0 F C 255 255 0
82 0 F C 255 255 0
83 0 F C 255 255 0
84 0 F C 255 255 0
85 0 F C 255 255 0
86 0 F C 255 255 0
87 0 F C 255 255 0
88 0 F C 255 255 0
89 0 F C 255 255 0
90 0 F C 255 255 0
91 0 F C 255 255 0
92 0 F C 255 255 0
93 0 F C 255 255 0
94 0 F C 255 255 0
95 0 F C 255 255 0
96 0 F C 255 255 0
97 0 F C 255 255 0
98 0 F C 255 255 0
99 0 F C 255 255 0
100 0 F C 255 255 0
101 0 F C 255 255 0
102 0 F C 255 255 0
103 0 F C 255 255 0
104 0 F C 255 255 0
105 0 F C 255 255 0
106 0 F C 255 255 0
107 0 F C 255 255 0
108 0 F C 255 255 0
109 0 F C 255 255 0
110 0 F C 255 255 0
111 0 F C 255 255 0
112 0 F C 255 255 0
113 0 F C 255 255 0
114 0 F C 255 255 0
115 0 F C 255 255 0
116 0 F C 255 255 0
117 0 F C 255 255 0
118 0 F C 255 255 0
119 0 F C 255 255 0
120 0 F C 255 255 0
121 0 F C 255 255 0
122 0 F C 255 255 0
123 0 F C 255 255 0
124 0 F C 255 255 0
125 0 F C 255 255 0
126 0 F C 255 255 0
127 0 F C 255 255 0
128 0 F C 255 255 0
129 0 F C 255 255 0
130 0 F C 255 255 0
131 0 F C 255 255 0
132 0 F C 255 255 0
133 0 F C 255 255 0
134 0 F C 255 255 0
135 0 F C 255 255 0
136 0 F C 255 255 0
137 0 F C 255 255 0
138 0 F C 255 255 0
139 0 F C 255 255 0
140 0 F C 255 255 0
141 0 F C 255 255 0
142 0 F C 255 255 0
143 0 F C 255 255 0
144 0 F C 255 255 0
145 0 F C 255 255 0
146 0 F C 255 255 0
147 0 F C 255 255 0
148 0 F C 255 255 0
149 0 F C 255 255 0
150 0 F C 255 255 0
151 0 F C 255 255 0
152 0 F C 255 255 0
153 0 F C 255 255 0
154 0 F C 255 255 0
155 0 F C 255 255 0
156 0 F C 255 255 0
157 0 F C 255 255 0
158 0 F C 255 255 0
159 0 F C 255 255 0
160 0 F C 255 255 0
161 0 F C 255 255 0
162 0 F C 255 255 0
163 0 F C 255 255 0
164 0 F C 255 255 0
165 0 F C 255 255 0
166 0 F C 255 255 0
167 0 F C 255 255 0
168 0 F C 255 255 0
169 0 F C 255 255 0
170 0 F C 255 255 0
171 0 F C 255 255 0
172 0 F C 255 255 0
173 0 F C 255 255 0
174 0 F C 255 255 0
175 0 F C 255 255 0
176 0 F C 255 255 0
177 0 F C 255 255 0
178 0 F C 255 255 0
179 0 F C 255 255 0
180 0 F C 255 255 0
181 0 F C 255 255 0
182 0 F C 255 255 0
183 0 F C 255 255 0
184 0 F C 255 255 0
185 0 F C 255 255 0
186 0 F C 255 255 0
187 0 F C 255 255 0
188 0 F C 255 255 0
189 0 F C 255 255 0
190 0 F C 255 255 0
191 0 F C 255 255 0
192 0 F C 255 255 0
193 0 F C 255 255 0
194 0 F C 255 255 0
195 0 F C 255 255 0
196 0 F C 255 255 0
197 0 F C 255 255 0
198 0 F C 255 255 0
199 0 F C 255 255 0
200 0 F C 255 255 0
201 0 F C 255 255 0
202 0 F C 255 255 0
203 0 F C 255 255 0
204 0 F C 255 255 0
205 0 F C 255 255 0
206 0 F C 255 255 0
207 0 F C 255 255 0
208 0 F C 255 255 0
209 0 F C 255 255 0
210 0 F C 255 255 0
211 0 F C 255 255 0
212 0 F C 255 255 0
213 0 F C 255 255 0
214 0 F C 255 255 0
215 0 F C 255 255 0
216 0 F C 255 255 0
217 0 F C 255 255 0
218 0 F C 255 255 0
219 0 F C 255 255 0
220 0 F C 255 255 0
221 0 F C 255 255 0
222 0 F C 255 255 0
223 0 F C 255 255 0
224 0 F C 255 255 0
225 0 F C 255 255 0
226 0 F C 255 255 0
227 0 F C 255 255 0
228 0 F C 255 255 0
229 0 F C 255 255 0
230 0 F C 255 255 0
231 0 F C 255 255 0
232 0 F C 255 255 0
233 0 F C 255 255 0
234 0 F C 255 255 0
235 0 F C 255 255 0
236 0 F C 255 255 0
237 0 F C 255 255 0
238 0 F C 255 255 0
239 0 F C 255 255 0
240 0 F C 255 255 0
241 0 F C 255 255 0
242 0 F C 255 255 0
243 0 F C 255 255 0
244 0 F C 255 255 0
245 0 F C 255 255 0
246 0 F C 255 255 0
247 0 F C 255 255 0
248 0 F C 255 255 0
249 0 F C 255 255 0
250 0 F C 255 255 0
251 0 F C 255 255 0
252 0 F C 255 255 0
253 0 F C 255 255 0
254 0 F C 255 255 0
255 0 F C 255 255 0
256 0 F C 255 255 0
257 0 F C 255 255 0
258 0 F C 255 255 0
259 0 F C 255 255 0
260 0 F C 255 255 0
261 0 F C 255 255 0
262 0 F C 255 255 0
263 0 F C 255 255 0
264 0 F C 255 255 0
265 0 F C 255 255 0
266 0 F C 255 255 0
267 0 F C 255 255 0
268 0 F C 255 255 0
269 0 F C 255 255 0
270 0 F C 255 255 0
271 0 F C 255 255 0
272 0 F C 255 255 0
273 0 F C 255 255 0
274 0 F C 255 255 0
275 0 F C 255 255 0
276 0 F C 255 255 0
277 0 F C 255 255 0
278 0 F C 255 255 0
279 0 F C 255 255 0
280 0 F C 255 255 0
281 0 F C 255 255 0
282 0 F C 255 255 0
283 0 F C 255 255 0
284 0 F C 255 255 0
285 0 F C 255 255 0
286 0 F C 255 255 0
287 0 F C 255 255 0
288 0 F C 255 255 0
289 0 F C 255 255 0
290 0 F C 255 255 0
291 0 F C 255 255 0
292 0 F C 255 255 0
293 0 F C 255 255 0
294 0 F C 255 255 0
295 0 F C 255 255 0
296 0 F C 255 255 0
297 0 F C 255 255 0
298 0 F C 255 255 0
299 0 F C 255 255 0
300 0 F C 255 255 0
301 0 F C 255 255 0
302 0 F C 255 255 0
303 0 F C 255 255 0
304 0 F C 255 255 0
305 0 F C 255 255 0
306 0 F C 255 255 0
307 0 F C 255 255 0
308 0 F C 255 255 0
309 0 F C 255 255 0
310 0 F C 255 255 0
311 0 F C 255 255 0
312 0 F C 255 255 0
313 0 F C 255 255 0
314 0 F C 255 255 0
315 0 F C 255 255 0
316 0 F C 255 255 0
317 0 F C 255 255 0
318 0 F C 255 255 0
319 0 F C 255 255 0
320 0 F C 255 255 0
321 0 F C 255 255 0
322 0 F C 255 255 0
323 0 F C 255 255 0
324 0 F C 255 255 0
325 0 F C 255 255 0
326 0 F C 255 255 0
327 0 F C 255 255 0
328 0 F C 255 255 0
329 0 F C 255 255 0
330 0 F C 255 255 0
331 0 F C 255 255 0
332 0 F C 255 255 0
333 0 F C 255 255 0
334 0 F C 255 255 0
335 0 F C 255 255 0
336 0 F C 255 255 0
337 0 F C 255 255 0
338 0 F C 255 255 0
339 0 F C 255 255 0
340 0 F C 255 255 0
341 0 F C 255 255 0
342 0 F C 255 255 0
343 0 F C 255 255 0
344 0 F C 255 255 0
345 0 F C 255 255 0
346 0 F C 255 255 0
347 0 F C 255 255 0
348 0 F C 255 255 0
349 0 F C 255 255 0
350 0 F C 255 255 0
351 0 F C 255 255 0
352 0 F C 255 255 0
353 0 F C 255 255 0
354 0 F C 255 255 0
355 0 F C 255 255 0
356 0 F C 255 255 0
357 0 F C 255 255 0
358 0 F C 255 255 0
359 0 F C 255 255 0
360 0 F C 255 255 0
361 0 F C 255 255 0
362 0 F C 255 255 0
363 0 F C 255 255 0
364 0 F C 255 255 0
365 0 F C 255 255 0
366 0 F C 255 255 0
367 0 F C 255 255 0
368 0 F C 255 255 0
369 0 F C 255 255 0
370 0 F C 255 255 0
371 0 F C 255 255 0
372 0 F C 255 255 0
373 0 F C 255 255 0
374 0 F C 255 255 0
375 0 F C 255 255 0
376 0 F C 255 255 0
377 0 F C 255 255 0
378 0 F C 255 255 0
379 0 F C 255 255 0
380 0 F C 255 255 0
381 0 F C 255 255 0
382 0 F C 255 255 0
383 0 F C 255 255 0
384 0 F C 255 255 0
385 0 F C 255 255 0
386 0 F C 255 255 0
387 0 F C 255 255 0
388 0 F C 255 255 0
389 0 F C 255 255 0
390 0 F C 255 255 0
391 0 F C 255 255 0
392 0 F C 255 255 0
393 0 F C 255 255 0
394 0 F C 255 255 0
395 0 F C 255 255 0
396 0 F C 255 255 0
397 0 F C 255 255 0
398 0 F C 255 255 0
399 0 F C 255 255 0
400 0 F C 255 255 0
401 0 F C 255 255 0
402 0 F C 255 255 0
403 0 F C 255 255 0
404 0 F C 255 255 0
405 0 F C 255 255 0
406 0 F C 255 255 0
407 0 F C 255 255 0
408 0 F C 255 255 0
409 0 F C 255 255 0
410 0 F C 255 255 0
411 0 F C 255 255 0
412 0 F C 255 255 0
413 0 F C 255 255 0
414 0 F C 255 255 0
415 0 F C 255 255 0
416 0 F C 255 255 0
417 0 F C 255 255 0
418 0 F C 255 255 0
419 0 F C 255 255 0
420 0 F C 255 255 0
421 0 F C 255 255 0
422 0 F C 255 255 0
423 0 F C 255 255 0
424 0 F C 255 255 0

1477
assets/objs/common/ring.ply Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,5 @@
#RSD data describing the relationships to the PLY, MAT, and texture files
@RSD940102
PLY=ring.ply
MAT=ring.mat
NTEX=0

View file

@ -0,0 +1,34 @@
#ifndef FIXEDPOINT_HPP
#define FIXEDPOINT_HPP
#include <cstdlib>
#include <cstdint>
template<class Type, size_t Scale>
class FixedPoint
{
private:
const static Type factor = 1 << Scale;
Type data;
public:
FixedPoint(double value) {
*this = value;
}
FixedPoint&
operator=(double value) {
this->data = static_cast<Type>(value * factor);
return *this;
}
Type
getRaw() const {
return this->data;
}
};
typedef FixedPoint<int32_t, 12> psxfixed32;
typedef FixedPoint<int16_t, 12> psxfixed16;
#endif

View file

@ -0,0 +1,17 @@
#include <iostream>
#include "fixedpoint.hpp"
#include <cstdint>
int
main(void)
{
double value1 = 3.1416;
double value2 = 1.0;
FixedPoint<int32_t, 12> fvalue1(value1);
FixedPoint<int32_t, 12> fvalue2(value2);
std::cout << "Value 1: " << value1 << " -> " << fvalue1.getRaw() << std::endl
<< "Value 2: " << value2 << " -> " << fvalue2.getRaw() << std::endl;
return 0;
}

View file

@ -0,0 +1,246 @@
#include <cstdio>
#include <cstdlib>
#include "fixedpoint.hpp"
struct SVECTOR
{
int16_t vx;
int16_t vy;
int16_t vz;
//int16_t _unused;
};
struct CVECTOR
{
uint8_t r;
uint8_t g;
uint8_t b;
};
/* Face attributes */
#define TYPE_TRIANGLE 0x0 // ARGS: FLAG V0 V1 V2 __ N0 N1 N2 __
#define TYPE_QUAD 0x1 // ARGS: FLAG V0 V1 V2 V3 N0 N1 N2 N3
#define TYPE_LINE 0x2 // ARGS: FLAG V0 V1 __ __ __ __ __ __
#define TYPE_SPRITE 0x3 // ARGS: FLAG V0 W H
union Face
{
struct {
uint8_t flag;
uint16_t param[8];
} gn; // Generic
struct {
uint8_t flag; // flag == 0
uint16_t iv0;
uint16_t iv1;
uint16_t iv2;
uint16_t _unused0;
uint16_t in0;
uint16_t in1;
uint16_t in2;
uint16_t _unused1;
} triangle;
struct {
uint8_t flag; // flag == 1
uint16_t iv0;
uint16_t iv1;
uint16_t iv2;
uint16_t iv3;
uint16_t in0;
uint16_t in1;
uint16_t in2;
uint16_t in3;
} quad;
struct {
uint8_t flag; // flag == 2
uint16_t iv0;
uint16_t iv1;
uint16_t __unused0;
uint16_t __unused1;
uint16_t __unused2;
uint16_t __unused3;
uint16_t __unused4;
uint16_t __unused5;
} line;
struct {
uint8_t flag; // flag == 3
uint16_t iv0;
uint16_t iv1;
uint16_t iw;
uint16_t ih;
uint16_t __unused2;
uint16_t __unused3;
uint16_t __unused4;
uint16_t __unused5;
} sprite;
};
// ========================
enum MaterialType
{
MATERIAL_TYPE_C, // "C": Flat colored
MATERIAL_TYPE_G, // "G": Gouraud shaded
MATERIAL_TYPE_T, // "T": Textured no-color
MATERIAL_TYPE_D, // "T": Textured, flat colored
MATERIAL_TYPE_H, // "H": Textured, gouraud shaded
// MATERIAL_TYPE_W, // "W": Repeating textures, no-color
// MATERIAL_TYPE_S, // "S": Repeating textures, flat colored
// MATERIAL_TYPE_N, // "N": Repeating textures, gouraud shaded
};
union MaterialInfo
{
MaterialType type;
struct {
MaterialType type;
uint8_t r0;
uint8_t g0;
uint8_t b0;
} f;
struct {
MaterialType type;
uint8_t r0;
uint8_t g0;
uint8_t b0;
uint8_t r1;
uint8_t g1;
uint8_t b1;
uint8_t r2;
uint8_t g2;
uint8_t b2;
uint8_t r3;
uint8_t g3;
uint8_t b3;
} g;
struct {
MaterialType type;
uint8_t u0;
uint8_t v0;
uint8_t u1;
uint8_t v1;
uint8_t u2;
uint8_t v2;
uint8_t u3;
uint8_t v3;
} t;
struct {
MaterialType type;
uint8_t u0;
uint8_t v0;
uint8_t u1;
uint8_t v1;
uint8_t u2;
uint8_t v2;
uint8_t u3;
uint8_t v3;
uint8_t r0;
uint8_t g0;
uint8_t b0;
} ft;
struct {
MaterialType type;
uint8_t u0;
uint8_t v0;
uint8_t u1;
uint8_t v1;
uint8_t u2;
uint8_t v2;
uint8_t u3;
uint8_t v3;
uint8_t r0;
uint8_t g0;
uint8_t b0;
uint8_t r1;
uint8_t g1;
uint8_t b1;
uint8_t r2;
uint8_t g2;
uint8_t b2;
uint8_t r3;
uint8_t g3;
uint8_t b3;
} gt;
// Won't care about the rest
};
enum ShadingType
{
SHADING_TYPE_FLAT, // "F"
SHADING_TYPE_GOURAUD, // "G"
};
struct Material
{
// Can be in 0-5 format, specifies polygons 0 thru 5 use this material
uint16_t ipolygon;
uint8_t flag;
ShadingType shading;
MaterialInfo info;
};
// ========================
struct PlyData
{
char magic[11];
uint32_t num_vertices;
uint32_t num_normals;
uint32_t num_faces;
SVECTOR *vertices;
SVECTOR *normals;
Face *faces;
};
struct MatData
{
char magic[11];
uint16_t num_items;
Material *data;
};
// ========================
struct RSDModel
{
char magic[11];
PlyData ply;
MatData mat;
// TODO: NTEX and TEX[n] for textures
};
// ========================
void
parse_rsd(const char *filename, RSDModel &model)
{
}
void
parse_ply(const char *filename, PlyData &ply)
{
}
void
parse_mat(const char *filename, MatData &mat)
{
}
int
main(void)
{
// Read and parse RSD file and its acessories
// Convert RSD to actual engine model format (still don't know what to do here...)
return 0;
}