Merge pull request #1323 from maxGimeno/Polyhedron_demo-Add_shaded_points-GF

Polyhedron_demo : Add a new RenderingMode for ShadedPoints
This commit is contained in:
Laurent Rineau 2016-10-17 10:01:44 +02:00
commit df77ac7812
13 changed files with 36 additions and 16 deletions

View File

@ -41,7 +41,7 @@ public:
QString toolTip() const;
// Indicate if rendering mode is supported
virtual bool supportsRenderingMode(RenderingMode m) const { return (m != Gouraud && m!=PointsPlusNormals && m!=Splatting); } // CHECK THIS!
virtual bool supportsRenderingMode(RenderingMode m) const { return (m != Gouraud && m!=PointsPlusNormals && m!=Splatting && m!=ShadedPoints); } // CHECK THIS!
//Event handling
virtual bool keyPressEvent(QKeyEvent*);
//drawing of the scene

View File

@ -482,7 +482,8 @@ Scene::draw_aux(bool with_names, CGAL::Three::Viewer_interface* viewer)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
if(item.renderingMode() == Points ||
(!with_names && item.renderingMode() == PointsPlusNormals))
(!with_names && item.renderingMode() == PointsPlusNormals) ||
(!with_names && item.renderingMode() == ShadedPoints))
{
viewer->glDisable(GL_LIGHTING);
viewer->glPointSize(2.0f);

View File

@ -72,7 +72,7 @@ public:
// Indicate if rendering mode is supported
bool supportsRenderingMode(RenderingMode m) const {
return (m != Gouraud && m!=PointsPlusNormals && m!=Splatting); // CHECK THIS!
return (m != Gouraud && m!=PointsPlusNormals && m!=Splatting && m!=ShadedPoints); // CHECK THIS!
}
void draw() const {

View File

@ -63,7 +63,7 @@ public :
}
// Indicates if rendering mode is supported
bool supportsRenderingMode(RenderingMode m) const {
return (m != Gouraud && m != PointsPlusNormals && m != Splatting && m != Points);
return (m != Gouraud && m != PointsPlusNormals && m != Splatting && m != Points && m != ShadedPoints);
}
void initialize_buffers(CGAL::Three::Viewer_interface *viewer)
{

View File

@ -100,7 +100,7 @@ public:
// Indicate if rendering mode is supported
bool supportsRenderingMode(RenderingMode m) const {
return (m != Gouraud && m != PointsPlusNormals && m != Splatting && m != Points);
return (m != Gouraud && m != PointsPlusNormals && m != Splatting && m != Points && m != ShadedPoints);
}
void draw(CGAL::Three::Viewer_interface* viewer) const;

View File

@ -65,6 +65,8 @@ QString modeName(RenderingMode mode) {
{
case Points:
return QObject::tr("points");
case ShadedPoints:
return QObject::tr("shaded points");
case Wireframe:
return QObject::tr("wire");
case Flat:
@ -88,6 +90,8 @@ const char* slotName(RenderingMode mode) {
{
case Points:
return SLOT(setPointsMode());
case ShadedPoints:
return SLOT(setShadedPointsMode());
case Wireframe:
return SLOT(setWireframeMode());
case Flat:

View File

@ -29,7 +29,7 @@ public:
virtual void invalidateOpenGLBuffers();
virtual void selection_changed(bool);
// Indicate if rendering mode is supported
virtual bool supportsRenderingMode(RenderingMode m) const { return m != Gouraud && m!=Splatting; } // CHECK THIS!
virtual bool supportsRenderingMode(RenderingMode m) const { return m != Gouraud && m!=Splatting && m!=ShadedPoints; } // CHECK THIS!
// OpenGL drawing in a display list
void direct_draw() const;

View File

@ -557,9 +557,17 @@ Scene_points_with_normal_item::toolTip() const
bool Scene_points_with_normal_item::supportsRenderingMode(RenderingMode m) const
{
return m==Points ||
( has_normals() &&
( m==PointsPlusNormals || m==Splatting ) );
switch ( m )
{
case Points:
case ShadedPoints:
case PointsPlusNormals:
case Splatting:
return true;
default:
return false;
}
}
void Scene_points_with_normal_item::drawSplats(CGAL::Three::Viewer_interface* viewer) const
@ -611,7 +619,7 @@ void Scene_points_with_normal_item::drawPoints(CGAL::Three::Viewer_interface* vi
ratio_displayed = 3 * limit_fast_drawing / (double)(d->nb_points + d->nb_selected_points);
vaos[Scene_points_with_normal_item_priv::ThePoints]->bind();
if(has_normals())
if(has_normals() && renderingMode() == ShadedPoints)
{
d->program=getShaderProgram(PROGRAM_WITH_LIGHT);
attribBuffers(viewer,PROGRAM_WITH_LIGHT);
@ -623,13 +631,16 @@ void Scene_points_with_normal_item::drawPoints(CGAL::Three::Viewer_interface* vi
}
d->program->bind();
d->program->setAttributeValue("colors", this->color());
if(renderingMode() != ShadedPoints)
d->program->setAttributeValue("normals", QVector3D(0,0,0));
viewer->glDrawArrays(GL_POINTS, 0,
static_cast<GLsizei>(((std::size_t)(ratio_displayed * d->nb_points)/3)));
vaos[Scene_points_with_normal_item_priv::ThePoints]->release();
d->program->release();
vaos[Scene_points_with_normal_item_priv::Selected_points]->bind();
if(has_normals())
if(has_normals() && renderingMode() == ShadedPoints)
{
d->program=getShaderProgram(PROGRAM_WITH_LIGHT);
attribBuffers(viewer,PROGRAM_WITH_LIGHT);

View File

@ -125,7 +125,7 @@ public:
QString toolTip() const;
// Indicate if rendering mode is supported
virtual bool supportsRenderingMode(RenderingMode m) const { return ( m!=PointsPlusNormals && m!=Splatting); }
virtual bool supportsRenderingMode(RenderingMode m) const { return ( m!=PointsPlusNormals && m!=Splatting && m!=ShadedPoints); }
// OpenGL drawing in a display list
virtual void draw() const {}
virtual void draw(CGAL::Three::Viewer_interface*) const;

View File

@ -70,7 +70,7 @@ public:
QMenu* contextMenu();
// Indicate if rendering mode is supported
virtual bool supportsRenderingMode(RenderingMode m) const { return (m!=PointsPlusNormals && m!=Splatting); }
virtual bool supportsRenderingMode(RenderingMode m) const { return (m!=PointsPlusNormals && m!=Splatting && m!=ShadedPoints); }
// Points/Wireframe/Flat/Gouraud OpenGL drawing in a display list
void draw() const {}
virtual void draw(CGAL::Three::Viewer_interface*) const;

View File

@ -29,7 +29,7 @@ public:
virtual QString toolTip() const;
// Indicate if rendering mode is supported
virtual bool supportsRenderingMode(RenderingMode m) const { return (m != Splatting && m != PointsPlusNormals && m != Points && m != Gouraud ); }
virtual bool supportsRenderingMode(RenderingMode m) const { return (m != Splatting && m != PointsPlusNormals && m != Points && m != Gouraud && m != ShadedPoints); }
// Points/Wireframe/Flat/Gouraud OpenGL drawing in a display list
void draw() const {}
virtual void draw(CGAL::Three::Viewer_interface*) const;

View File

@ -50,8 +50,8 @@ enum RenderingMode { Points = 0,
Flat,
FlatPlusEdges,
Gouraud,
LastRenderingMode = Gouraud,
NumberOfRenderingMode = LastRenderingMode+1 };
ShadedPoints,
NumberOfRenderingMode};
namespace CGAL {

View File

@ -285,6 +285,10 @@ public Q_SLOTS:
void setPointsMode() {
setRenderingMode(Points);
}
//!Sets the RenderingMode to Points.
void setShadedPointsMode() {
setRenderingMode(ShadedPoints);
}
//!Sets the RenderingMode to Wireframe.
void setWireframeMode() {
setRenderingMode(Wireframe);