aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/examples/sokol/06_obj_viewer/modules/obj/struct.v
diff options
context:
space:
mode:
Diffstat (limited to 'v_windows/v/examples/sokol/06_obj_viewer/modules/obj/struct.v')
-rw-r--r--v_windows/v/examples/sokol/06_obj_viewer/modules/obj/struct.v104
1 files changed, 104 insertions, 0 deletions
diff --git a/v_windows/v/examples/sokol/06_obj_viewer/modules/obj/struct.v b/v_windows/v/examples/sokol/06_obj_viewer/modules/obj/struct.v
new file mode 100644
index 0000000..55a528b
--- /dev/null
+++ b/v_windows/v/examples/sokol/06_obj_viewer/modules/obj/struct.v
@@ -0,0 +1,104 @@
+/**********************************************************************
+*
+* .obj loader
+*
+* Copyright (c) 2021 Dario Deledda. All rights reserved.
+* Use of this source code is governed by an MIT license
+* that can be found in the LICENSE file.
+*
+* TODO:
+**********************************************************************/
+module obj
+
+import gg.m4
+
+// part struct mantain the fae indexes list
+pub struct Part {
+pub mut:
+ faces [][][3]int // v n t index order, if -1 not available
+ name string
+ material string
+}
+
+// materias struct, all Ks and Ns are stored as maps of string
+pub struct Material {
+pub mut:
+ name string
+ ks map[string]m4.Vec4
+ ns map[string]f32
+ maps map[string]string
+}
+
+// render data used for the rendering
+pub struct Render_data {
+pub mut:
+ pipeline C.sg_pipeline
+ bind C.sg_bindings
+ n_vert u32
+ material string
+}
+
+// base object parts struct
+pub struct ObjPart {
+pub mut:
+ v []m4.Vec4 // position
+ vn []m4.Vec4 // normals
+ vp []m4.Vec4 // vertex params
+ vt []m4.Vec4 // textures
+
+ name string
+ part []Part // parts of the ObjPart
+ mat []Material // list of the materials of the ObjPart
+ mat_map map[string]int // maping material name to its material index
+ texture map[string]C.sg_image // GPU loaded texture map
+ material_file string // .mtl file name for the .obj
+
+ rend_data []Render_data // render data used for the rendering
+
+ t_m m4.Mat4 = m4.unit_m4() // transform matrix for this ObjPart
+ // child []ObjPart // childs
+ // stats
+ min m4.Vec4 // min 3d position in the ObjPart
+ max m4.Vec4 // max 3d position in the ObjPart
+ radius f32 // bounding circle radius of the ObjPart
+}
+
+// used in to pass the matrices to the shader
+pub struct Mats {
+pub mut:
+ mv m4.Mat4
+ mvp m4.Mat4
+ nm m4.Mat4
+}
+
+// data passed to the vertex shader
+pub struct Tmp_vs_param {
+pub mut:
+ mv m4.Mat4
+ mvp m4.Mat4
+ nm m4.Mat4
+}
+
+// data passed to the pixel shader
+pub struct Tmp_fs_param {
+pub mut:
+ ligth m4.Vec4
+ ka m4.Vec4 = m4.Vec4{
+ e: [f32(0.1), 0.0, 0.0, 1.0]!
+ }
+ kd m4.Vec4 = m4.Vec4{
+ e: [f32(0.5), 0.5, 0.5, 1.0]!
+ }
+ ks m4.Vec4 = m4.Vec4{
+ e: [f32(1.0), 1.0, 1.0, 1.0]!
+ }
+}
+
+// shader data for the rendering
+pub struct Shader_data {
+pub mut:
+ vs_data &Tmp_vs_param
+ vs_len int
+ fs_data &Tmp_fs_param
+ fs_len int
+}