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

View File

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