fix transform corners visible behind
This commit is contained in:
@@ -953,9 +953,9 @@ void CanvasModeTransform::enter()
|
||||
p2d.y = canvas->m_box.w - p2d.y - 1;
|
||||
auto p2d_clip = ((p2d / zw(canvas->m_box)) * 2.f - 1.f);
|
||||
auto p3d_plane = canvas->m_plane_unproject[plane] * glm::vec4(p2d_clip, 0, 1);
|
||||
auto p3d_norm = -p3d_plane / p3d_plane.z;
|
||||
if (p3d_norm.w < 0)
|
||||
if (p3d_plane.w < 0)
|
||||
continue;
|
||||
auto p3d_norm = -p3d_plane / p3d_plane.z;
|
||||
auto p2d_plane = xy(p3d_norm);
|
||||
auto p2d_plane_raster = (p2d_plane * 0.5f + 0.5f) * canvas->m_size;
|
||||
auto p3d_world = canvas->m_plane_transform[plane] * glm::vec4(p2d_plane, -1, 1);
|
||||
@@ -1034,7 +1034,7 @@ void CanvasModeTransform::enter()
|
||||
for (auto p : m_points_face[j])
|
||||
{
|
||||
auto p_clip = mvp * p.pos;
|
||||
auto p_norm = p_clip / p_clip.z;
|
||||
auto p_norm = p_clip / p_clip.w;
|
||||
if (p_clip.w < 0 || glm::any(glm::greaterThan(glm::abs(xy(p_norm)), { 1, 1 })))
|
||||
continue;
|
||||
auto p_raster = (xy(p_norm) * 0.5f + 0.5f) * canvas->m_size;
|
||||
@@ -1268,9 +1268,9 @@ void CanvasModeTransform::on_Draw(const glm::mat4& ortho, const glm::mat4& proj,
|
||||
for (int i = 0; i < corners.size(); i++)
|
||||
{
|
||||
auto c = m2d * glm::vec4(corners[i], 1);
|
||||
auto c3d = c / c.z;
|
||||
if (c3d.w < 0)
|
||||
if (c.w < 0)
|
||||
continue;
|
||||
auto c3d = c / c.w;
|
||||
auto c2d = (xy(c3d) * 0.5f + 0.5f) * zw(canvas->m_box);
|
||||
|
||||
ShaderManager::u_mat4(kShaderUniform::MVP,
|
||||
|
||||
@@ -268,7 +268,7 @@ void NodeCanvas::draw()
|
||||
mode->on_Draw(ortho_proj, proj, camera);
|
||||
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
if (m_canvas->m_smask_active)
|
||||
if (m_canvas->m_smask_active || m_canvas->m_state == Canvas::kCanvasMode::Transform)
|
||||
{
|
||||
m_canvas->modes[(int)Canvas::kCanvasMode::MaskFree][0]->on_Draw(ortho_proj, proj, camera);
|
||||
m_canvas->modes[(int)Canvas::kCanvasMode::MaskLine][0]->on_Draw(ortho_proj, proj, camera);
|
||||
|
||||
Reference in New Issue
Block a user