void Ex08_13::Display() { static const unsigned int start_time = GetTickCount() - 50000; float t = float((GetTickCount() - start_time)) / float(0x3FFF); static const vmath::vec3 X(1.0f, 0.0f, 0.0f); static const vmath::vec3 Y(0.0f, 1.0f, 0.0f); static const vmath::vec3 Z(0.0f, 0.0f, 1.0f); vmath::mat4 tc_matrix(vmath::mat4::identity()); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearDepth(1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glDisable(GL_CULL_FACE); float aspect = float(getHeight()) / getWidth(); glUseProgram(object_prog); tc_matrix = vmath::translate(vmath::vec3(0.0f, 0.0f, -1.5f)) * vmath::rotate(80.0f * 3.0f * t, Y) * vmath::rotate(50.0f * 3.0f * t, Z); glUniformMatrix4fv(object_mat_mv_loc, 1, GL_FALSE, tc_matrix); tc_matrix = vmath::perspective(35.0f, 1.0f / aspect, 0.1f, 100.0f) * tc_matrix; glUniformMatrix4fv(object_mat_mvp_loc, 1, GL_FALSE, tc_matrix); glBindVertexArray(vao); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); Swap(); }
void Ex06_16::Display() { static const unsigned int start_time = GetTickCount() - 50000; float t = float((GetTickCount() - start_time)) / float(0x3FFF); static const vmath::vec3 X(1.0f, 0.0f, 0.0f); static const vmath::vec3 Y(0.0f, 1.0f, 0.0f); static const vmath::vec3 Z(0.0f, 0.0f, 1.0f); vmath::mat4 tc_matrix(vmath::mat4::identity()); glClearColor(0.0f, 1.0f, 0.0f, 1.0f); glClearDepth(1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glDisable(GL_CULL_FACE); glUseProgram(base_prog); tc_matrix = vmath::rotate(t * 170.0f, X) * vmath::rotate(t * 137.0f, Y) * vmath::rotate(t * 93.0f, Z); glUniformMatrix4fv(tc_rotate_loc, 1, GL_FALSE, tc_matrix); glBindVertexArray(vao); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); Swap(); }
void CubeMapExample::Display(bool auto_redraw) { static const unsigned int start_time = GetTickCount(); float t = float((GetTickCount() - start_time)) / float(0x3FFF); static const vmath::vec3 X(1.0f, 0.0f, 0.0f); static const vmath::vec3 Y(0.0f, 1.0f, 0.0f); static const vmath::vec3 Z(0.0f, 0.0f, 1.0f); vmath::mat4 tc_matrix(vmath::mat4::identity()); glClearColor(0.0f, 0.25f, 0.3f, 1.0f); glClearDepth(1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glDisable(GL_CULL_FACE); //调用天空盒映射着色器程序 glUseProgram(skybox_prog); //GL_TEXTURE_CUBE_MAP_SEAMLESS启用无缝立方体映射滤波,避免立方体映射相邻边之间的缝 glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS); tc_matrix = vmath::rotate(80.0f * 3.0f * t, Y);// * vmath::rotate(22.0f, Z); tc_matrix = vmath::perspective(35.0f, 1.0f / aspect, 0.1f, 100.0f) * tc_matrix; glUniformMatrix4fv(skybox_rotate_loc, 1, GL_FALSE, tc_matrix); glBindVertexArray(vao); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, cube_element_buffer); //绘制天空盒,完成立方体映射 glDrawElements(GL_TRIANGLE_STRIP, 8, GL_UNSIGNED_SHORT, NULL); glDrawElements(GL_TRIANGLE_STRIP, 8, GL_UNSIGNED_SHORT, BUFFER_OFFSET(8 * sizeof(GLushort))); //调用环境映射着色器程序 glUseProgram(object_prog); tc_matrix = vmath::translate(vmath::vec3(0.0f, 0.0f, -4.0f)) * vmath::rotate(80.0f * 3.0f * t, Y) * vmath::rotate(70.0f * 3.0f * t, Z); glUniformMatrix4fv(object_mat_mv_loc, 1, GL_FALSE, tc_matrix); tc_matrix = vmath::perspective(35.0f, 1.0f / aspect, 0.1f, 100.0f) * tc_matrix; glUniformMatrix4fv(object_mat_mvp_loc, 1, GL_FALSE, tc_matrix); glClear(GL_DEPTH_BUFFER_BIT); //绘制物体,完成环境映射 object.Render(); base::Display(); }
void Ex09_08::Display() { vmath::mat4 tc_matrix(vmath::mat4::identity()); float aspect = float(getHeight()) / getWidth(); glUseProgram(program); tc_matrix = vmath::translate(vmath::vec3(-0.1f, -1.0f, -2.9f)); glUniformMatrix4fv(MVLoc, 1, GL_FALSE, tc_matrix); tc_matrix = vmath::perspective(35.0f, 1.0f / aspect, 0.1f, 100.0f) * tc_matrix; glUniformMatrix4fv(PLoc, 1, GL_FALSE, tc_matrix); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glDrawElements( GL_PATCHES, NumTeapotVertices, GL_UNSIGNED_INT, BUFFER_OFFSET(0) ); Swap(); }