26.06.2013 Views

Utilisation avancée des processeurs graphiques avec Qt

Utilisation avancée des processeurs graphiques avec Qt

Utilisation avancée des processeurs graphiques avec Qt

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

fragment_shader.gl<br />

out vec4 color;<br />

uniform vec4 ambiant_color;<br />

<strong>Utilisation</strong> <strong>avancée</strong> <strong>des</strong> <strong>processeurs</strong> <strong>graphiques</strong> <strong>avec</strong> <strong>Qt</strong> par Rémi Achard Guillaume Belz<br />

void main(void)<br />

{<br />

color = color_factor * ambiant_color;<br />

}<br />

Du côté <strong>des</strong> shaders, il ne reste plus qu'à calculer la position du vertex dans le repère de la caméra. Pour cela, il<br />

suffit de calculer le produit de la matrice de projection et la position du vertex et d'affecter le résultat dans la variable<br />

build-in gl_Position.<br />

vertex_shader.gl<br />

in vec4 vertex;<br />

uniform mat4 matrixpmv;<br />

void main(void)<br />

{<br />

...<br />

gl_Position = matrixpmv * vertex;<br />

}<br />

Du côté de l'application, il nous faut calculer les données et les envoyer au GPU. La méthode <strong>des</strong> Vertex Buffer Object<br />

est utilisée pour transmettre les positions <strong>des</strong> vertices et les vecteurs normaux. Les paramètres constants (direction<br />

de la lumière, la couleur ambiante, la matrice de transformation) sont envoyés comme Uniform :<br />

m_program.setUniformValue("ambiant_color", QVector4D(0.4, 0.4, 0.4, 1.0));<br />

m_program.setUniformValue("light_position", QVector4D(1.0, 1.0, 1.0, 1.0));<br />

m_program.setUniformValue("matrixpmv", projection * view * model);<br />

Voici le résultat de la heightmap obtenu <strong>avec</strong> les composantes ambiante et diffuse :<br />

- 32 -<br />

http://gbelz.developpez.com/remi-achard/gpu-avance-<strong>avec</strong>-qt/modified/

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!