Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Courses
Scotty3D
Commits
11a5e11c
Commit
11a5e11c
authored
Sep 30, 2020
by
TheNumbat
Browse files
more halfedge updates
parent
7a98a7a1
Changes
6
Hide whitespace changes
Inline
Side-by-side
src/gui/manager.cpp
View file @
11a5e11c
...
@@ -88,7 +88,7 @@ bool Manager::keydown(Undo &undo, SDL_Keysym key, Scene &scene, Camera &cam) {
...
@@ -88,7 +88,7 @@ bool Manager::keydown(Undo &undo, SDL_Keysym key, Scene &scene, Camera &cam) {
return
true
;
return
true
;
case
SDLK_f
:
{
case
SDLK_f
:
{
if
(
mode
==
Mode
::
rig
)
{
if
(
mode
==
Mode
::
rig
)
{
cam
.
look_at
(
Vec3
{},
-
cam
.
front
()
*
cam
.
dist
());
cam
.
look_at
(
Vec3
{},
cam
.
front
()
-
cam
.
dist
());
return
true
;
return
true
;
}
else
if
(
layout
.
selected
())
{
}
else
if
(
layout
.
selected
())
{
frame
(
scene
,
cam
);
frame
(
scene
,
cam
);
...
...
src/gui/model.cpp
View file @
11a5e11c
...
@@ -65,6 +65,12 @@ void Model::update_vertex(Halfedge_Mesh::VertexRef vert) {
...
@@ -65,6 +65,12 @@ void Model::update_vertex(Halfedge_Mesh::VertexRef vert) {
size_t
idx
=
id_to_info
[
h
->
face
()
->
id
()].
instance
;
size_t
idx
=
id_to_info
[
h
->
face
()
->
id
()].
instance
;
face_viz
(
h
->
face
(),
face_mesh
.
edit_verts
(),
face_mesh
.
edit_indices
(),
idx
);
face_viz
(
h
->
face
(),
face_mesh
.
edit_verts
(),
face_mesh
.
edit_indices
(),
idx
);
Halfedge_Mesh
::
HalfedgeRef
fh
=
h
->
face
()
->
halfedge
();
do
{
halfedge_viz
(
fh
,
arrows
.
get
(
id_to_info
[
fh
->
id
()].
instance
).
transform
);
fh
=
fh
->
next
();
}
while
(
fh
!=
h
->
face
()
->
halfedge
());
h
=
h
->
twin
()
->
next
();
h
=
h
->
twin
()
->
next
();
}
while
(
h
!=
vert
->
halfedge
());
}
while
(
h
!=
vert
->
halfedge
());
...
@@ -283,10 +289,20 @@ void Model::halfedge_viz(Halfedge_Mesh::HalfedgeRef h, Mat4 &transform) {
...
@@ -283,10 +289,20 @@ void Model::halfedge_viz(Halfedge_Mesh::HalfedgeRef h, Mat4 &transform) {
float
v0s
=
vert_sizes
[
v_0
->
id
()],
v1s
=
vert_sizes
[
v_1
->
id
()];
float
v0s
=
vert_sizes
[
v_0
->
id
()],
v1s
=
vert_sizes
[
v_1
->
id
()];
float
s
=
0.3
f
*
(
v0s
<
v1s
?
v0s
:
v1s
);
float
s
=
0.3
f
*
(
v0s
<
v1s
?
v0s
:
v1s
);
// Move to center of edge and
away from edg
e
// Move to center of edge and
towards center of fac
e
Vec3
offset
=
(
v1
-
v0
)
*
0.2
f
;
Vec3
offset
=
(
v1
-
v0
)
*
0.2
f
;
Vec3
face_n
=
h
->
face
()
->
normal
();
Vec3
base
=
h
->
face
()
->
halfedge
()
->
vertex
()
->
pos
;
offset
+=
cross
(
face_n
,
dir
).
unit
()
*
s
*
0.2
f
+
face_n
*
s
*
0.05
f
;
if
(
base
==
v0
)
{
base
=
h
->
next
()
->
next
()
->
vertex
()
->
pos
;
}
else
if
(
base
==
v1
)
{
Halfedge_Mesh
::
HalfedgeRef
hf
=
h
;
do
{
hf
=
hf
->
next
();
}
while
(
hf
->
next
()
!=
h
);
base
=
hf
->
vertex
()
->
pos
;
}
Vec3
face_n
=
cross
(
base
-
v0
,
base
-
v1
).
unit
();
offset
+=
cross
(
face_n
,
dir
).
unit
()
*
s
*
0.2
f
;
// Align edge
// Align edge
if
(
dir
.
y
==
1.0
f
||
dir
.
y
==
-
1.0
f
)
{
if
(
dir
.
y
==
1.0
f
||
dir
.
y
==
-
1.0
f
)
{
...
@@ -553,12 +569,20 @@ void Model::zoom_to(Halfedge_Mesh::ElementRef ref, Camera &cam) {
...
@@ -553,12 +569,20 @@ void Model::zoom_to(Halfedge_Mesh::ElementRef ref, Camera &cam) {
float
d
=
cam
.
dist
();
float
d
=
cam
.
dist
();
Vec3
center
=
Halfedge_Mesh
::
center_of
(
ref
);
Vec3
center
=
Halfedge_Mesh
::
center_of
(
ref
);
Vec3
pos
=
center
-
my_mesh
->
normal_of
(
ref
)
*
d
;
Vec3
pos
=
center
+
my_mesh
->
normal_of
(
ref
)
*
d
;
cam
.
look_at
(
center
,
pos
);
cam
.
look_at
(
center
,
pos
);
}
}
std
::
string
Model
::
UIsidebar
(
Undo
&
undo
,
Widgets
&
widgets
,
Scene_Maybe
obj_opt
,
Camera
&
camera
)
{
std
::
string
Model
::
UIsidebar
(
Undo
&
undo
,
Widgets
&
widgets
,
Scene_Maybe
obj_opt
,
Camera
&
camera
)
{
if
(
ImGui
::
CollapsingHeader
(
"Edit Colors"
))
{
ImGui
::
ColorEdit3
(
"Face"
,
f_col
.
data
);
ImGui
::
ColorEdit3
(
"Vertex"
,
v_col
.
data
);
ImGui
::
ColorEdit3
(
"Edge"
,
e_col
.
data
);
ImGui
::
ColorEdit3
(
"Halfedge"
,
he_col
.
data
);
}
ImGui
::
Separator
();
if
(
!
obj_opt
.
has_value
())
if
(
!
obj_opt
.
has_value
())
return
{};
return
{};
...
@@ -752,7 +776,10 @@ void Model::render(Scene_Maybe obj_opt, Widgets &widgets, Camera &cam) {
...
@@ -752,7 +776,10 @@ void Model::render(Scene_Maybe obj_opt, Widgets &widgets, Camera &cam) {
Renderer
::
HalfedgeOpt
opts
(
*
this
);
Renderer
::
HalfedgeOpt
opts
(
*
this
);
opts
.
modelview
=
view
;
opts
.
modelview
=
view
;
opts
.
color
=
obj
.
material
.
layout_color
();
opts
.
v_color
=
v_col
;
opts
.
f_color
=
f_col
;
opts
.
e_color
=
e_col
;
opts
.
he_color
=
he_col
;
Renderer
::
get
().
halfedge_editor
(
opts
);
Renderer
::
get
().
halfedge_editor
(
opts
);
auto
elem
=
selected_element
();
auto
elem
=
selected_element
();
...
...
src/gui/model.h
View file @
11a5e11c
...
@@ -72,6 +72,7 @@ private:
...
@@ -72,6 +72,7 @@ private:
Transform_Data
trans_begin
;
Transform_Data
trans_begin
;
GL
::
Instances
spheres
,
cylinders
,
arrows
;
GL
::
Instances
spheres
,
cylinders
,
arrows
;
GL
::
Mesh
face_mesh
;
GL
::
Mesh
face_mesh
;
Vec3
f_col
=
Vec3
{
1.0
f
},
v_col
=
Vec3
{
1.0
f
},
e_col
=
Vec3
{
0.8
f
},
he_col
=
Vec3
{
0.6
f
};
// This all needs to be updated when the mesh connectivity changes
// This all needs to be updated when the mesh connectivity changes
unsigned
int
selected_elem_id
=
UINT32_MAX
,
hovered_elem_id
=
UINT32_MAX
;
unsigned
int
selected_elem_id
=
UINT32_MAX
,
hovered_elem_id
=
UINT32_MAX
;
...
...
src/scene/renderer.cpp
View file @
11a5e11c
...
@@ -264,7 +264,7 @@ void Renderer::halfedge_editor(Renderer::HalfedgeOpt opt) {
...
@@ -264,7 +264,7 @@ void Renderer::halfedge_editor(Renderer::HalfedgeOpt opt) {
MeshOpt
fopt
=
MeshOpt
();
MeshOpt
fopt
=
MeshOpt
();
fopt
.
modelview
=
opt
.
modelview
;
fopt
.
modelview
=
opt
.
modelview
;
fopt
.
color
=
opt
.
color
;
fopt
.
color
=
opt
.
f_
color
;
fopt
.
per_vert_id
=
true
;
fopt
.
per_vert_id
=
true
;
fopt
.
sel_color
=
Gui
::
Color
::
outline
;
fopt
.
sel_color
=
Gui
::
Color
::
outline
;
fopt
.
sel_id
=
opt
.
editor
.
select_id
();
fopt
.
sel_id
=
opt
.
editor
.
select_id
();
...
@@ -278,14 +278,16 @@ void Renderer::halfedge_editor(Renderer::HalfedgeOpt opt) {
...
@@ -278,14 +278,16 @@ void Renderer::halfedge_editor(Renderer::HalfedgeOpt opt) {
inst_shader
.
uniform
(
"solid"
,
false
);
inst_shader
.
uniform
(
"solid"
,
false
);
inst_shader
.
uniform
(
"proj"
,
_proj
);
inst_shader
.
uniform
(
"proj"
,
_proj
);
inst_shader
.
uniform
(
"modelview"
,
opt
.
modelview
);
inst_shader
.
uniform
(
"modelview"
,
opt
.
modelview
);
inst_shader
.
uniform
(
"color"
,
opt
.
color
);
inst_shader
.
uniform
(
"alpha"
,
fopt
.
alpha
);
inst_shader
.
uniform
(
"alpha"
,
fopt
.
alpha
);
inst_shader
.
uniform
(
"sel_color"
,
Gui
::
Color
::
outline
);
inst_shader
.
uniform
(
"sel_color"
,
Gui
::
Color
::
outline
);
inst_shader
.
uniform
(
"hov_color"
,
Gui
::
Color
::
hover
);
inst_shader
.
uniform
(
"hov_color"
,
Gui
::
Color
::
hover
);
inst_shader
.
uniform
(
"sel_id"
,
fopt
.
sel_id
);
inst_shader
.
uniform
(
"sel_id"
,
fopt
.
sel_id
);
inst_shader
.
uniform
(
"hov_id"
,
fopt
.
hov_id
);
inst_shader
.
uniform
(
"hov_id"
,
fopt
.
hov_id
);
inst_shader
.
uniform
(
"color"
,
opt
.
v_color
);
spheres
.
render
();
spheres
.
render
();
inst_shader
.
uniform
(
"color"
,
opt
.
e_color
);
cylinders
.
render
();
cylinders
.
render
();
inst_shader
.
uniform
(
"color"
,
opt
.
he_color
);
arrows
.
render
();
arrows
.
render
();
}
}
src/scene/renderer.h
View file @
11a5e11c
...
@@ -44,7 +44,10 @@ public:
...
@@ -44,7 +44,10 @@ public:
HalfedgeOpt
(
Gui
::
Model
&
e
)
:
editor
(
e
)
{}
HalfedgeOpt
(
Gui
::
Model
&
e
)
:
editor
(
e
)
{}
Gui
::
Model
&
editor
;
Gui
::
Model
&
editor
;
Mat4
modelview
;
Mat4
modelview
;
Vec3
color
;
Vec3
f_color
=
Vec3
{
1.0
f
};
Vec3
v_color
=
Vec3
{
1.0
f
};
Vec3
e_color
=
Vec3
{
0.8
f
};
Vec3
he_color
=
Vec3
{
0.6
f
};
};
};
// NOTE(max): updates & uses the indices in mesh for selection/traversal
// NOTE(max): updates & uses the indices in mesh for selection/traversal
...
...
src/util/camera.cpp
View file @
11a5e11c
...
@@ -22,7 +22,10 @@ void Camera::look_at(Vec3 cent, Vec3 pos) {
...
@@ -22,7 +22,10 @@ void Camera::look_at(Vec3 cent, Vec3 pos) {
position
=
pos
;
position
=
pos
;
looking_at
=
cent
;
looking_at
=
cent
;
radius
=
(
pos
-
cent
).
norm
();
radius
=
(
pos
-
cent
).
norm
();
rot
=
Quat
::
euler
(
Mat4
::
rotate_z_to
(
front
()).
to_euler
());
if
(
dot
(
front
(),
UP
)
==
-
1.0
f
)
rot
=
Quat
::
euler
(
Vec3
{
270.0
f
,
0.0
f
,
0.0
f
});
else
rot
=
Quat
::
euler
(
Mat4
::
rotate_z_to
(
front
()).
to_euler
());
update_pos
();
update_pos
();
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment