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:
parent
de4de4db13
commit
d7632946c0
@ -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;
|
||||||
|
|
||||||
|
|
||||||
|
@ -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:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user