2
0
mirror of https://github.com/dpethes/rerogue.git synced 2025-06-07 18:58:32 +02:00

model viewer: experimental facegroup switching

This commit is contained in:
dpethes 2018-01-15 21:35:15 +01:00
parent de4de4db13
commit d7632946c0
2 changed files with 36 additions and 12 deletions

View File

@ -32,11 +32,12 @@ type
TMaterialArray = array of TMaterial;
TRenderOpts = record
fg_to_draw: integer;
fg_all: boolean;
wireframe: boolean;
points: boolean;
vcolors: boolean;
textures: boolean;
fg_to_draw: integer;
end;
{ TModel
@ -57,7 +58,7 @@ type
destructor Destroy; override;
procedure Load(hob, hmt: TMemoryStream);
procedure InitGL;
procedure DrawGL(opts: TRenderOpts);
procedure DrawGL(var opts: TRenderOpts);
procedure ExportObj(const obj_name: string);
end;
@ -284,7 +285,7 @@ begin
end;
procedure TModel.DrawGL(opts: TRenderOpts);
procedure TModel.DrawGL(var opts: TRenderOpts);
var
vert: TVertex;
i, k: integer;
@ -331,16 +332,31 @@ begin
end;
glColor3f(1, 1, 1);
for k := 0 to Length(_triangles) - 1 do
//k := min(opts.fg_to_draw, Length(_triangles) - 1);
if opts.fg_all then begin
for k := 0 to Length(_triangles) - 1 do begin
if _triangles[k].Size > 0 then
for i := 0 to _triangles[k].Size - 1 do
DrawTri(_triangles[k][i]);
end;
end
else begin
k := min(opts.fg_to_draw, Length(_triangles) - 1);
opts.fg_to_draw := k; //clip
if _triangles[k].Size > 0 then
for i := 0 to _triangles[k].Size - 1 do
DrawTri(_triangles[k][i]);
end;
if opts.wireframe then
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
ImGui.Begin_('Mesh');
ImGui.Text('triangles: %d (vertices: %d)', [triangle_count, _vertices.Size]);
if opts.fg_all then
ImGui.Text('facegroups: %d', [Length(_triangles)])
else
ImGui.Text('facegroup: %d / %d', [opts.fg_to_draw + 1, Length(_triangles)]);
ImGui.End_;
end;

View File

@ -236,6 +236,9 @@ begin
view.x := 0;
view.y := 0;
view.autorotate := true;
view.opts.fg_all := true;
view.opts.fg_to_draw := 0;
view.opts.wireframe := false;
view.opts.points := false;
view.opts.vcolors := true;
@ -269,6 +272,7 @@ begin
except
g_model_loading_failed := true;
end;
view.opts.fg_to_draw := 0;
end;
@ -308,6 +312,8 @@ begin
if not key_pressed.autorotate then begin
view.autorotate := not view.autorotate;
key_pressed.autorotate := true;
if not view.autorotate then
view.rotation_angle := 0;
end;
//g_model rendering opts
SDLK_w:
@ -330,6 +336,8 @@ begin
view.opts.textures := not view.opts.textures;
key_pressed.textures := true;
end;
SDLK_f:
view.opts.fg_all := not view.opts.fg_all;
SDLK_LEFT:
view.opts.fg_to_draw := max(0, view.opts.fg_to_draw - 1);
SDLK_RIGHT: