Add initial prototype.
This commit is contained in:
80
3-mid/opengl/source/lean/io/opengl-io-lat_long_radius.adb
Normal file
80
3-mid/opengl/source/lean/io/opengl-io-lat_long_radius.adb
Normal file
@@ -0,0 +1,80 @@
|
||||
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;
|
||||
Reference in New Issue
Block a user