static void RenderSceneCB() { glClear(GL_COLOR_BUFFER_BIT); static float Scale = 0.0f; Scale += 0.1f; Pipeline p; p.Rotate(0.0f, Scale, 0.0f); p.WorldPos(0.0f, 0.0f, 3.0f); Vector3f CameraPos(0.0f, 0.0f, -3.0f); Vector3f CameraTarget(0.0f, 0.0f, 2.0f); Vector3f CameraUp(0.0f, 1.0f, 0.0f); p.SetCamera(CameraPos, CameraTarget, CameraUp); p.SetPerspectiveProj(60.0f, WINDOW_WIDTH, WINDOW_HEIGHT, 1.0f, 100.0f); glUniformMatrix4fv(gWVPLocation, 1, GL_TRUE, (const GLfloat*)p.GetTrans()); glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, VBO); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO); glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_INT, 0); glDisableVertexAttribArray(0); glutSwapBuffers(); }
void Scene::render() { // Efface le tampon d'affichage glClear(GL_COLOR_BUFFER_BIT); static float Scale = 0.0f; Scale += 0.5f; Pipeline p; p.Rotate(0.0f, Scale, 0.0f); p.WorldPos(0.0f, 0.0f, 0.0f); p.SetPerspectiveProj(75.0f, 800.0f, 600.0f, 1.0f, 100.0f); QVector3D CameraPos(0.0f, 0.0f, 1.1f); QVector3D CameraTarget(0.0f, 0.0f, 1.0f); QVector3D CameraUp(0.0f, 1.0f, 0.0f); p.SetCamera(CameraPos, CameraTarget, CameraUp); m_shaderProgram.bind(); m_shaderProgram.setUniformValue("gWVP", p.GetTrans()); glDrawElements(GL_LINE_STRIP, m_indices.size(), GL_UNSIGNED_INT, 0); }
std::function<void ()> Tutorial::makeDisplayFunc() { switch (_tutorialID) { case 1: case 2: case 3: return nullptr; case 4: return [ & ]() { glClear(GL_COLOR_BUFFER_BIT); glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, _VBO); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); glDrawArrays(GL_TRIANGLES, 0, 3); glDisableVertexAttribArray(0); glutSwapBuffers(); }; case 5: return [ & ]() { glClear(GL_COLOR_BUFFER_BIT); /// allocate a static variable scale static float scale = 0.0f; /// increment scale by 0.001. scale += 0.00001f; /// glUniform1f provides a value for the Uniform attribute of the shader. /// In this example, sin(scale). /// /// Internally, the shader uses the value of scale to adjust the Position (x,y) of the vertices. /// glUniform1f(_gScaleLocation, sinf(scale)); glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, _VBO); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); glDrawArrays(GL_TRIANGLES, 0, 3); glDisableVertexAttribArray(0); glutSwapBuffers(); }; case 6: return [ & ]() { glClear(GL_COLOR_BUFFER_BIT); /// allocate a static variable scale static float scale = 0.0f; /// increment scale by 0.001. scale += 0.00001f; Matrix4f world; world.m[0][0] = 1.0f; world.m[0][1] = 0.0f; world.m[0][2] = 0.0f; world.m[0][3] = sinf(scale); world.m[1][0] = 0.0f; world.m[1][1] = 1.0f; world.m[1][2] = 0.0f; world.m[1][3] = 0.0f; world.m[2][0] = 0.0f; world.m[2][1] = 0.0f; world.m[2][2] = 1.0f; world.m[2][3] = 0.0f; world.m[3][0] = 0.0f; world.m[3][1] = 0.0f; world.m[3][2] = 0.0f; world.m[3][3] = 1.0f; glUniformMatrix4fv(_gWorldLocation, 1, GL_TRUE, &world.m[0][0]); glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, _VBO); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); glDrawArrays(GL_TRIANGLES, 0, 3); glDisableVertexAttribArray(0); glutSwapBuffers(); }; case 7: return [ & ]() { glClear(GL_COLOR_BUFFER_BIT); glClearColor(1.0f, 1.0f, 1.0f, 1.0f); if (_msOnOff) { glEnable(GL_MULTISAMPLE_ARB); glHint(GL_MULTISAMPLE_FILTER_HINT_NV, GL_NICEST); // detect current settings GLint iMultiSample = 0; GLint iNumSamples = 0; glGetIntegerv(GL_SAMPLE_BUFFERS, &iMultiSample); glGetIntegerv(GL_SAMPLES, &iNumSamples); // printf("MSAA on, GL_SAMPLE_BUFFERS = %d, GL_SAMPLES = %d\n", iMultiSample, iNumSamples); } else { glDisable(GL_MULTISAMPLE_ARB); } /// allocate a static variable scale static float scale = 0.0f; /// increment scale by 0.001. scale += 0.0005f; Matrix4f world; world.m[0][0] = cosf(scale); world.m[0][1] = -sinf(scale); world.m[0][2] = 0.0f; world.m[0][3] = 0.0f; world.m[1][0] = sinf(scale); world.m[1][1] = cosf(scale); world.m[1][2] = 0.0f; world.m[1][3] = 0.0f; world.m[2][0] = 0.0f; world.m[2][1] = 0.0f; world.m[2][2] = 1.0f; world.m[2][3] = 0.0f; world.m[3][0] = 0.0f; world.m[3][1] = 0.0f; world.m[3][2] = 0.0f; world.m[3][3] = 1.0f; /// Load the matrix into the shader. glUniformMatrix4fv(_gWorldLocation, 1, GL_TRUE, &world.m[0][0]); /// Load the desired size into the shader. glUniform1f(_gScaleLocation, 0.5); glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, _VBO); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); glDrawArrays(GL_TRIANGLES, 0, 6); glDisableVertexAttribArray(0); glutSwapBuffers(); }; case 8: return [ & ]() { glClear(GL_COLOR_BUFFER_BIT); /// allocate a static variable scale static float scale = 0.0f; /// increment scale by 0.001. scale += 0.001f; Matrix4f world; world.m[0][0] = sinf(scale); world.m[0][1] = 0.0f; world.m[0][2] = 0.0f; world.m[0][3] = 0.0f; world.m[1][0] = 0.0f; world.m[1][1] = sinf(scale); world.m[1][2] = 0.0f; world.m[1][3] = 0.0f; world.m[2][0] = 0.0f; world.m[2][1] = 0.0f; world.m[2][2] = sinf(scale); world.m[2][3] = 0.0f; world.m[3][0] = 0.0f; world.m[3][1] = 0.0f; world.m[3][2] = 0.0f; world.m[3][3] = 1.0f; /// Load the matrix into the shader. glUniformMatrix4fv(_gWorldLocation, 1, GL_TRUE, &world.m[0][0]); /// Load the desired size into the shader. glUniform1f(_gScaleLocation, 0.5); glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, _VBO); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); glDrawArrays(GL_TRIANGLES, 0, 3); glDisableVertexAttribArray(0); glutSwapBuffers(); }; case 9: return [ & ]() { glClear(GL_COLOR_BUFFER_BIT); /// allocate a static variable scale static float scale = 0.0f; /// increment scale by 0.001. scale += 0.001f; Matrix4f world; /// world.m[0][0] = sinf(scale); world.m[0][1] = 0.0f; world.m[0][2] = 0.0f; world.m[0][3] = 0.0f; world.m[1][0] = 0.0f; world.m[1][1] = sinf(scale); world.m[1][2] = 0.0f; world.m[1][3] = 0.0f; world.m[2][0] = 0.0f; world.m[2][1] = 0.0f; world.m[2][2] = sinf(scale); world.m[2][3] = 0.0f; world.m[3][0] = 0.0f; world.m[3][1] = 0.0f; world.m[3][2] = 0.0f; world.m[3][3] = 1.0f; /// Load the matrix into the shader. glUniformMatrix4fv(_gWorldLocation, 1, GL_TRUE, &world.m[0][0]); /// Load the desired size into the shader. // glUniform1f(_gScaleLocation, 0.5); glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, _VBO); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); glDrawArrays(GL_TRIANGLES, 0, 3); glDisableVertexAttribArray(0); glutSwapBuffers(); }; case 10: return [ & ]() { glClear(GL_COLOR_BUFFER_BIT); /// allocate a static variable scale static float scale = 0.0f; /// increment scale by 0.001. scale += 0.001f; Matrix4f world; /// world.m[0][0] = cosf(scale); world.m[0][1] = 0.0f; world.m[0][2] = -sinf(scale); world.m[0][3] = 0.0f; world.m[1][0] = 0.0f; world.m[1][1] = 1.0f; world.m[1][2] = 0.0f; world.m[1][3] = 0.0f; world.m[2][0] = sinf(scale); world.m[2][1] = 0.0f; world.m[2][2] = cosf(scale); world.m[2][3] = 0.0f; world.m[3][0] = 0.0f; world.m[3][1] = 0.0f; world.m[3][2] = 0.0f; world.m[3][3] = 1.0f; /// Load the matrix into the shader. glUniformMatrix4fv(_gWorldLocation, 1, GL_TRUE, &world.m[0][0]); /// Load the desired size into the shader. // glUniform1f(_gScaleLocation, 0.9); glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, _VBO); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _IBO); // glDrawArrays(GL_TRIANGLES, 0, 3); glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_INT, 0); glDisableVertexAttribArray(0); glutSwapBuffers(); }; case 11: return [ & ]() { glClear(GL_COLOR_BUFFER_BIT); /// allocate a static variable scale static float scale = 0.0f; /// increment scale by 0.001. scale += 0.001f; Pipeline pipeLine; pipeLine.Scale(sinf(scale * 0.1f), sinf(scale * 0.1f), sinf(scale * 0.1f)); pipeLine.WorldPos(sinf(scale), 0.0f, 0.0f); pipeLine.Rotate(sinf(scale) * 90.0f, sinf(scale) * 90.0f, sinf(scale) * 90.0f); /// Load the matrix into the shader. glUniformMatrix4fv(_gWorldLocation, 1, GL_TRUE, (const GLfloat*)pipeLine.GetWorldTrans()); glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, _VBO); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _IBO); glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_INT, 0); glDisableVertexAttribArray(0); glutSwapBuffers(); }; case 12: return [ & ]() { glClear(GL_COLOR_BUFFER_BIT); /// allocate a static variable scale static float scale = 0.0f; /// increment scale by 0.001. scale += 0.01f; Pipeline pipeLine; pipeLine.Rotate(0.0f, scale, 0.0f); pipeLine.WorldPos(0.0f, 0.0f, 5.0f); pipeLine.SetPerspectiveProj(_gPersProjInfo); /// Load the matrix into the shader. glUniformMatrix4fv(_gWorldLocation, 1, GL_TRUE, (const GLfloat*)pipeLine.GetWPTrans()); glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, _VBO); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _IBO); glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_INT, 0); glDisableVertexAttribArray(0); glutSwapBuffers(); // QThread::msleep(1); }; case 13: return [ & ]() { glClear(GL_COLOR_BUFFER_BIT); /// allocate a static variable scale static float scale = 0.0f; /// increment scale by 0.001. scale += 0.01f; Pipeline pipeLine; pipeLine.Rotate(0.0f, scale, 0.0f); pipeLine.WorldPos(0.0f, 0.0f, 3.0f); Vector3f CameraPos(0.0f, 0.0f, -3.0f); Vector3f CameraTarget(0.0f, 0.0f, 2.0f); Vector3f CameraUp(0.0f, 1.0f, 0.0f); pipeLine.SetCamera(CameraPos, CameraTarget, CameraUp); pipeLine.SetPerspectiveProj(_gPersProjInfo); /// Load the matrix into the shader. glUniformMatrix4fv(_gWorldViewProjectionLocation, 1, GL_TRUE, (const GLfloat*)pipeLine.GetWorldViewProjectionTrans()); glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, _VBO); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _IBO); glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_INT, 0); glDisableVertexAttribArray(0); glutSwapBuffers(); // QThread::msleep(1); }; case 14: return [ & ]() { glClear(GL_COLOR_BUFFER_BIT); /// allocate a static variable scale static float scale = 0.0f; /// increment scale by 0.001. scale += 0.01f; Pipeline pipeLine; pipeLine.Rotate(0.0f, scale, 0.0f); pipeLine.WorldPos(0.0f, 0.0f, 3.0f); pipeLine.SetCamera(*_pGameCamera); pipeLine.SetPerspectiveProj(_gPersProjInfo); /// Load the matrix into the shader. glUniformMatrix4fv(_gWorldViewProjectionLocation, 1, GL_TRUE, (const GLfloat*)pipeLine.GetWorldViewProjectionTrans()); glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, _VBO); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _IBO); glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_INT, 0); glDisableVertexAttribArray(0); glutSwapBuffers(); // QThread::msleep(1);}; }; case 15: return [ & ]() { _pGameCamera->OnRender(); glClear(GL_COLOR_BUFFER_BIT); /// allocate a static variable scale static float scale = 0.0f; /// increment scale by 0.001. scale += 0.01f; Pipeline pipeLine; pipeLine.Rotate(0.0f, scale, 0.0f); pipeLine.WorldPos(0.0f, 0.0f, 3.0f); pipeLine.SetCamera(*_pGameCamera); pipeLine.SetPerspectiveProj(_gPersProjInfo); /// Load the matrix into the shader. glUniformMatrix4fv(_gWorldViewProjectionLocation, 1, GL_TRUE, (const GLfloat*)pipeLine.GetWorldViewProjectionTrans()); glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, _VBO); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _IBO); glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_INT, 0); glDisableVertexAttribArray(0); glutSwapBuffers(); // QThread::msleep(1);}; }; case 16: return [ & ]() { _pGameCamera->OnRender(); glClear(GL_COLOR_BUFFER_BIT); if (_msOnOff) { glEnable(GL_MULTISAMPLE_ARB); } else { glDisable(GL_MULTISAMPLE_ARB); } /// allocate a static variable scale static float scale = 0.0f; /// increment scale by 0.001. scale += 0.05f; Pipeline pipeLine; pipeLine.Rotate(0.0f, scale, 0.0f); pipeLine.WorldPos(0.0f, 0.0f, 3.0f); pipeLine.SetCamera(*_pGameCamera); pipeLine.SetPerspectiveProj(_gPersProjInfo); /// Load the matrix into the shader. glUniformMatrix4fv(_gWorldViewProjectionLocation, 1, GL_TRUE, (const GLfloat*)pipeLine.GetWorldViewProjectionTrans()); glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); glBindBuffer(GL_ARRAY_BUFFER, _VBO); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0); glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const GLvoid*)12); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _IBO); _pTexture->Bind(GL_TEXTURE0); glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_INT, 0); glDisableVertexAttribArray(0); glDisableVertexAttribArray(1); glutSwapBuffers(); // QThread::msleep(1);}; }; } return nullptr; }