diff --git a/Polyhedron/demo/Polyhedron/Scene_spheres_item.cpp b/Polyhedron/demo/Polyhedron/Scene_spheres_item.cpp index b8792eb0051..b7364214cb9 100644 --- a/Polyhedron/demo/Polyhedron/Scene_spheres_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_spheres_item.cpp @@ -170,10 +170,10 @@ void Scene_spheres_item::draw(Viewer_interface *viewer) const { QVector4D cp(d->plane.a(),d->plane.b(),d->plane.c(),d->plane.d()); getTriangleContainer(0)->setPlane(cp); + getTriangleContainer(1)->setPlane(cp); } if(d->spheres.size() > 1 && viewer->inDrawWithNames()) { - getTriangleContainer(1)->allocate(Tc::Flat_normals, 0, 0); getTriangleContainer(1)->getVao(viewer)->program->setAttributeValue("normals", QVector3D(0,0,0)); getTriangleContainer(1)->draw(viewer, false); } @@ -182,22 +182,22 @@ void Scene_spheres_item::draw(Viewer_interface *viewer) const getTriangleContainer(0)->draw(viewer, false); } if(d->spheres.size() > 1 && viewer->inDrawWithNames()) + { + int rowLength = deviceWidth * 4; // data asked in RGBA,so 4 bytes. + const static int dataLength = rowLength * deviceHeight; + GLubyte* buffer = new GLubyte[dataLength]; + // Qt uses upper corner for its origin while GL uses the lower corner. + QPoint picking_target = viewer->mapFromGlobal(QCursor::pos()); + viewer->glReadPixels(picking_target.x(), deviceHeight-1-picking_target.y(), 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, buffer); + int ID = (buffer[0] + buffer[1] * 256 +buffer[2] * 256*256) ; + if(buffer[0]*buffer[1]*buffer[2] < 255*255*255) { - int rowLength = deviceWidth * 4; // data asked in RGBA,so 4 bytes. - const static int dataLength = rowLength * deviceHeight; - GLubyte* buffer = new GLubyte[dataLength]; - // Qt uses upper corner for its origin while GL uses the lower corner. - QPoint picking_target = viewer->mapFromGlobal(QCursor::pos()); - viewer->glReadPixels(picking_target.x(), deviceHeight-1-picking_target.y(), 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, buffer); - int ID = (buffer[0] + buffer[1] * 256 +buffer[2] * 256*256) ; - if(buffer[0]*buffer[1]*buffer[2] < 255*255*255) - { - d->pick(ID); - viewer->displayMessage(QString("Picked spheres index : %1 .").arg(ID), 2000); - } - else - d->pick(-1); + d->pick(ID); + viewer->displayMessage(QString("Picked spheres index : %1 .").arg(ID), 2000); } + else + d->pick(-1); + } } void Scene_spheres_item::drawEdges(Viewer_interface *viewer) const diff --git a/Polyhedron/demo/Polyhedron/resources/compatibility_shaders/shader_c3t3.frag b/Polyhedron/demo/Polyhedron/resources/compatibility_shaders/shader_c3t3.frag index 251ae415a18..4a2f5cd9798 100644 --- a/Polyhedron/demo/Polyhedron/resources/compatibility_shaders/shader_c3t3.frag +++ b/Polyhedron/demo/Polyhedron/resources/compatibility_shaders/shader_c3t3.frag @@ -40,7 +40,10 @@ void main(void) { highp vec3 V = -fP.xyz; highp vec3 N; if(fN == vec3(0.0,0.0,0.0)) - N = vec3(0.0,0.0,0.0); + { + gl_FragColor = my_color; + return; + } else N = normalize(fN); L = normalize(L); diff --git a/Polyhedron/demo/Polyhedron/resources/shader_with_light.frag b/Polyhedron/demo/Polyhedron/resources/shader_with_light.frag index d4091a99864..5963ca308f3 100644 --- a/Polyhedron/demo/Polyhedron/resources/shader_with_light.frag +++ b/Polyhedron/demo/Polyhedron/resources/shader_with_light.frag @@ -57,8 +57,6 @@ void main(void) { out_color = my_color; return; } - if(fN == vec3(0.0,0.0,0.0)) - N = vec3(0.0,0.0,0.0); else N = normalize(fN); L = normalize(L);