Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Thomas Pitiot
CGoGN
Commits
b217b3af
Commit
b217b3af
authored
Feb 28, 2014
by
Sylvain Thery
Browse files
remove BB of groups in OBJ import
parent
a8fb63ca
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
Apps/Examples/viewerOBJ.cpp
View file @
b217b3af
...
...
@@ -35,7 +35,8 @@ ObjView::ObjView():
m_texcoordVBO
(
NULL
),
m_shader
(
NULL
),
m_shader2
(
NULL
),
m_RenderStyle
(
2
)
m_RenderStyle
(
2
),
m_currentGroupDrawn
(
0xffffffff
)
{}
ObjView
::~
ObjView
()
...
...
@@ -69,6 +70,23 @@ void ObjView::cb_keyPress(int k)
case
't'
:
m_RenderStyle
=
2
;
break
;
case
'o'
:
m_currentGroupDrawn
=
0xffffffff
;
break
;
case
'O'
:
m_currentGroupDrawn
=
0
;
std
::
cout
<<
"Group "
<<
m_obj
.
objGroupName
(
m_currentGroupDrawn
)
<<
std
::
endl
;
break
;
case
'-'
:
m_currentGroupDrawn
--
;
std
::
cout
<<
"Group "
<<
m_obj
.
objGroupName
(
m_currentGroupDrawn
)
<<
std
::
endl
;
break
;
case
'+'
:
m_currentGroupDrawn
++
;
std
::
cout
<<
"Group "
<<
m_obj
.
objGroupName
(
m_currentGroupDrawn
)
<<
std
::
endl
;
break
;
default:
break
;
}
...
...
@@ -81,6 +99,8 @@ void ObjView::cb_initGL()
// choose to use GL version 2
Utils
::
GLSLShader
::
setCurrentOGLVersion
(
2
);
m_dr
=
new
Utils
::
Drawer
;
// create VBO for position
m_positionVBO
=
new
Utils
::
VBO
;
m_texcoordVBO
=
new
Utils
::
VBO
;
...
...
@@ -105,22 +125,130 @@ void ObjView::cb_initGL()
m_obj
.
createGroupMatVBO_PTN
(
m_positionVBO
,
m_texcoordVBO
,
m_normalVBO
);
}
void
ObjView
::
drawBB
(
const
Geom
::
BoundingBox
<
VEC3
>&
bb
)
{
const
VEC3
&
mi
=
bb
.
min
();
const
VEC3
&
ma
=
bb
.
max
();
m_dr
->
newList
(
GL_COMPILE_AND_EXECUTE
);
m_dr
->
lineWidth
(
3.0
f
);
m_dr
->
begin
(
GL_LINE_LOOP
);
m_dr
->
color3f
(
1.0
f
,
1.0
f
,
0.0
f
);
m_dr
->
vertex3f
(
mi
[
0
],
mi
[
1
],
mi
[
2
]);
m_dr
->
vertex3f
(
ma
[
0
],
mi
[
1
],
mi
[
2
]);
m_dr
->
vertex3f
(
ma
[
0
],
ma
[
1
],
mi
[
2
]);
m_dr
->
vertex3f
(
mi
[
0
],
ma
[
1
],
mi
[
2
]);
m_dr
->
end
();
m_dr
->
begin
(
GL_LINE_LOOP
);
m_dr
->
color3f
(
1.0
f
,
1.0
f
,
0.0
f
);
m_dr
->
vertex3f
(
mi
[
0
],
mi
[
1
],
ma
[
2
]);
m_dr
->
vertex3f
(
ma
[
0
],
mi
[
1
],
ma
[
2
]);
m_dr
->
vertex3f
(
ma
[
0
],
ma
[
1
],
ma
[
2
]);
m_dr
->
vertex3f
(
mi
[
0
],
ma
[
1
],
ma
[
2
]);
m_dr
->
end
();
m_dr
->
begin
(
GL_LINES
);
m_dr
->
color3f
(
1.0
f
,
1.0
f
,
0.0
f
);
m_dr
->
vertex3f
(
mi
[
0
],
mi
[
1
],
mi
[
2
]);
m_dr
->
vertex3f
(
mi
[
0
],
mi
[
1
],
ma
[
2
]);
m_dr
->
vertex3f
(
mi
[
0
],
ma
[
1
],
mi
[
2
]);
m_dr
->
vertex3f
(
mi
[
0
],
ma
[
1
],
ma
[
2
]);
m_dr
->
vertex3f
(
ma
[
0
],
ma
[
1
],
mi
[
2
]);
m_dr
->
vertex3f
(
ma
[
0
],
ma
[
1
],
ma
[
2
]);
m_dr
->
vertex3f
(
ma
[
0
],
mi
[
1
],
mi
[
2
]);
m_dr
->
vertex3f
(
ma
[
0
],
mi
[
1
],
ma
[
2
]);
m_dr
->
end
();
m_dr
->
endList
();
}
void
ObjView
::
cb_redraw
()
{
glPolygonMode
(
GL_FRONT_AND_BACK
,
GL_FILL
);
unsigned
int
nb
=
m_obj
.
nb
Mat
Groups
();
const
std
::
vector
<
Algo
::
Surface
::
Import
::
MaterialOBJ
*>&
mats
=
m_obj
.
getMaterials
();
unsigned
int
nb
=
m_obj
.
nb
Obj
Groups
();
//
const std::vector<Algo::Surface::Import::MaterialOBJ*>& mats = m_obj.getMaterials();
if
(
m_currentGroupDrawn
<
(
nb
-
1
))
{
std
::
cout
<<
"Draw Object "
<<
m_currentGroupDrawn
<<
std
::
endl
;
unsigned
int
i
=
m_currentGroupDrawn
;
drawBB
(
m_obj
.
getGroupBB
(
i
));
std
::
cout
<<
"BB drawn"
<<
std
::
endl
;
switch
(
m_RenderStyle
)
{
case
0
:
// MONO
for
(
unsigned
int
j
=
0
;
j
<
m_obj
.
nbSubGroup
(
i
);
++
j
)
{
Geom
::
Vec4f
v
(
0.2
f
,
1.0
f
,
0.4
f
,
0.0
f
);
// color here green
m_phongShader
->
setAmbiant
(
0.2
f
*
v
)
;
m_phongShader
->
setDiffuse
(
v
)
;
m_phongShader
->
setSpecular
(
v
)
;
m_phongShader
->
setShininess
(
10000.0
)
;
m_phongShader
->
enableVertexAttribs
();
glDrawArrays
(
GL_TRIANGLES
,
m_obj
.
beginIndex
(
i
,
j
),
m_obj
.
nbIndices
(
i
,
j
));
m_phongShader
->
disableVertexAttribs
();
}
break
;
case
1
:
// COLOR
for
(
unsigned
int
j
=
0
;
j
<
m_obj
.
nbSubGroup
(
i
);
++
j
)
{
const
Algo
::
Surface
::
Import
::
MaterialOBJ
*
mat
=
m_obj
.
materialOf
(
i
,
j
);
Geom
::
Vec4f
v
(
mat
->
diffuseColor
[
0
],
mat
->
diffuseColor
[
1
],
mat
->
diffuseColor
[
2
],
0.0
f
);
m_phongShader
->
setAmbiant
(
0.2
f
*
v
)
;
m_phongShader
->
setDiffuse
(
v
)
;
m_phongShader
->
setSpecular
(
v
)
;
m_phongShader
->
setShininess
(
10000.0
)
;
m_phongShader
->
enableVertexAttribs
();
glDrawArrays
(
GL_TRIANGLES
,
m_obj
.
beginIndex
(
i
,
j
),
m_obj
.
nbIndices
(
i
,
j
));
m_phongShader
->
disableVertexAttribs
();
}
default:
for
(
unsigned
int
j
=
0
;
j
<
m_obj
.
nbSubGroup
(
i
);
++
j
)
{
const
Algo
::
Surface
::
Import
::
MaterialOBJ
*
mat
=
m_obj
.
materialOf
(
i
,
j
);
if
(
mat
->
textureDiffuse
!=
NULL
)
{
m_shader2
->
setTexture
(
mat
->
textureDiffuse
);
m_shader2
->
setShininess
(
mat
->
shininess
);
m_shader2
->
setAmbient
(
0.8
f
);
m_shader2
->
activeTexture
();
m_shader2
->
enableVertexAttribs
();
glDrawArrays
(
GL_TRIANGLES
,
m_obj
.
beginIndex
(
i
,
j
),
m_obj
.
nbIndices
(
i
,
j
));
m_shader2
->
disableVertexAttribs
();
}
else
{
Geom
::
Vec4f
v
;
v
[
0
]
=
0.5
f
;
v
[
1
]
=
0.5
f
;
v
[
2
]
=
0.5
f
;
v
[
3
]
=
0.0
f
;
m_phongShader
->
setAmbiant
(
v
)
;
v
[
0
]
=
mat
->
diffuseColor
[
0
];
v
[
1
]
=
mat
->
diffuseColor
[
1
];
v
[
2
]
=
mat
->
diffuseColor
[
2
];
v
[
3
]
=
0.0
f
;
m_phongShader
->
setDiffuse
(
v
)
;
v
[
0
]
=
mat
->
specularColor
[
0
];
v
[
1
]
=
mat
->
specularColor
[
1
];
v
[
2
]
=
mat
->
specularColor
[
2
];
v
[
3
]
=
0.0
f
;
m_phongShader
->
setSpecular
(
v
)
;
m_phongShader
->
setShininess
(
mat
->
shininess
)
;
m_phongShader
->
enableVertexAttribs
();
glDrawArrays
(
GL_TRIANGLES
,
m_obj
.
beginIndex
(
i
,
j
),
m_obj
.
nbIndices
(
i
,
j
));
m_phongShader
->
disableVertexAttribs
();
}
}
}
}
else
for
(
unsigned
int
i
=
0
;
i
<
nb
;
++
i
)
{
drawBB
(
m_obj
.
getGroupBB
(
i
));
switch
(
m_RenderStyle
)
{
case
0
:
// MONO
{
for
(
unsigned
int
j
=
0
;
j
<
m_obj
.
nbSubGroup
(
i
);
++
j
)
{
Geom
::
Vec4f
v
(
0.2
f
,
1.0
f
,
0.4
f
,
0.0
f
);
// color here green
m_phongShader
->
setAmbiant
(
0.2
f
*
v
)
;
m_phongShader
->
setDiffuse
(
v
)
;
...
...
@@ -128,33 +256,39 @@ void ObjView::cb_redraw()
m_phongShader
->
setSpecular
(
v
)
;
m_phongShader
->
setShininess
(
10000.0
)
;
m_phongShader
->
enableVertexAttribs
();
glDrawArrays
(
GL_TRIANGLES
,
m_obj
.
beginIndex
(
i
),
m_obj
.
nbIndices
(
i
));
glDrawArrays
(
GL_TRIANGLES
,
m_obj
.
beginIndex
(
i
,
j
),
m_obj
.
nbIndices
(
i
,
j
));
m_phongShader
->
disableVertexAttribs
();
}
break
;
case
1
:
// COLOR
{
Geom
::
Vec4f
v
(
mats
[
i
]
->
diffuseColor
[
0
],
mats
[
i
]
->
diffuseColor
[
1
],
mats
[
i
]
->
diffuseColor
[
2
],
0.0
f
);
for
(
unsigned
int
j
=
0
;
j
<
m_obj
.
nbSubGroup
(
i
);
++
j
)
{
const
Algo
::
Surface
::
Import
::
MaterialOBJ
*
mat
=
m_obj
.
materialOf
(
i
,
j
);
Geom
::
Vec4f
v
(
mat
->
diffuseColor
[
0
],
mat
->
diffuseColor
[
1
],
mat
->
diffuseColor
[
2
],
0.0
f
);
m_phongShader
->
setAmbiant
(
0.2
f
*
v
)
;
m_phongShader
->
setDiffuse
(
v
)
;
// v[0] = 1.0f; v[1] = 1.0f; v[2] = 1.0f; v[3] = 0.0f; // use this for specular effected
m_phongShader
->
setSpecular
(
v
)
;
m_phongShader
->
setShininess
(
10000.0
)
;
m_phongShader
->
enableVertexAttribs
();
glDrawArrays
(
GL_TRIANGLES
,
m_obj
.
beginIndex
(
i
),
m_obj
.
nbIndices
(
i
));
glDrawArrays
(
GL_TRIANGLES
,
m_obj
.
beginIndex
(
i
,
j
),
m_obj
.
nbIndices
(
i
,
j
));
m_phongShader
->
disableVertexAttribs
();
}
default:
{
if
(
mats
[
i
]
->
textureDiffuse
!=
NULL
)
for
(
unsigned
int
j
=
0
;
j
<
m_obj
.
nbSubGroup
(
i
);
++
j
)
{
const
Algo
::
Surface
::
Import
::
MaterialOBJ
*
mat
=
m_obj
.
materialOf
(
i
,
j
);
if
(
mat
->
textureDiffuse
!=
NULL
)
{
m_shader2
->
setTexture
(
mat
s
[
i
]
->
textureDiffuse
);
m_shader2
->
setShininess
(
mat
s
[
i
]
->
shininess
);
m_shader2
->
setTexture
(
mat
->
textureDiffuse
);
m_shader2
->
setShininess
(
mat
->
shininess
);
m_shader2
->
setAmbient
(
0.8
f
);
m_shader2
->
activeTexture
();
m_shader2
->
enableVertexAttribs
();
glDrawArrays
(
GL_TRIANGLES
,
m_obj
.
beginIndex
(
i
),
m_obj
.
nbIndices
(
i
));
glDrawArrays
(
GL_TRIANGLES
,
m_obj
.
beginIndex
(
i
,
j
),
m_obj
.
nbIndices
(
i
,
j
));
m_shader2
->
disableVertexAttribs
();
}
else
...
...
@@ -162,13 +296,13 @@ void ObjView::cb_redraw()
Geom
::
Vec4f
v
;
v
[
0
]
=
0.5
f
;
v
[
1
]
=
0.5
f
;
v
[
2
]
=
0.5
f
;
v
[
3
]
=
0.0
f
;
m_phongShader
->
setAmbiant
(
v
)
;
v
[
0
]
=
mat
s
[
i
]
->
diffuseColor
[
0
];
v
[
1
]
=
mat
s
[
i
]
->
diffuseColor
[
1
];
v
[
2
]
=
mat
s
[
i
]
->
diffuseColor
[
2
];
v
[
3
]
=
0.0
f
;
v
[
0
]
=
mat
->
diffuseColor
[
0
];
v
[
1
]
=
mat
->
diffuseColor
[
1
];
v
[
2
]
=
mat
->
diffuseColor
[
2
];
v
[
3
]
=
0.0
f
;
m_phongShader
->
setDiffuse
(
v
)
;
v
[
0
]
=
mat
s
[
i
]
->
specularColor
[
0
];
v
[
1
]
=
mat
s
[
i
]
->
specularColor
[
1
];
v
[
2
]
=
mat
s
[
i
]
->
specularColor
[
2
];
v
[
3
]
=
0.0
f
;
v
[
0
]
=
mat
->
specularColor
[
0
];
v
[
1
]
=
mat
->
specularColor
[
1
];
v
[
2
]
=
mat
->
specularColor
[
2
];
v
[
3
]
=
0.0
f
;
m_phongShader
->
setSpecular
(
v
)
;
m_phongShader
->
setShininess
(
mat
s
[
i
]
->
shininess
)
;
m_phongShader
->
setShininess
(
mat
->
shininess
)
;
m_phongShader
->
enableVertexAttribs
();
glDrawArrays
(
GL_TRIANGLES
,
m_obj
.
beginIndex
(
i
),
m_obj
.
nbIndices
(
i
));
glDrawArrays
(
GL_TRIANGLES
,
m_obj
.
beginIndex
(
i
,
j
),
m_obj
.
nbIndices
(
i
,
j
));
m_phongShader
->
disableVertexAttribs
();
}
}
...
...
Apps/Examples/viewerOBJ.h
View file @
b217b3af
...
...
@@ -30,6 +30,7 @@
//#include "Utils/Qt/qtSimple.h"
#include
"Utils/Qt/qtQGLV.h"
#include
"Utils/textures.h"
#include
"Utils/drawer.h"
#include
"Utils/Shaders/shaderSimpleTexture.h"
#include
"Utils/Shaders/shaderPhongTexture.h"
#include
"Utils/Shaders/shaderPhong.h"
...
...
@@ -66,6 +67,10 @@ public:
MAP
myMap
;
Algo
::
Surface
::
Import
::
OBJModel
<
PFP
>
m_obj
;
Utils
::
Drawer
*
m_dr
;
unsigned
int
m_currentGroupDrawn
;
void
drawBB
(
const
Geom
::
BoundingBox
<
VEC3
>&
bb
);
// VBO
Utils
::
VBO
*
m_positionVBO
;
Utils
::
VBO
*
m_normalVBO
;
...
...
include/Algo/Import/importObjTex.h
View file @
b217b3af
...
...
@@ -91,11 +91,18 @@ class OBJModel
protected:
typename
PFP
::
MAP
&
m_map
;
// infof of sub-groups (group/material)
std
::
vector
<
unsigned
int
>
m_beginIndices
;
std
::
vector
<
unsigned
int
>
m_nbIndices
;
std
::
vector
<
unsigned
int
>
m_groupIdx
;
std
::
vector
<
unsigned
int
>
m_sgMat
;
std
::
vector
<
unsigned
int
>
m_objGroups
;
std
::
vector
<
unsigned
int
>
m_groupFirstSub
;
std
::
vector
<
unsigned
int
>
m_groupNbSub
;
std
::
vector
<
std
::
string
>
m_groupNames
;
std
::
vector
<
Geom
::
BoundingBox
<
VEC3
>
>
m_groupBBs
;
...
...
@@ -123,7 +130,7 @@ protected:
unsigned
int
m_tagF
;
void
updateGroups
(
const
std
::
vector
<
Geom
::
Vec3f
>&
pos
);
void
computeBB
(
const
std
::
vector
<
Geom
::
Vec3f
>&
pos
);
public:
...
...
@@ -256,41 +263,67 @@ public:
* @brief nb group of indices created by createGroupMatVBO_XXX
* @return
*/
unsigned
int
nbMatGroups
()
{
return
m_beginIndices
.
size
();
}
// unsigned int nbMatGroups() { return m_beginIndices.size(); }
/**
* @brief number of sub-group in group
* @param grp id of group
* @return
*/
inline
unsigned
int
nbSubGroup
(
unsigned
int
grp
)
const
{
return
m_groupNbSub
[
grp
];}
/**
* @brief get the begin index of
each
group in VBOs (for glDrawArrays)
* @brief get the begin index of
a sub-
group in VBOs (for glDrawArrays)
* @param i id of group
* @param j id of subgroup in group
* @return begin index
*/
unsigned
int
beginIndex
(
unsigned
int
i
)
const
{
return
m_beginIndices
[
i
];
}
inline
unsigned
int
beginIndex
(
unsigned
int
i
,
unsigned
int
j
)
const
{
return
m_beginIndices
[
m_groupFirstSub
[
i
]
+
j
];
}
/**
* @brief get the number of indices of
each
group in VBOs (for glDrawArrays)
* @brief get the number of indices of
a sub-
group in VBOs (for glDrawArrays)
* @param i id of group
* @param j id of subgroup in group
* @return number of indices
*/
unsigned
int
nbIndices
(
unsigned
int
i
)
const
{
return
m_nbIndices
[
i
];
}
inline
unsigned
int
nbIndices
(
unsigned
int
i
,
unsigned
int
j
)
const
{
return
m_nbIndices
[
m_groupFirstSub
[
i
]
+
j
];
}
/**
* @brief
get the id of group in OBJ file
* @brief
material id of a sub-group
* @param i id of group
* @param j id of subgroup in group
* @return id of material
*/
inline
unsigned
int
materialIdOf
(
unsigned
int
i
,
unsigned
int
j
)
const
{
return
m_sgMat
[
m_groupFirstSub
[
i
]
+
j
];
}
/**
* @brief material of a sub-group
* @param i id of group
* @param j id of subgroup in group
* @return material ptr
*/
inline
const
MaterialOBJ
*
materialOf
(
unsigned
int
i
,
unsigned
int
j
)
const
{
return
m_materials
[
materialIdOf
(
i
,
j
)];
}
/**
* @brief get the id of group in OBJ file os sub-group
* @param i id of sub-group
* @return obj group index
*/
unsigned
int
groupIdx
(
unsigned
int
i
)
const
{
return
m_groupIdx
[
i
];
}
inline
unsigned
int
groupIdx
(
unsigned
int
i
)
const
{
return
m_groupIdx
[
i
];
}
/**
* @brief get the number of groups in OBJ file
* @return number of groups
*/
unsigned
int
nbObjGroups
()
{
return
m_
objGroups
.
size
()
-
1
;
}
unsigned
int
nbObjGroups
()
{
return
m_
groupFirstSub
.
size
();
}
/**
* @brief get the index of first group mat of obj
* @param i id of obj group
* @return id of first group mat
*/
unsigned
int
objGroup
(
unsigned
int
i
)
const
{
return
m_objGroups
[
i
];
}
// unsigned int objGroup(unsigned int i) const { return m_objGroups[i]; }
const
Geom
::
BoundingBox
<
VEC3
>&
getGroupBB
(
unsigned
int
i
)
const
{
return
m_groupBBs
[
i
];}
...
...
include/Algo/Import/importObjTex.hpp
View file @
b217b3af
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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