mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
examples: add .obj viewer as a sokol example (#9456)
This commit is contained in:
98
examples/sokol/06_obj_viewer/obj/struct.v
Normal file
98
examples/sokol/06_obj_viewer/obj/struct.v
Normal file
@ -0,0 +1,98 @@
|
||||
/**********************************************************************
|
||||
*
|
||||
* .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
|
||||
}
|
Reference in New Issue
Block a user