diff --git a/CgSceneGraph/CgSceneControl.cpp b/CgSceneGraph/CgSceneControl.cpp index 5becc4bfc7723e7615497220ec27659631b3c9e7..f1243bcc86487a790a0e988882a53bb96a8a3ef5 100644 --- a/CgSceneGraph/CgSceneControl.cpp +++ b/CgSceneGraph/CgSceneControl.cpp @@ -303,7 +303,7 @@ void CgSceneControl::handleEvent(CgBaseEvent* e) { if(e->getType() & Cg::CgSplatEvent) { // checkbox in GUI changed for showing/hiding splats CgSplatEvent* ev = (CgSplatEvent*)e; - m_show_splats=ev->useSplatting(); + m_show_splats = ev->useSplatting(); m_renderer->redraw(); } @@ -461,7 +461,6 @@ void CgSceneControl::setRenderer(CgBaseRenderer* r) { if(m_triangle_mesh != nullptr) m_renderer->init(m_triangle_mesh); } - void CgSceneControl::renderObjects() { // Materialeigenschaften setzen @@ -484,10 +483,11 @@ void CgSceneControl::renderObjects() { } if((m_pointcloud != nullptr)&& !m_show_splats) { - m_current_transformation = glm::translate(m_current_transformation,-m_center); + m_renderer->setUniformValue("rendersplats", 0); + m_current_transformation = glm::translate(m_current_transformation, -m_center); glm::mat4 mv_matrix = m_lookAt_matrix * m_current_transformation; m_renderer->render(m_pointcloud, mv_matrix, m_proj_matrix); - m_current_transformation = glm::translate(m_current_transformation,m_center); + m_current_transformation = glm::translate(m_current_transformation, m_center); } if((m_select_ray != nullptr) && m_show_pickray) { @@ -510,7 +510,7 @@ void CgSceneControl::renderObjects() { // just to have not much effort to show the shape, inefficient rendering! if((m_pointcloud != nullptr) && m_show_splats) { - m_renderer->setUniformValue("rendersplats",1); + m_renderer->setUniformValue("rendersplats", 1); //const std::vector<glm::vec3>& vertex_colors = m_pointcloud->getVertexColors(); const std::vector<glm::vec3>& vertices = m_pointcloud->getVertices(); @@ -520,22 +520,24 @@ void CgSceneControl::renderObjects() { glm::mat4 mv_matrix; - for(unsigned int i=0;i<splat_indices.size();i++) { - //m_renderer->setUniformValue("mycolor",glm::vec4(vertex_colors[splat_indices[i]],1.0)); - - m_current_transformation = glm::translate(m_current_transformation,-m_center); - m_current_transformation = m_current_transformation * glm::inverse(orientations[splat_indices[i]]); - - m_current_transformation=glm::scale(m_current_transformation,glm::vec3(scalings[splat_indices[i]][0],scalings[splat_indices[i]][1],1.0)); + for(unsigned int i = 0; i < splat_indices.size(); i++) { + unsigned int splat_index = splat_indices[i]; + glm::mat4 splat_orientation = orientations[splat_index]; + glm::vec2 splat_scaling = scalings[splat_index]; - mv_matrix = m_lookAt_matrix * m_current_rotation* m_current_transformation ; - - if(m_disc != nullptr) m_renderer->render(m_disc,mv_matrix,m_proj_matrix); - - m_current_transformation=glm::scale(m_current_transformation,glm::vec3(1.0/scalings[splat_indices[i]][0],1.0/scalings[splat_indices[i]][1],1.0)); - - m_current_transformation = m_current_transformation * orientations[splat_indices[i]]; - m_current_transformation = glm::translate(m_current_transformation,m_center); + m_current_transformation = glm::translate(m_current_transformation, -m_center); + m_current_transformation = m_current_transformation * glm::inverse(splat_orientation); + m_current_transformation = glm::scale(m_current_transformation, glm::vec3( + splat_scaling.x, + splat_scaling.y, + 1.0) + ); + mv_matrix = m_lookAt_matrix * m_current_transformation ; + if(m_disc != nullptr) m_renderer->render(m_disc, mv_matrix, m_proj_matrix); + glm::vec3 scale_vec = glm::vec3(1.0 / splat_scaling.x, 1.0 / splat_scaling.y, 1.0); + m_current_transformation = glm::scale(m_current_transformation, scale_vec); + m_current_transformation = m_current_transformation * splat_orientation; + m_current_transformation = glm::translate(m_current_transformation, m_center); } } }