mirror of
https://github.com/Relintai/broken_seals.git
synced 2024-12-25 01:17:10 +01:00
Update mesh utils to get the MeshMerger, and the engine. The CharacterSkeletonGD now uses it.
This commit is contained in:
parent
f943749a47
commit
8f71e087e7
2
HEADS
2
HEADS
@ -1 +1 @@
|
|||||||
{"engine": {"3.2": "7ccb146a55edc41a9dd14c10efb8dc8f4b87f14e", "master": "8c73e813134001e575b6f59e3b0100471c007410"}, "world_generator": {"master": "97f10512f8832394389e1109154b8af34a2ef2c6"}, "entity_spell_system": {"master": "d063f8da2816e9e016112a2cc9a22a61c1f43d92"}, "ui_extensions": {"master": "6fe4f69fea8d71043b08d959b8085404c9c4fe47"}, "voxelman": {"master": "7c93cc8f52a60746aa43c0a78631baecbabfe6dc"}, "texture_packer": {"master": "e3047f7dfab861767c5295ea93d2f1404e8de66e"}, "fastnoise": {"master": "d0e3f1c759332cf0d9a5d7e0e71d0b0278310651"}, "mesh_data_resource": {"master": "3cc9f15f05be53380e20763efc0be753b621b8a2"}, "procedural_animations": {"master": "e4f048d67c171c34995763519e6d21bf40df29a7"}, "ess_data": {"master": "3bd637fdd3304b64a18287a49a6b7387acf2f5de"}, "fast_quadratic_mesh_simplifier": {"master": "f6d3d65cc6ce4dddfc68054164feec1f612ecd1f"}, "props": {"master": "b2bcb5ea6469b19298cd849c1232ddb5ad26f71c"}, "mesh_utils": {"master": "e4cf48e227ccd4b7a3194f218b32b52fe415ab5a"}, "broken_seals_module": {"master": "14c239fd8716988b837c2fcfe20fe7d9f11dd515"}, "thread_pool": {"master": "5093853b3f2cb430612bc153d0f020206cb6b624"}}
|
{"engine": {"3.2": "f108037cbfdd010ca61954fcb0a341f754a7a9f0", "master": "8c73e813134001e575b6f59e3b0100471c007410"}, "world_generator": {"master": "97f10512f8832394389e1109154b8af34a2ef2c6"}, "entity_spell_system": {"master": "d063f8da2816e9e016112a2cc9a22a61c1f43d92"}, "ui_extensions": {"master": "6fe4f69fea8d71043b08d959b8085404c9c4fe47"}, "voxelman": {"master": "7c93cc8f52a60746aa43c0a78631baecbabfe6dc"}, "texture_packer": {"master": "e3047f7dfab861767c5295ea93d2f1404e8de66e"}, "fastnoise": {"master": "d0e3f1c759332cf0d9a5d7e0e71d0b0278310651"}, "mesh_data_resource": {"master": "3cc9f15f05be53380e20763efc0be753b621b8a2"}, "procedural_animations": {"master": "e4f048d67c171c34995763519e6d21bf40df29a7"}, "ess_data": {"master": "3bd637fdd3304b64a18287a49a6b7387acf2f5de"}, "fast_quadratic_mesh_simplifier": {"master": "f6d3d65cc6ce4dddfc68054164feec1f612ecd1f"}, "props": {"master": "b2bcb5ea6469b19298cd849c1232ddb5ad26f71c"}, "mesh_utils": {"master": "a841b0ece08ca5d323f9055d2916051ff97dd6f6"}, "broken_seals_module": {"master": "14c239fd8716988b837c2fcfe20fe7d9f11dd515"}, "thread_pool": {"master": "5093853b3f2cb430612bc153d0f020206cb6b624"}}
|
@ -188,13 +188,20 @@ func build_mesh(data) -> void:
|
|||||||
|
|
||||||
meshes.clear()
|
meshes.clear()
|
||||||
|
|
||||||
var vertices : PoolVector3Array = PoolVector3Array()
|
var mm : MeshMerger = MeshMerger.new()
|
||||||
var normals : PoolVector3Array = PoolVector3Array()
|
mm.format = ArrayMesh.ARRAY_FORMAT_VERTEX | ArrayMesh.ARRAY_FORMAT_COLOR | ArrayMesh.ARRAY_FORMAT_BONES | ArrayMesh.ARRAY_FORMAT_INDEX | ArrayMesh.ARRAY_FORMAT_NORMAL | ArrayMesh.ARRAY_FORMAT_TEX_UV | ArrayMesh.ARRAY_FORMAT_WEIGHTS
|
||||||
var uvs : PoolVector2Array = PoolVector2Array()
|
var bones : PoolIntArray = PoolIntArray()
|
||||||
var colors : PoolColorArray = PoolColorArray()
|
bones.resize(4)
|
||||||
var indices : PoolIntArray = PoolIntArray()
|
bones[0] = 1
|
||||||
var bone_array : PoolIntArray = PoolIntArray()
|
bones[1] = 0
|
||||||
var weights_array : PoolRealArray = PoolRealArray()
|
bones[2] = 0
|
||||||
|
bones[3] = 0
|
||||||
|
var bonew : PoolRealArray = PoolRealArray()
|
||||||
|
bonew.resize(4)
|
||||||
|
bonew[0] = 1
|
||||||
|
bonew[1] = 0
|
||||||
|
bonew[2] = 0
|
||||||
|
bonew[3] = 0
|
||||||
|
|
||||||
for skele_point in range(EntityEnums.SKELETON_POINTS_MAX):
|
for skele_point in range(EntityEnums.SKELETON_POINTS_MAX):
|
||||||
var bone_name : String = get_bone_name(skele_point)
|
var bone_name : String = get_bone_name(skele_point)
|
||||||
@ -211,71 +218,24 @@ func build_mesh(data) -> void:
|
|||||||
if entry.entry.get_mesh(model_index) != null:
|
if entry.entry.get_mesh(model_index) != null:
|
||||||
var bt : Transform = skeleton.get_bone_global_pose(bone_idx)
|
var bt : Transform = skeleton.get_bone_global_pose(bone_idx)
|
||||||
|
|
||||||
var arrays : Array = entry.entry.get_mesh(model_index).array
|
var mdr : MeshDataResource = entry.entry.get_mesh(model_index)
|
||||||
|
|
||||||
var cvertices : PoolVector3Array = arrays[ArrayMesh.ARRAY_VERTEX] as PoolVector3Array
|
|
||||||
var cnormals : PoolVector3Array = arrays[ArrayMesh.ARRAY_NORMAL] as PoolVector3Array
|
|
||||||
var cuvs : PoolVector2Array = arrays[ArrayMesh.ARRAY_TEX_UV] as PoolVector2Array
|
|
||||||
var cindices : PoolIntArray = arrays[ArrayMesh.ARRAY_INDEX] as PoolIntArray
|
|
||||||
|
|
||||||
var ta : AtlasTexture = _textures[skele_point]
|
var ta : AtlasTexture = _textures[skele_point]
|
||||||
|
|
||||||
var tx : float = 0
|
var rect : Rect2 = Rect2(0, 0, 1, 1)
|
||||||
var ty : float = 0
|
|
||||||
var tw : float = 1
|
|
||||||
var th : float = 1
|
|
||||||
|
|
||||||
if ta != null and _texture != null:
|
if ta != null and _texture != null:
|
||||||
var otw : float = _texture.get_width()
|
var otw : float = _texture.get_width()
|
||||||
var oth : float = _texture.get_height()
|
var oth : float = _texture.get_height()
|
||||||
|
|
||||||
tx = ta.region.position.x / otw
|
rect.position.x = ta.region.position.x / otw
|
||||||
ty = ta.region.position.y / oth
|
rect.position.y = ta.region.position.y / oth
|
||||||
tw = ta.region.size.x / otw
|
rect.size.x = ta.region.size.x / otw
|
||||||
th = ta.region.size.y / oth
|
rect.size.y = ta.region.size.y / oth
|
||||||
|
bones[0] = bone_idx
|
||||||
|
mm.add_mesh_data_resource_bone(mdr, bones, bonew, bt, rect)
|
||||||
|
|
||||||
var orig_vert_size : int = vertices.size()
|
var arr : Array = mm.build_mesh()
|
||||||
|
|
||||||
vertices.resize(orig_vert_size + cvertices.size())
|
|
||||||
normals.resize(orig_vert_size + cvertices.size())
|
|
||||||
uvs.resize(orig_vert_size + cvertices.size())
|
|
||||||
colors.resize(orig_vert_size+ cvertices.size())
|
|
||||||
bone_array.resize(bone_array.size() + cvertices.size() * 4)
|
|
||||||
weights_array.resize(weights_array.size() + cvertices.size() * 4)
|
|
||||||
|
|
||||||
for i in range(len(cvertices)):
|
|
||||||
normals[orig_vert_size + i] = bt.basis.xform(normals[i])
|
|
||||||
|
|
||||||
var uv : Vector2 = cuvs[i]
|
|
||||||
|
|
||||||
uv.x = tw * uv.x + tx
|
|
||||||
uv.y = th * uv.y + ty
|
|
||||||
|
|
||||||
uvs[orig_vert_size + i] = uv
|
|
||||||
|
|
||||||
bone_array[(orig_vert_size + i) * 4] = bone_idx
|
|
||||||
weights_array[(orig_vert_size + i) * 4] = 1
|
|
||||||
for j in range(1, 4):
|
|
||||||
bone_array[(orig_vert_size + i) * 4 + j] = 0
|
|
||||||
weights_array[(orig_vert_size + i) * 4 + j] = 0
|
|
||||||
|
|
||||||
colors[orig_vert_size + i] = Color(0.7, 0.7, 0.7)
|
|
||||||
vertices[orig_vert_size + i] = bt.xform(cvertices[i])
|
|
||||||
|
|
||||||
var orig_indices_count = indices.size()
|
|
||||||
indices.resize(indices.size() + cindices.size())
|
|
||||||
for i in range(len(cindices)):
|
|
||||||
indices[orig_indices_count + i] = orig_vert_size + cindices[i]
|
|
||||||
|
|
||||||
var arr : Array = Array()
|
|
||||||
arr.resize(Mesh.ARRAY_MAX)
|
|
||||||
arr[Mesh.ARRAY_VERTEX] = vertices
|
|
||||||
arr[Mesh.ARRAY_NORMAL] = normals
|
|
||||||
arr[Mesh.ARRAY_TEX_UV] = uvs
|
|
||||||
arr[Mesh.ARRAY_COLOR] = colors
|
|
||||||
arr[Mesh.ARRAY_INDEX] = indices
|
|
||||||
arr[Mesh.ARRAY_BONES] = bone_array
|
|
||||||
arr[Mesh.ARRAY_WEIGHTS] = weights_array
|
|
||||||
|
|
||||||
var mesh : ArrayMesh = ArrayMesh.new()
|
var mesh : ArrayMesh = ArrayMesh.new()
|
||||||
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arr)
|
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arr)
|
||||||
|
Loading…
Reference in New Issue
Block a user