Subject: CGAL users discussion list
List archive
- From: Lettuce <>
- To:
- Subject: Re: [cgal-discuss] Polyhedron rending with OpenGL
- Date: Wed, 6 Jun 2018 01:31:19 -0700 (MST)
- Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None ; spf=Fail ; spf=Pass
- Ironport-phdr: 9a23:d5XpJBYnst0uBgeCRlCmdR7/LSx+4OfEezUN459isYplN5qZoMy9bnLW6fgltlLVR4KTs6sC17KL9fi4EUU7or+5+EgYd5JNUxJXwe43pCcHRPC/NEvgMfTxZDY7FskRHHVs/nW8LFQHUJ2mPw6arXK99yMdFQviPgRpOOv1BpTSj8Oq3Oyu5pHfeQpFiCa9bL9oMBm6sRjau9ULj4dlNqs/0AbCrGFSe+RRy2NoJFaTkAj568yt4pNt8Dletuw4+cJYXqr0Y6o3TbpDDDQ7KG81/9HktQPCTQSU+HQRVHgdnwdSDAjE6BH6WYrxsjf/u+Fg1iSWIdH6QLYpUjmk8qxlSgLniD0fOjA38G/ZlM9+g6BVoBy8qBNw34HabZqJNPd8Yq/RYc8WSXZfUstXSidPApm8b4wKD+cZO+hXsZX9p0cTrRSiGwanGeTiyj1NhnL23aA33OcsHR3d0QA9Ht8Dvm7Yo8nyNKcXSO24yrTDwzvEb/NTwzj96Y7Ifwgnof6WRr1/as7Rxlc1GwzZiVWQrJTpMC+a1usXt2iX9e1gVfigi2Mhtgp/oSCvy98xhoTImI4Z0E7I+CV3zYovONG1RkB2bcSmHZdOsSyRKpF4Tdk4Q25yvSY30r0GtoC/fCgN0JknwRHSZ+aBc4eS+R3sT+KRLiliiH15f7K/gg6+8UmmyuLiSsm5yEtGoytbntXWqHwA1xLe5tKaRvZz8EqtwzSC2x7L5uFBO080lK7bK5A7wr43k5oeqUbDHir2lUj2g6KbdVko9/O15+nmbLjqvIOTN4hxig3mKKQhhtS/AfgkMggJR2WU5eu826fn/UHgXbpKj+Y2nbXEsJDBPsQWvbW5Ag9Q0oY78RmzFTam0NICnXkGNl1JYhyHj5K6c23Jdfv3BPP6j1W3mypw3NjHOKfgC9PDNCvtirDkKJJw91JBwwd7mdJaus8IWukpeayoHET2sYqLXVcCLwWozrO/W51G3YQEVDfXW/7LAObpqVaNo9kXDayJbY4Rtiz6Lql3vqC1y3Q+nA1BJPX77d4scHm9W89eDQCBe3O90I5fSiEBuQ9sFLW32m3HaiZaYjOJZ4x55jw/D9v7X4GfAIakiraF0WGwGZgEP20=
thanks for you advice and here is my complete code:
#define CGAL_EIGEN3_ENABLED
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Polyhedron_3.h>
#include <CGAL/Polygon_mesh_processing/compute_normal.h>
#include <CGAL/IO/Polyhedron_iostream.h>
#include <CGAL/poisson_surface_reconstruction.h>
#include <CGAL/IO/read_xyz_points.h>
#include<gl/freeglut.h>
#include<gl/glut.h>
#include<GL/GL.H>
#include<gl/GLU.H>
#include <vector>
#include <fstream>
float xx;
float yy;
float zz;
typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel;
typedef Kernel::Point_3 Point;
typedef Kernel::Vector_3 Vector;
typedef std::pair<Point, Vector> Pwn;
typedef CGAL::Polyhedron_3<Kernel> Polyhedron;
typedef boost::graph_traits<Polyhedron>::vertex_descriptor
vertex_descriptor;
typedef boost::graph_traits<Polyhedron>::face_descriptor face_descriptor;
const float g_ambDiff[4] = { 1.0f, 0.5f, 0.0f, 1.0f };//value of lighting
const float g_lightPos[] = { 10.0f, 10.0f, 10.0f, 0.0f };
const float g_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const float g_shininess[] = { 50.0f };
Kernel::Vector_3 n;
Polyhedron P;
std::map<face_descriptor, Vector> fnormals;
std::map<vertex_descriptor, Vector> vnormals;
Polyhedron::Vertex_iterator v;
void gl_draw_facet(Polyhedron::Facet_iterator f){
Polyhedron::Halfedge_around_facet_circulator he = f->facet_begin();
do{
const Point& p = he->vertex()->point();
glVertex3d(p.x(), p.y(), p.z());
} while (++he != f->facet_begin());
}
void getPoint()
{
std::vector<Pwn> points;
std::ifstream stream("data/kitten.xyz");
if (!stream ||
!CGAL::read_xyz_points(
stream,
std::back_inserter(points),
CGAL::parameters::point_map(CGAL::First_of_pair_property_map<Pwn>()).
normal_map(CGAL::Second_of_pair_property_map<Pwn>())))
{
std::cerr << "Error: cannot read file data/kitten.xyz" <<
std::endl;
}
double average_spacing =
CGAL::compute_average_spacing<CGAL::Sequential_tag>
(points, 6,
CGAL::parameters::point_map(CGAL::First_of_pair_property_map<Pwn>()));
CGAL::poisson_surface_reconstruction_delaunay
(points.begin(), points.end(),
CGAL::First_of_pair_property_map<Pwn>(),
CGAL::Second_of_pair_property_map<Pwn>(),
P, average_spacing);
}
void drawPoint(){
Polyhedron::Vertex_iterator v;
Polyhedron::Facet_iterator f;
Polyhedron::Edge_iterator eit;
Polyhedron::Halfedge_handle h_handle;
double x, y, z;
CGAL::Polygon_mesh_processing::compute_normals(P,
boost::make_assoc_property_map(vnormals),
boost::make_assoc_property_map(fnormals));
glBegin(GL_TRIANGLES);
for (f = P.facets_begin(); f != P.facets_end(); f++){
xx = fnormals[f].x() /
sqrt((fnormals[f].x()*fnormals[f].x()) +
(fnormals[f].y()*fnormals[f].y()) + (fnormals[f].z()*fnormals[f].z()));
yy = fnormals[f].y() /
sqrt((fnormals[f].x()*fnormals[f].x()) +
(fnormals[f].y()*fnormals[f].y()) + (fnormals[f].z()*fnormals[f].z()));
zz = fnormals[f].z() /
sqrt((fnormals[f].x()*fnormals[f].x()) +
(fnormals[f].y()*fnormals[f].y()) + (fnormals[f].z()*fnormals[f].z()));
glNormal3f(xx, yy, zz);
gl_draw_facet(f);
}
glEnd();
}
void init(){
glClearColor(0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_FLAT);
}
void display(){
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
drawPoint();
glFlush();
glutSwapBuffers();
}
int main(int argc, char** argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutInitWindowPosition(100, 100);
glutCreateWindow("points");
init();
getPoint();
glutDisplayFunc(display);
glutKeyboardFunc(key);
glClearColor(0.2, 0.55, 1.0, 1);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_POSITION, g_lightPos);
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, g_ambDiff);
glMaterialfv(GL_FRONT, GL_SPECULAR, g_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, g_shininess);
glutMainLoop();
return 0;
}
the data "kitten.xyz" comes from the cgal examples
"Poisson_surface_reconstruction_3" or you can see it from here
https://doc.cgal.org/latest/Poisson_surface_reconstruction_3/Poisson_surface_reconstruction_3_2poisson_reconstruction_function_8cpp-example.html
--
Sent from: http://cgal-discuss.949826.n4.nabble.com/
- [cgal-discuss] Polyhedron rending with OpenGL, Lettuce, 06/06/2018
- Re: [cgal-discuss] Polyhedron rending with OpenGL, Sebastien Loriot (GeometryFactory), 06/06/2018
- Re: [cgal-discuss] Polyhedron rending with OpenGL, Lettuce, 06/06/2018
- <Possible follow-up(s)>
- Re: [cgal-discuss] Polyhedron rending with OpenGL, jm55480, 06/06/2018
- Re: [cgal-discuss] Polyhedron rending with OpenGL, Sebastien Loriot (GeometryFactory), 06/06/2018
Archive powered by MHonArc 2.6.18.