Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
OpenGL
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Requirements
Requirements
List
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
Insights
Issue
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
C-Fu
OpenGL
Commits
30f1a1e6
Commit
30f1a1e6
authored
Feb 05, 2017
by
Anakin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
passing poylNormal, tangent, bitangent to shader
parent
cdf19911
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
59 additions
and
23 deletions
+59
-23
QtMeshViewer/Header/GeometryEngine.h
QtMeshViewer/Header/GeometryEngine.h
+1
-0
QtMeshViewer/Resources/fshader.glsl
QtMeshViewer/Resources/fshader.glsl
+4
-0
QtMeshViewer/Source/GeometryEngine.cpp
QtMeshViewer/Source/GeometryEngine.cpp
+54
-23
No files found.
QtMeshViewer/Header/GeometryEngine.h
View file @
30f1a1e6
...
...
@@ -34,6 +34,7 @@ private:
// functions
private:
void
clearData
();
void
setupPipeline
(
QOpenGLShaderProgram
*
program
);
public:
void
drawGeometry
(
QOpenGLShaderProgram
*
program
);
...
...
QtMeshViewer/Resources/fshader.glsl
View file @
30f1a1e6
...
...
@@ -22,6 +22,10 @@ uniform struct Light {
float
ambientCoefficient
;
}
light
;
attribute
vec3
a_polyNorm
;
attribute
vec3
a_polyTan
;
attribute
vec3
a_polyBiTan
;
varying
vec2
v_surfaceUV
;
varying
vec3
v_surfacePosition
;
varying
vec3
v_surfaceNormal
;
...
...
QtMeshViewer/Source/GeometryEngine.cpp
View file @
30f1a1e6
...
...
@@ -52,26 +52,8 @@ void GeometryEngine::clearData()
m_drawList
.
clear
();
}
void
GeometryEngine
::
drawGeometry
(
QOpenGLShaderProgram
*
program
)
void
GeometryEngine
::
setupPipeline
(
QOpenGLShaderProgram
*
program
)
{
if
(
!
m_arrayBuf
.
isCreated
()
||
!
m_indexBuf
.
isCreated
())
return
;
// Setup
// Tell OpenGL which VBOs to use
m_arrayBuf
.
bind
();
m_indexBuf
.
bind
();
// Allways normalize by this
QMatrix4x4
normMatrix
;
float
maxExtent
=
std
::
max
(
std
::
max
(
m_boundings
.
extents
[
0
],
m_boundings
.
extents
[
1
]),
m_boundings
.
extents
[
2
]);
normMatrix
.
scale
(
1
/
maxExtent
);
normMatrix
.
translate
(
-
m_boundings
.
center
[
0
],
-
m_boundings
.
center
[
1
],
-
m_boundings
.
center
[
2
]);
program
->
setUniformValue
(
"norm_matrix"
,
normMatrix
);
// Allways use texture unit 0
program
->
setUniformValue
(
"texture"
,
0
);
// Offset for position
quintptr
offset
=
0
;
...
...
@@ -88,14 +70,63 @@ void GeometryEngine::drawGeometry(QOpenGLShaderProgram *program)
program
->
enableAttributeArray
(
texcoordLocation
);
program
->
setAttributeBuffer
(
texcoordLocation
,
GL_FLOAT
,
offset
,
2
,
sizeof
(
VertexData
));
//Offset for
n
ormal
//Offset for
vertexN
ormal
offset
+=
sizeof
(
QVector2D
);
// Tell OpenGL programmable pipeline how to locate vertex normal data
int
normLocation
=
program
->
attributeLocation
(
"a_normal"
);
program
->
enableAttributeArray
(
normLocation
);
program
->
setAttributeBuffer
(
normLocation
,
GL_FLOAT
,
offset
,
3
,
sizeof
(
VertexData
));
int
vertNormLocation
=
program
->
attributeLocation
(
"a_normal"
);
program
->
enableAttributeArray
(
vertNormLocation
);
program
->
setAttributeBuffer
(
vertNormLocation
,
GL_FLOAT
,
offset
,
3
,
sizeof
(
VertexData
));
//Offset for polygonNormal
offset
+=
sizeof
(
QVector3D
);
// Tell OpenGL programmable pipeline how to locate polygon normal data
int
polyNormLocation
=
program
->
attributeLocation
(
"a_polyNorm"
);
program
->
enableAttributeArray
(
polyNormLocation
);
program
->
setAttributeBuffer
(
polyNormLocation
,
GL_FLOAT
,
offset
,
3
,
sizeof
(
VertexData
));
//Offset for polygonTangent
offset
+=
sizeof
(
QVector3D
);
// Tell OpenGL programmable pipeline how to locate polygon tangent data
int
polyTanLocation
=
program
->
attributeLocation
(
"a_polyTan"
);
program
->
enableAttributeArray
(
polyTanLocation
);
program
->
setAttributeBuffer
(
polyTanLocation
,
GL_FLOAT
,
offset
,
3
,
sizeof
(
VertexData
));
//Offset for polygonBitangent
offset
+=
sizeof
(
QVector3D
);
// Tell OpenGL programmable pipeline how to locate polygon bitangent data
int
polyBiTanLocation
=
program
->
attributeLocation
(
"a_polyBiTan"
);
program
->
enableAttributeArray
(
polyBiTanLocation
);
program
->
setAttributeBuffer
(
polyBiTanLocation
,
GL_FLOAT
,
offset
,
3
,
sizeof
(
VertexData
));
}
void
GeometryEngine
::
drawGeometry
(
QOpenGLShaderProgram
*
program
)
{
if
(
!
m_arrayBuf
.
isCreated
()
||
!
m_indexBuf
.
isCreated
())
return
;
// Setup
// Tell OpenGL which VBOs to use
m_arrayBuf
.
bind
();
m_indexBuf
.
bind
();
// Allways normalize by this
QMatrix4x4
normMatrix
;
float
maxExtent
=
std
::
max
(
std
::
max
(
m_boundings
.
extents
[
0
],
m_boundings
.
extents
[
1
]),
m_boundings
.
extents
[
2
]);
normMatrix
.
scale
(
1
/
maxExtent
);
normMatrix
.
translate
(
-
m_boundings
.
center
[
0
],
-
m_boundings
.
center
[
1
],
-
m_boundings
.
center
[
2
]);
program
->
setUniformValue
(
"norm_matrix"
,
normMatrix
);
// Allways use texture unit 0
program
->
setUniformValue
(
"texture"
,
0
);
//setup the pipeline
setupPipeline
(
program
);
// Paint
for
(
auto
&
it
:
m_drawList
)
...
...
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