From 7c81dd93e38aae3ac76609914a68ec8b4dc6ead5 Mon Sep 17 00:00:00 2001 From: Cyberarm Date: Tue, 12 May 2020 09:32:00 -0500 Subject: [PATCH] Apply matrix to vertices parsed from collada models --- lib/model/parsers/collada_parser.rb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/model/parsers/collada_parser.rb b/lib/model/parsers/collada_parser.rb index 28525fe..6ac8f58 100644 --- a/lib/model/parsers/collada_parser.rb +++ b/lib/model/parsers/collada_parser.rb @@ -48,6 +48,7 @@ class IMICFPS get_normals(geometry_id, mesh) get_texture_coordinates(geometry_id, mesh) + project_node(geometry_name) build_faces(geometry_id, mesh) end @@ -78,6 +79,21 @@ class IMICFPS def get_texture_coordinates(id, mesh) end + def project_node(name) + @collada.css("library_visual_scenes visual_scene node").each do |node| + if node.attributes["name"].value == name + transform = Transform.new( node.at_css("matrix").children.first.to_s.split(" ").map { |f| Float(f) } ) + + @model.current_object.vertices.each do |vert| + v = vert.multiply_transform(transform) + vert.x, vert.y, vert.z, vert.w = v.x, v.y, v.z, v.w + end + + break + end + end + end + def build_faces(id, mesh) material_name = mesh.at_css("triangles").attributes["material"].value set_material(material_name)