c++ - How to create one or more spheres using OpenGL? -


we have create ball game. however, before implementing our code graphics, given 3 codes 3 types of graphics. code cubes, code random spheres don't move, , code moving cube, if i'm not mistaken (maybe am).

first code cube follows:

#include "vue_opengl.h" #include "vertex_shader.h"  #include "contenu.h"  // ====================================================================== void vueopengl::dessine(contenu const& a_dessiner) {   q_unused(a_dessiner);     draw first cube (at origin)   dessinecube();    qmatrix4x4 matrice;   // dessine le 2e cube   matrice.translate(0.0, 1.5, 0.0);   matrice.scale(0.25);   dessinecube(matrice);    // dessine le 3e cube   matrice.settoidentity();   matrice.translate(0.0, 0.0, 1.5);   matrice.scale(0.25);   matrice.rotate(45.0, 0.0, 1.0, 0.0);   dessinecube(matrice); }  // ====================================================================== void vueopengl::init() {      prog.addshaderfromsourcefile(qglshader::vertex,   ":/vertex_shader.glsl");   prog.addshaderfromsourcefile(qglshader::fragment, ":/fragment_shader.glsl");     prog.bindattributelocation("sommet",  sommetid);   prog.bindattributelocation("couleur", couleurid);    // compilation of shader opengl   prog.link();    // activation of shader   prog.bind();     glenable(gl_depth_test);   glenable(gl_cull_face);    initializeposition(); }  // ====================================================================== void vueopengl::initializeposition() {   // position initiale   matrice_vue.settoidentity();   matrice_vue.translate(0.0, 0.0, -4.0);   matrice_vue.rotate(60.0, 0.0, 1.0, 0.0);   matrice_vue.rotate(45.0, 0.0, 0.0, 1.0); }  // ====================================================================== void vueopengl::translate(double x, double y, double z) {    qmatrix4x4 translation_supplementaire;   translation_supplementaire.translate(x, y, z);   matrice_vue = translation_supplementaire * matrice_vue; }  // ====================================================================== void vueopengl::rotate(double angle, double dir_x, double dir_y, double dir_z) {// multiplie la matrice de vue par la gauche   qmatrix4x4 rotation_supplementaire;   rotation_supplementaire.rotate(angle, dir_x, dir_y, dir_z);   matrice_vue = rotation_supplementaire * matrice_vue; }  // ====================================================================== void vueopengl::dessinecube (qmatrix4x4 const& point_de_vue) {   prog.setuniformvalue("vue_modele", matrice_vue * point_de_vue);    glbegin(gl_quads);   // side x = +1   prog.setattributevalue(couleurid, 1.0, 0.0, 0.0); // red   prog.setattributevalue(sommetid, +1.0, -1.0, -1.0);   prog.setattributevalue(sommetid, +1.0, +1.0, -1.0);   prog.setattributevalue(sommetid, +1.0, +1.0, +1.0);   prog.setattributevalue(sommetid, +1.0, -1.0, +1.0);    // sides x = -1   prog.setattributevalue(couleurid, 0.0, 1.0, 0.0); // green   prog.setattributevalue(sommetid, -1.0, -1.0, -1.0);   prog.setattributevalue(sommetid, -1.0, -1.0, +1.0);   prog.setattributevalue(sommetid, -1.0, +1.0, +1.0);   prog.setattributevalue(sommetid, -1.0, +1.0, -1.0);    // side y = +1   prog.setattributevalue(couleurid, 0.0, 0.0, 1.0); // blue   prog.setattributevalue(sommetid, -1.0, +1.0, -1.0);   prog.setattributevalue(sommetid, -1.0, +1.0, +1.0);   prog.setattributevalue(sommetid, +1.0, +1.0, +1.0);   prog.setattributevalue(sommetid, +1.0, +1.0, -1.0);    //side y = -1   prog.setattributevalue(couleurid, 0.0, 1.0, 1.0); // cyan   prog.setattributevalue(sommetid, -1.0, -1.0, -1.0);   prog.setattributevalue(sommetid, +1.0, -1.0, -1.0);   prog.setattributevalue(sommetid, +1.0, -1.0, +1.0);   prog.setattributevalue(sommetid, -1.0, -1.0, +1.0);    // side z = +1   prog.setattributevalue(couleurid, 1.0, 1.0, 0.0); // yellow   prog.setattributevalue(sommetid, -1.0, -1.0, +1.0);   prog.setattributevalue(sommetid, +1.0, -1.0, +1.0);   prog.setattributevalue(sommetid, +1.0, +1.0, +1.0);   prog.setattributevalue(sommetid, -1.0, +1.0, +1.0);    // side z = -1   prog.setattributevalue(couleurid, 1.0, 0.0, 1.0); // magenta   prog.setattributevalue(sommetid, -1.0, -1.0, -1.0);   prog.setattributevalue(sommetid, -1.0, +1.0, -1.0);   prog.setattributevalue(sommetid, +1.0, +1.0, -1.0);   prog.setattributevalue(sommetid, +1.0, -1.0, -1.0);    glend(); } 

now give code sphere:

#include "vue_opengl.h" #include "vertex_shader.h"  #include "contenu.h"  // ====================================================================== void vueopengl::dessine(contenu const& a_dessiner) {   q_unused(a_dessiner); //     glclear(gl_color_buffer_bit | gl_depth_buffer_bit);    qmatrix4x4 matrice;      matrice.translate(-0.5, 0.0, -2.0);   glpolygonmode(gl_front_and_back, gl_line); // passe en mode "fil de fer"   dessinesphere(matrice, 0.0, 0.0); // bleu   matrice.scale(1.5); // taille des axes (1.5 pour qu'ils dépassent un peu)    glpolygonmode(gl_front_and_back, gl_fill); // repasse en mode "plein"   }  // ====================================================================== void vueopengl::init() {     prog.addshaderfromsourcefile(qglshader::vertex,   ":/vertex_shader.glsl");   prog.addshaderfromsourcefile(qglshader::fragment, ":/fragment_shader.glsl");     prog.bindattributelocation("sommet",  sommetid);   prog.bindattributelocation("couleur", couleurid);     prog.link();    // activation du shader   prog.bind();    glenable(gl_depth_test);   glenable(gl_cull_face);    sphere.initialize();                                      // initialise la sphère   initializeposition(); }  // ====================================================================== void vueopengl::initializeposition() {   // position initial   matrice_vue.settoidentity();   matrice_vue.translate(0.0, 0.0, -4.0);   matrice_vue.rotate(60.0, 0.0, 1.0, 0.0);   matrice_vue.rotate(45.0, 0.0, 0.0, 1.0); }  // ====================================================================== void vueopengl::translate(double x, double y, double z) {    qmatrix4x4 translation_supplementaire;   translation_supplementaire.translate(x, y, z);   matrice_vue = translation_supplementaire * matrice_vue; }  // ====================================================================== void vueopengl::rotate(double angle, double dir_x, double dir_y, double dir_z) {   //    qmatrix4x4 rotation_supplementaire;   rotation_supplementaire.rotate(angle, dir_x, dir_y, dir_z);   matrice_vue = rotation_supplementaire * matrice_vue; }  // ====================================================================== void vueopengl::dessinecube (qmatrix4x4 const& point_de_vue) {   prog.setuniformvalue("vue_modele", matrice_vue * point_de_vue);    glbegin(gl_quads);   // side x = +1   prog.setattributevalue(couleurid, 1.0, 0.0, 0.0); // rouge   prog.setattributevalue(sommetid, +1.0, -1.0, -1.0);   prog.setattributevalue(sommetid, +1.0, +1.0, -1.0);   prog.setattributevalue(sommetid, +1.0, +1.0, +1.0);   prog.setattributevalue(sommetid, +1.0, -1.0, +1.0);    // side x = -1   prog.setattributevalue(couleurid, 0.0, 1.0, 0.0); // vert   prog.setattributevalue(sommetid, -1.0, -1.0, -1.0);   prog.setattributevalue(sommetid, -1.0, -1.0, +1.0);   prog.setattributevalue(sommetid, -1.0, +1.0, +1.0);   prog.setattributevalue(sommetid, -1.0, +1.0, -1.0);    // face coté y = +1   prog.setattributevalue(couleurid, 0.0, 0.0, 1.0); // bleu   prog.setattributevalue(sommetid, -1.0, +1.0, -1.0);   prog.setattributevalue(sommetid, -1.0, +1.0, +1.0);   prog.setattributevalue(sommetid, +1.0, +1.0, +1.0);   prog.setattributevalue(sommetid, +1.0, +1.0, -1.0);    // side y = -1   prog.setattributevalue(couleurid, 0.0, 1.0, 1.0); // cyan   prog.setattributevalue(sommetid, -1.0, -1.0, -1.0);   prog.setattributevalue(sommetid, +1.0, -1.0, -1.0);   prog.setattributevalue(sommetid, +1.0, -1.0, +1.0);   prog.setattributevalue(sommetid, -1.0, -1.0, +1.0);    // side z = +1   prog.setattributevalue(couleurid, 1.0, 1.0, 0.0); // jaune   prog.setattributevalue(sommetid, -1.0, -1.0, +1.0);   prog.setattributevalue(sommetid, +1.0, -1.0, +1.0);   prog.setattributevalue(sommetid, +1.0, +1.0, +1.0);   prog.setattributevalue(sommetid, -1.0, +1.0, +1.0);    //side z = -1   prog.setattributevalue(couleurid, 1.0, 0.0, 1.0); // magenta   prog.setattributevalue(sommetid, -1.0, -1.0, -1.0);   prog.setattributevalue(sommetid, -1.0, +1.0, -1.0);   prog.setattributevalue(sommetid, +1.0, +1.0, -1.0);   prog.setattributevalue(sommetid, +1.0, -1.0, -1.0);    glend(); }  // ====================================================================== void vueopengl::dessinesphere (qmatrix4x4 const& point_de_vue,                                double rouge, double vert, double bleu) {   prog.setuniformvalue("vue_modele", matrice_vue * point_de_vue);   prog.setattributevalue(couleurid, rouge, vert, bleu);  // met la couleur   sphere.draw(prog, sommetid);                           // dessine la sphère }  // ====================================================================== void vueopengl::dessineaxes (qmatrix4x4 const& point_de_vue, bool en_couleur) {   prog.setuniformvalue("vue_modele", matrice_vue * point_de_vue);    glbegin(gl_lines);    // axe x   if (en_couleur) {     prog.setattributevalue(couleurid, 1.0, 0.0, 0.0); // rouge   } else {     prog.setattributevalue(couleurid, 1.0, 1.0, 1.0); // blanc   }       prog.setattributevalue(sommetid, 0.0, 0.0, 0.0);   prog.setattributevalue(sommetid, 1.0, 0.0, 0.0);    // axe y   if (en_couleur) prog.setattributevalue(couleurid, 0.0, 1.0, 0.0); // green   prog.setattributevalue(sommetid, 0.0, 0.0, 0.0);   prog.setattributevalue(sommetid, 0.0, 1.0, 0.0);    // axe z   if (en_couleur) prog.setattributevalue(couleurid, 0.0, 0.0, 1.0); // blue   prog.setattributevalue(sommetid, 0.0, 0.0, 0.0);   prog.setattributevalue(sommetid, 0.0, 0.0, 1.0);    glend(); } 

