Files
lace/3-mid/opengl/source/lean/io/opengl-io-lat_long_radius.adb
2022-07-31 17:34:54 +10:00

81 lines
2.6 KiB
Ada

with
float_Math.Geometry.d3.Modeller.Forge;
package body openGL.IO.lat_long_Radius
is
function to_Model (math_Model : access Geometry_3d.a_Model) return IO.Model
is
site_Count : constant long_Index_t := long_Index_t (math_Model.site_Count);
coord_Count : constant long_Index_t := 0; --get_coord_Count; -- TODO: Add texturing.
normal_Count : constant long_Index_t := 0; --collada_Normals'Length / 3; -- TODO: Add lighting.
the_Sites : constant many_Sites_view := new many_Sites (1 .. site_Count);
the_Normals : constant many_Normals_view := new many_Normals (1 .. normal_Count);
the_Coords : many_Coords_view;
the_Faces : IO.Faces_view := new IO.Faces (1 .. 50_000);
face_Count : long_Index_t := 0;
begin
if coord_Count > 0
then
the_Coords := new many_Coordinates_2D (1 .. coord_Count);
end if;
for i in 1 .. Integer (site_Count)
loop
the_Sites (long_Index_t (i)) := math_Model.Sites (i);
end loop;
-- Primitives
--
declare
the_Vertices : Vertices (1 .. long_Index_t (math_Model.tri_Count * 3));
Start : long_Index_t;
the_Face : IO.Face;
begin
for i in math_Model.Triangles'Range
loop
Start := long_Index_t ((i - 1) * 3 + 1);
the_Vertices (Start ) := (site_Id => long_Index_t (math_Model.Triangles (i) (1)), others => 0);
the_Vertices (Start + 1) := (site_Id => long_Index_t (math_Model.Triangles (i) (2)), others => 0);
the_Vertices (Start + 2) := (site_Id => long_Index_t (math_Model.Triangles (i) (3)), others => 0);
the_Face := (Triangle,
the_Vertices (Start .. Start + 2));
face_Count := face_Count + 1;
the_Faces (face_Count) := the_Face;
end loop;
end;
declare
used_Faces : constant IO.Faces_view := new IO.Faces' (the_Faces (1 .. face_Count));
begin
free (the_Faces);
return (Sites => the_Sites,
Coords => the_Coords,
Normals => the_Normals,
Weights => null,
Faces => used_Faces);
end;
end to_Model;
function to_Model (model_File : in String) return IO.Model
is
use float_Math.Geometry.d3.Modeller.Forge;
the_math_Model : aliased Geometry_3d.a_Model := mesh_Model_from (Model => polar_Model_from (model_File));
begin
return to_Model (the_math_Model'Access);
end to_Model;
end openGL.IO.lat_long_Radius;