///////////////////////////////
// texture 1
const char *texName ="marble.jpg";
QImage timg = QGLWidget::convertToGLFormat(QImage(texName, "JPG"));
glActiveTexture(GL_TEXTURE0);
//GLuint tid;
glGenTextures(1, &tid);
glBindTexture(GL_TEXTURE_2D, tid);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, timg.width(), timg.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, timg.bits());
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
int loc = program.index("Tex1", UNIFORM);
glUniform1i(loc, 0);
///////////////////////////////
// texture 2
const char *texName2 = "pattern.jpg";
QImage timg2 = QGLWidget::convertToGLFormat(QImage(texName2, "JPG"));
glActiveTexture(GL_TEXTURE0);
//GLuint tid2;
glGenTextures(1, &tid2);
glBindTexture(GL_TEXTURE_2D, tid2);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, timg2.width(), timg2.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, timg2.bits());
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
int loc2 = program.index("Tex2", UNIFORM);
glUniform1i(loc2, 0);
///////////////////////////////
// generate vertices data
tor = new torus(300, 300, 0.3, 1.0);
tor->setMaterials(program, vec3(0.3, 0.3, 0.3), vec3(0.9, 0.9, 0.9), vec3(0.8, 0.8, 0.8), 250.0);
///////////////////////////////
// create 3 VBOs
vertexBufferObj VBOs[3];
tor->setVBO(VBOs[0], VERTEX);
tor->setVBO(VBOs[1], NORMAL);
tor->setVBO(VBOs[2], TEXTURE);
///////////////////////////////
// create one vertex array object -- VAO, for 3 VBOs
vertexArrayObj VAO;
tor->registerVAO(VAO.handle());
VAO.enable();
VAO.enableGenericAttrib(program.index("VertexPosition", GENERIC));
VAO.enableGenericAttrib(program.index("VertexNormal", GENERIC));
VAO.enableGenericAttrib(program.index("VertexTexCoord", GENERIC));
tor->setVAO(program, VBOs[0], VERTEX);
tor->setVAO(program, VBOs[1], NORMAL);
tor->setVAO(program, VBOs[2], TEXTURE);
///////////////////////////////
// generate a box
bx = new box(8.0, 6.0, 16.0);
bx->setMaterials(program, vec3(0.3, 0.3, 0.3), vec3(0.9, 0.9, 0.9), vec3(0.8, 0.8, 0.8), 250.0);
vertexBufferObj boxVBOs[3];
bx->setVBO(boxVBOs[0], VERTEX);
bx->setVBO(boxVBOs[1], NORMAL);
bx->setVBO(boxVBOs[2], TEXTURE);
// vao for box
vertexArrayObj boxVAO;
bx->registerVAO(boxVAO.handle());
boxVAO.enable();
boxVAO.enableGenericAttrib(program.index("VertexPosition", GENERIC));
boxVAO.enableGenericAttrib(program.index("VertexNormal", GENERIC));
boxVAO.enableGenericAttrib(program.index("VertexTexCoord", GENERIC));
bx->setVAO(program, boxVBOs[0], VERTEX);
bx->setVAO(program, boxVBOs[1], NORMAL);
bx->setVAO(program, boxVBOs[2], TEXTURE);