last code: moving cube: - assume have put sphere in code moves:

#include "vue_opengl.h" #include "vertex_shader.h" // identifiants qt de nos différents attributs #include "contenu.h"  // ====================================================================== void vueopengl::dessine(contenu const& a_dessiner) {    // dessine le 1er cube (à l'origine)   dessinecube();    qmatrix4x4 matrice;     // dessine le 4e cube   matrice.settoidentity();   matrice.rotate(a_dessiner.infos(), 1.0, 0.0, 0.0);   matrice.translate(0.0, 2.3, 0.0);   matrice.scale(0.2);   dessinecube(matrice); }  // ====================================================================== void vueopengl::init() {     prog.addshaderfromsourcefile(qglshader::vertex,   ":/vertex_shader.glsl");   prog.addshaderfromsourcefile(qglshader::fragment, ":/fragment_shader.glsl");      prog.bindattributelocation("sommet",  sommetid);   prog.bindattributelocation("couleur", couleurid);    // compilation du shader opengl   prog.link();    // activation du shader   prog.bind();     glenable(gl_depth_test);   glenable(gl_cull_face);    initializeposition(); }  // ====================================================================== void vueopengl::initializeposition() {   // position initiale   matrice_vue.settoidentity();   matrice_vue.translate(0.0, 0.0, -4.0);   matrice_vue.rotate(60.0, 0.0, 1.0, 0.0);   matrice_vue.rotate(45.0, 0.0, 0.0, 1.0); }  // ====================================================================== void vueopengl::translate(double x, double y, double z) {    qmatrix4x4 translation_supplementaire;   translation_supplementaire.translate(x, y, z);   matrice_vue = translation_supplementaire * matrice_vue; }  // ====================================================================== void vueopengl::rotate(double angle, double dir_x, double dir_y, double dir_z) {    qmatrix4x4 rotation_supplementaire;   rotation_supplementaire.rotate(angle, dir_x, dir_y, dir_z);   matrice_vue = rotation_supplementaire * matrice_vue; }  // ====================================================================== void vueopengl::dessinecube (qmatrix4x4 const& point_de_vue) {   prog.setuniformvalue("vue_modele", matrice_vue * point_de_vue);    glbegin(gl_quads);   // face coté x = +1   prog.setattributevalue(couleurid, 1.0, 0.0, 0.0); // rouge   prog.setattributevalue(sommetid, +1.0, -1.0, -1.0);   prog.setattributevalue(sommetid, +1.0, +1.0, -1.0);   prog.setattributevalue(sommetid, +1.0, +1.0, +1.0);   prog.setattributevalue(sommetid, +1.0, -1.0, +1.0);    // face coté x = -1   prog.setattributevalue(couleurid, 0.0, 1.0, 0.0); // vert   prog.setattributevalue(sommetid, -1.0, -1.0, -1.0);   prog.setattributevalue(sommetid, -1.0, -1.0, +1.0);   prog.setattributevalue(sommetid, -1.0, +1.0, +1.0);   prog.setattributevalue(sommetid, -1.0, +1.0, -1.0);    // face coté y = +1   prog.setattributevalue(couleurid, 0.0, 0.0, 1.0); // bleu   prog.setattributevalue(sommetid, -1.0, +1.0, -1.0);   prog.setattributevalue(sommetid, -1.0, +1.0, +1.0);   prog.setattributevalue(sommetid, +1.0, +1.0, +1.0);   prog.setattributevalue(sommetid, +1.0, +1.0, -1.0);    // face coté y = -1   prog.setattributevalue(couleurid, 0.0, 1.0, 1.0); // cyan   prog.setattributevalue(sommetid, -1.0, -1.0, -1.0);   prog.setattributevalue(sommetid, +1.0, -1.0, -1.0);   prog.setattributevalue(sommetid, +1.0, -1.0, +1.0);   prog.setattributevalue(sommetid, -1.0, -1.0, +1.0);    // face coté z = +1   prog.setattributevalue(couleurid, 1.0, 1.0, 0.0); // jaune   prog.setattributevalue(sommetid, -1.0, -1.0, +1.0);   prog.setattributevalue(sommetid, +1.0, -1.0, +1.0);   prog.setattributevalue(sommetid, +1.0, +1.0, +1.0);   prog.setattributevalue(sommetid, -1.0, +1.0, +1.0);    // face coté z = -1   prog.setattributevalue(couleurid, 1.0, 0.0, 1.0); // magenta   prog.setattributevalue(sommetid, -1.0, -1.0, -1.0);   prog.setattributevalue(sommetid, -1.0, +1.0, -1.0);   prog.setattributevalue(sommetid, +1.0, +1.0, -1.0);   prog.setattributevalue(sommetid, +1.0, -1.0, -1.0);    glend(); } 

how implement 3 of these codes display sphere moving , 1 solid colour?

are allowed use glu library? glu has primitive type sphere. here documentation

example of usage:

quadratic initialization:

quadratic = glunewquadric(); gluquadricnormals(quadratic, glu_smooth); 

draw function:

glpushmatrix(); gltranslatef("translatex here","translatey here","translatez here"); glusphere(quadratic,"sphere radius here", 32, 32); glpopmatrix(); 

Comments

Popular posts from this blog

c++ - Difference between pre and post decrement in recursive function argument -

php - Nothing but 'run(); ' when browsing to my local project, how do I fix this? -

php - How can I echo out this array? -