Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
CGoGN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Hurstel
CGoGN
Commits
7f08b177
Commit
7f08b177
authored
Dec 15, 2011
by
untereiner
Browse files
Options
Browse Files
Download
Plain Diff
Merge cgogn:~kraemer/CGoGN
parents
e2a25322
96797011
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
86 additions
and
61 deletions
+86
-61
Apps/Examples/Tests/concave_rendering.cpp
Apps/Examples/Tests/concave_rendering.cpp
+3
-4
include/Algo/Render/GL2/mapRender.h
include/Algo/Render/GL2/mapRender.h
+9
-10
include/Algo/Render/GL2/mapRender.hpp
include/Algo/Render/GL2/mapRender.hpp
+73
-45
include/Utils/Shaders/shaderScalarField.frag
include/Utils/Shaders/shaderScalarField.frag
+1
-1
src/Algo/Render/mapRender.cpp
src/Algo/Render/mapRender.cpp
+0
-1
No files found.
Apps/Examples/Tests/concave_rendering.cpp
View file @
7f08b177
...
...
@@ -438,10 +438,9 @@ int main(int argc, char **argv)
sqt
.
m_positionVBO
->
updateData
(
position
);
// update des primitives du renderer
sqt
.
m_render
->
initPrimitives
<
PFP
>
(
myMap
,
allDarts
,
Algo
::
Render
::
GL2
::
TRIANGLES
);
sqt
.
m_render
->
initPrimitives
<
PFP
>
(
myMap
,
allDarts
,
Algo
::
Render
::
GL2
::
LINES
);
sqt
.
m_render
->
initPrimitives
<
PFP
>
(
myMap
,
allDarts
,
Algo
::
Render
::
GL2
::
POINTS
);
sqt
.
m_render
->
initPrimitives
<
PFP
>
(
myMap
,
allDarts
,
Algo
::
Render
::
GL2
::
TRIANGLES
,
&
position
);
sqt
.
m_render
->
initPrimitives
<
PFP
>
(
myMap
,
allDarts
,
Algo
::
Render
::
GL2
::
LINES
,
&
position
);
sqt
.
m_render
->
initPrimitives
<
PFP
>
(
myMap
,
allDarts
,
Algo
::
Render
::
GL2
::
POINTS
,
&
position
);
// show final pour premier redraw
sqt
.
show
();
...
...
include/Algo/Render/GL2/mapRender.h
View file @
7f08b177
...
...
@@ -78,7 +78,6 @@ enum bufferIndex
SIZE_BUFFER
}
;
class
MapRender
{
...
...
@@ -137,8 +136,6 @@ protected:
};
public:
/**
* Constructor
...
...
@@ -159,7 +156,6 @@ public:
buffer_array
get_nb_index_buffer
()
{
return
std
::
make_pair
(
m_nbIndices
,
SIZE_BUFFER
);
}
protected:
/**
* addition of indices table of one triangle
* @param d a dart of the triangle
...
...
@@ -169,29 +165,28 @@ protected:
void
addTri
(
typename
PFP
::
MAP
&
map
,
Dart
d
,
std
::
vector
<
GLuint
>&
tableIndices
)
;
template
<
typename
PFP
>
inline
void
addEarTri
(
typename
PFP
::
MAP
&
map
,
Dart
d
,
std
::
vector
<
GLuint
>&
tableIndices
);
inline
void
addEarTri
(
typename
PFP
::
MAP
&
map
,
Dart
d
,
std
::
vector
<
GLuint
>&
tableIndices
,
const
typename
PFP
::
TVEC3
*
position
);
template
<
typename
PFP
>
float
computeEarAngle
(
const
typename
PFP
::
VEC3
&
P1
,
const
typename
PFP
::
VEC3
&
P2
,
const
typename
PFP
::
VEC3
&
P3
,
const
typename
PFP
::
VEC3
&
normalPoly
);
template
<
typename
PFP
>
bool
computeEarIntersection
(
AttributeHandler
<
typename
PFP
::
VEC3
>
&
position
,
VertexPoly
*
vp
,
const
typename
PFP
::
VEC3
&
normalPoly
);
bool
computeEarIntersection
(
const
typename
PFP
::
TVEC3
&
position
,
VertexPoly
*
vp
,
const
typename
PFP
::
VEC3
&
normalPoly
);
template
<
typename
PFP
>
void
recompute2Ears
(
AttributeHandler
<
typename
PFP
::
VEC3
>
&
position
,
VertexPoly
*
vp
,
const
typename
PFP
::
VEC3
&
normalPoly
,
VPMS
&
ears
,
bool
convex
);
void
recompute2Ears
(
const
typename
PFP
::
TVEC3
&
position
,
VertexPoly
*
vp
,
const
typename
PFP
::
VEC3
&
normalPoly
,
VPMS
&
ears
,
bool
convex
);
template
<
typename
VEC3
>
bool
inTriangle
(
const
VEC3
&
P
,
const
VEC3
&
normal
,
const
VEC3
&
Ta
,
const
VEC3
&
Tb
,
const
VEC3
&
Tc
);
public:
/**
* creation of indices table of triangles (optimized order)
* @param tableIndices the table where indices are stored
*/
template
<
typename
PFP
>
void
initTriangles
(
typename
PFP
::
MAP
&
map
,
const
FunctorSelect
&
good
,
std
::
vector
<
GLuint
>&
tableIndices
,
unsigned
int
thread
=
0
)
;
void
initTriangles
(
typename
PFP
::
MAP
&
map
,
const
FunctorSelect
&
good
,
std
::
vector
<
GLuint
>&
tableIndices
,
const
typename
PFP
::
TVEC3
*
position
,
unsigned
int
thread
=
0
)
;
template
<
typename
PFP
>
void
initTrianglesOptimized
(
typename
PFP
::
MAP
&
map
,
const
FunctorSelect
&
good
,
std
::
vector
<
GLuint
>&
tableIndices
,
unsigned
int
thread
=
0
)
;
void
initTrianglesOptimized
(
typename
PFP
::
MAP
&
map
,
const
FunctorSelect
&
good
,
std
::
vector
<
GLuint
>&
tableIndices
,
const
typename
PFP
::
TVEC3
*
position
,
unsigned
int
thread
=
0
)
;
/**
* creation of indices table of lines (optimized order)
...
...
@@ -216,6 +211,7 @@ public:
template
<
typename
PFP
>
void
initBoundaries
(
typename
PFP
::
MAP
&
map
,
const
FunctorSelect
&
good
,
std
::
vector
<
GLuint
>&
tableIndices
,
unsigned
int
thread
=
0
)
;
public:
/**
* initialization of the VBO indices primitives
* computed by a traversal of the map
...
...
@@ -224,6 +220,9 @@ public:
template
<
typename
PFP
>
void
initPrimitives
(
typename
PFP
::
MAP
&
map
,
const
FunctorSelect
&
good
,
int
prim
,
bool
optimized
=
true
,
unsigned
int
thread
=
0
)
;
template
<
typename
PFP
>
void
initPrimitives
(
typename
PFP
::
MAP
&
map
,
const
FunctorSelect
&
good
,
int
prim
,
const
typename
PFP
::
TVEC3
*
position
,
bool
optimized
=
true
,
unsigned
int
thread
=
0
)
;
/**
* initialization of the VBO indices primitives
* using the given table
...
...
include/Algo/Render/GL2/mapRender.hpp
View file @
7f08b177
...
...
@@ -71,7 +71,7 @@ bool MapRender::inTriangle(const VEC3& P, const VEC3& normal, const VEC3& Ta, c
}
template
<
typename
PFP
>
void
MapRender
::
recompute2Ears
(
AttributeHandler
<
typename
PFP
::
VEC3
>
&
position
,
VertexPoly
*
vp
,
const
typename
PFP
::
VEC3
&
normalPoly
,
VPMS
&
ears
,
bool
convex
)
void
MapRender
::
recompute2Ears
(
const
typename
PFP
::
TVEC3
&
position
,
VertexPoly
*
vp
,
const
typename
PFP
::
VEC3
&
normalPoly
,
VPMS
&
ears
,
bool
convex
)
{
VertexPoly
*
vprev
=
vp
->
prev
;
VertexPoly
*
vp2
=
vp
->
next
;
...
...
@@ -151,7 +151,7 @@ float MapRender::computeEarAngle(const typename PFP::VEC3& P1, const typename PF
}
template
<
typename
PFP
>
bool
MapRender
::
computeEarIntersection
(
AttributeHandler
<
typename
PFP
::
VEC3
>
&
position
,
VertexPoly
*
vp
,
const
typename
PFP
::
VEC3
&
normalPoly
)
bool
MapRender
::
computeEarIntersection
(
const
typename
PFP
::
TVEC3
&
position
,
VertexPoly
*
vp
,
const
typename
PFP
::
VEC3
&
normalPoly
)
{
VertexPoly
*
endV
=
vp
->
prev
;
...
...
@@ -175,20 +175,19 @@ bool MapRender::computeEarIntersection(AttributeHandler<typename PFP::VEC3>& pos
}
template
<
typename
PFP
>
inline
void
MapRender
::
addEarTri
(
typename
PFP
::
MAP
&
map
,
Dart
d
,
std
::
vector
<
GLuint
>&
tableIndices
)
inline
void
MapRender
::
addEarTri
(
typename
PFP
::
MAP
&
map
,
Dart
d
,
std
::
vector
<
GLuint
>&
tableIndices
,
const
typename
PFP
::
TVEC3
*
pos
)
{
bool
(
*
fn_pt1
)(
VertexPoly
*
,
VertexPoly
*
)
=
&
(
MapRender
::
cmpVP
);
VPMS
ears
(
fn_pt1
);
AttributeHandler
<
typename
PFP
::
VEC3
>
position
=
map
.
template
getAttribute
<
typename
PFP
::
VEC3
>(
VERTEX
,
"position"
);
const
typename
PFP
::
TVEC3
&
position
=
*
pos
;
// compute normal to polygon
typename
PFP
::
VEC3
normalPoly
=
Algo
::
Geometry
::
newellNormal
<
PFP
>
(
map
,
d
,
position
);
// first pass create polygon in chained list witht angle computation
VertexPoly
*
vpp
=
NULL
;
VertexPoly
*
prem
=
NULL
;
VertexPoly
*
vpp
=
NULL
;
VertexPoly
*
prem
=
NULL
;
unsigned
int
nbv
=
0
;
unsigned
int
nbe
=
0
;
Dart
a
=
d
;
...
...
@@ -196,27 +195,27 @@ inline void MapRender::addEarTri(typename PFP::MAP& map, Dart d, std::vector<GLu
Dart
c
=
map
.
phi1
(
b
);
do
{
typename
PFP
::
VEC3
P1
=
position
[
map
.
getEmbedding
(
VERTEX
,
a
)];
typename
PFP
::
VEC3
P2
=
position
[
map
.
getEmbedding
(
VERTEX
,
b
)];
typename
PFP
::
VEC3
P3
=
position
[
map
.
getEmbedding
(
VERTEX
,
c
)];
typename
PFP
::
VEC3
P1
=
position
[
map
.
getEmbedding
(
VERTEX
,
a
)];
typename
PFP
::
VEC3
P2
=
position
[
map
.
getEmbedding
(
VERTEX
,
b
)];
typename
PFP
::
VEC3
P3
=
position
[
map
.
getEmbedding
(
VERTEX
,
c
)];
float
val
=
computeEarAngle
<
PFP
>
(
P1
,
P2
,
P3
,
normalPoly
);
VertexPoly
*
vp
=
new
VertexPoly
(
map
.
getEmbedding
(
VERTEX
,
b
),
val
,(
P3
-
P1
).
norm2
(),
vpp
);
float
val
=
computeEarAngle
<
PFP
>
(
P1
,
P2
,
P3
,
normalPoly
);
VertexPoly
*
vp
=
new
VertexPoly
(
map
.
getEmbedding
(
VERTEX
,
b
),
val
,
(
P3
-
P1
).
norm2
(),
vpp
);
if
(
vp
->
value
<
5.0
f
)
if
(
vp
->
value
<
5.0
f
)
nbe
++
;
if
(
vpp
==
NULL
)
if
(
vpp
==
NULL
)
prem
=
vp
;
vpp
=
vp
;
a
=
b
;
b
=
c
;
c
=
map
.
phi1
(
c
);
nbv
++
;
}
while
(
a
!=
d
);
}
while
(
a
!=
d
);
VertexPoly
::
close
(
prem
,
vpp
);
VertexPoly
::
close
(
prem
,
vpp
);
bool
convex
=
nbe
==
nbv
;
bool
convex
=
nbe
==
nbv
;
if
(
convex
)
{
// second pass with no test of intersections with polygons
...
...
@@ -234,7 +233,7 @@ inline void MapRender::addEarTri(typename PFP::MAP& map, Dart d, std::vector<GLu
for
(
unsigned
int
i
=
0
;
i
<
nbv
;
++
i
)
{
if
(
vpp
->
value
<
5.0
f
)
computeEarIntersection
<
PFP
>
(
position
,
vpp
,
normalPoly
);
computeEarIntersection
<
PFP
>
(
position
,
vpp
,
normalPoly
);
vpp
->
ear
=
ears
.
insert
(
vpp
);
vpp
=
vpp
->
next
;
}
...
...
@@ -286,40 +285,43 @@ inline void MapRender::addTri(typename PFP::MAP& map, Dart d, std::vector<GLuint
Dart
b
=
map
.
phi1
(
a
);
Dart
c
=
map
.
phi1
(
b
);
if
(
map
.
phi1
(
c
)
!=
a
)
{
addEarTri
<
PFP
>
(
map
,
d
,
tableIndices
);
return
;
}
tableIndices
.
push_back
(
map
.
getEmbedding
(
VERTEX
,
d
));
tableIndices
.
push_back
(
map
.
getEmbedding
(
VERTEX
,
b
));
tableIndices
.
push_back
(
map
.
getEmbedding
(
VERTEX
,
c
));
// loop to cut a polygon in triangle on the fly (works only with convex faces)
// do
// {
// tableIndices.push_back(map.getEmbedding(VERTEX, d));
// tableIndices.push_back(map.getEmbedding(VERTEX, b));
// tableIndices.push_back(map.getEmbedding(VERTEX, c));
// b = c;
// c = map.phi1(b);
// } while (c != d);
do
{
tableIndices
.
push_back
(
map
.
getEmbedding
(
VERTEX
,
d
));
tableIndices
.
push_back
(
map
.
getEmbedding
(
VERTEX
,
b
));
tableIndices
.
push_back
(
map
.
getEmbedding
(
VERTEX
,
c
));
b
=
c
;
c
=
map
.
phi1
(
b
);
}
while
(
c
!=
d
);
}
template
<
typename
PFP
>
void
MapRender
::
initTriangles
(
typename
PFP
::
MAP
&
map
,
const
FunctorSelect
&
good
,
std
::
vector
<
GLuint
>&
tableIndices
,
unsigned
int
thread
)
void
MapRender
::
initTriangles
(
typename
PFP
::
MAP
&
map
,
const
FunctorSelect
&
good
,
std
::
vector
<
GLuint
>&
tableIndices
,
const
typename
PFP
::
TVEC3
*
position
,
unsigned
int
thread
)
{
tableIndices
.
reserve
(
4
*
map
.
getNbDarts
()
/
3
);
TraversorF
<
typename
PFP
::
MAP
>
trav
(
map
,
good
,
thread
);
for
(
Dart
d
=
trav
.
begin
();
d
!=
trav
.
end
();
d
=
trav
.
next
())
addTri
<
PFP
>
(
map
,
d
,
tableIndices
);
if
(
position
==
NULL
)
{
for
(
Dart
d
=
trav
.
begin
();
d
!=
trav
.
end
();
d
=
trav
.
next
())
addTri
<
PFP
>
(
map
,
d
,
tableIndices
);
}
else
{
for
(
Dart
d
=
trav
.
begin
();
d
!=
trav
.
end
();
d
=
trav
.
next
())
{
if
(
map
.
faceDegree
(
d
)
==
3
)
addTri
<
PFP
>
(
map
,
d
,
tableIndices
);
else
addEarTri
<
PFP
>
(
map
,
d
,
tableIndices
,
position
);
}
}
}
template
<
typename
PFP
>
void
MapRender
::
initTrianglesOptimized
(
typename
PFP
::
MAP
&
map
,
const
FunctorSelect
&
good
,
std
::
vector
<
GLuint
>&
tableIndices
,
unsigned
int
thread
)
void
MapRender
::
initTrianglesOptimized
(
typename
PFP
::
MAP
&
map
,
const
FunctorSelect
&
good
,
std
::
vector
<
GLuint
>&
tableIndices
,
const
typename
PFP
::
TVEC3
*
position
,
unsigned
int
thread
)
{
#define LIST_SIZE 20
DartMarker
m
(
map
,
thread
);
...
...
@@ -335,7 +337,17 @@ void MapRender::initTrianglesOptimized(typename PFP::MAP& map, const FunctorSele
std
::
list
<
Dart
>
bound
;
if
(
good
(
dd
)
&&
!
map
.
isBoundaryMarked
(
dd
))
addTri
<
PFP
>
(
map
,
dd
,
tableIndices
);
{
if
(
position
==
NULL
)
addTri
<
PFP
>
(
map
,
dd
,
tableIndices
);
else
{
if
(
map
.
faceDegree
(
dd
)
==
3
)
addTri
<
PFP
>
(
map
,
dd
,
tableIndices
);
else
addEarTri
<
PFP
>
(
map
,
dd
,
tableIndices
,
position
);
}
}
m
.
markOrbit
(
FACE
,
dd
);
bound
.
push_back
(
dd
);
int
nb
=
1
;
...
...
@@ -351,7 +363,17 @@ void MapRender::initTrianglesOptimized(typename PFP::MAP& map, const FunctorSele
if
(
!
m
.
isMarked
(
f
))
{
if
(
good
(
f
)
&&
!
map
.
isBoundaryMarked
(
f
))
addTri
<
PFP
>
(
map
,
f
,
tableIndices
);
{
if
(
position
==
NULL
)
addTri
<
PFP
>
(
map
,
f
,
tableIndices
);
else
{
if
(
map
.
faceDegree
(
f
)
==
3
)
addTri
<
PFP
>
(
map
,
f
,
tableIndices
);
else
addEarTri
<
PFP
>
(
map
,
f
,
tableIndices
,
position
);
}
}
m
.
markOrbit
(
FACE
,
f
);
bound
.
push_back
(
map
.
phi1
(
f
));
++
nb
;
...
...
@@ -464,6 +486,12 @@ void MapRender::initPoints(typename PFP::MAP& map, const FunctorSelect& good, st
template
<
typename
PFP
>
void
MapRender
::
initPrimitives
(
typename
PFP
::
MAP
&
map
,
const
FunctorSelect
&
good
,
int
prim
,
bool
optimized
,
unsigned
int
thread
)
{
initPrimitives
<
PFP
>
(
map
,
good
,
prim
,
NULL
,
optimized
,
thread
)
;
}
template
<
typename
PFP
>
void
MapRender
::
initPrimitives
(
typename
PFP
::
MAP
&
map
,
const
FunctorSelect
&
good
,
int
prim
,
const
typename
PFP
::
TVEC3
*
position
,
bool
optimized
,
unsigned
int
thread
)
{
std
::
vector
<
GLuint
>
tableIndices
;
...
...
@@ -487,9 +515,9 @@ void MapRender::initPrimitives(typename PFP::MAP& map, const FunctorSelect& good
break
;
case
TRIANGLES
:
if
(
optimized
)
initTrianglesOptimized
<
PFP
>
(
map
,
good
,
tableIndices
,
thread
);
initTrianglesOptimized
<
PFP
>
(
map
,
good
,
tableIndices
,
position
,
thread
);
else
initTriangles
<
PFP
>
(
map
,
good
,
tableIndices
,
thread
)
;
initTriangles
<
PFP
>
(
map
,
good
,
tableIndices
,
position
,
thread
)
;
m_nbIndices
[
TRIANGLE_INDICES
]
=
tableIndices
.
size
();
vbo_ind
=
m_indexBuffers
[
TRIANGLE_INDICES
];
break
;
...
...
include/Utils/Shaders/shaderScalarField.frag
View file @
7f08b177
...
...
@@ -6,7 +6,7 @@ VARYING_FRAG float scalar;
FRAG_OUT_DEF
;
void
main
()
{
float
s
=
scalar
*
5
0
.
0
;
float
s
=
scalar
*
3
0
.
0
;
if
(
s
-
floor
(
s
)
<=
0
.
01
)
gl_FragColor
=
vec4
(
0
.
0
);
else
...
...
src/Algo/Render/mapRender.cpp
View file @
7f08b177
...
...
@@ -37,7 +37,6 @@ namespace Render
namespace
GL2
{
MapRender
::
MapRender
()
{
glGenBuffersARB
(
SIZE_BUFFER
,
m_indexBuffers
)
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment