render_opengl.cpp
上传用户:gzqinmao
上传日期:2022-07-13
资源大小:472k
文件大小:2k
源码类别:

OpenGL

开发平台:

Visual C++

  1. #include <windows.h>
  2. // Standard OpenGL header
  3. #include <GL/gl.h>
  4. #include "Gut.h"
  5. #include "render_data.h"
  6. static Matrix4x4 g_view_matrix;
  7. bool InitResourceOpenGL(void)
  8. {
  9. // 计算出一个可以转换到镜头坐标系的矩阵
  10. g_view_matrix = GutMatrixLookAtRH(g_eye, g_lookat, g_up);
  11. // 投影矩阵
  12. Matrix4x4 projection_matrix = GutMatrixPerspectiveRH_OpenGL(60.0f, 1.0f, 1.0f, 100.0f);
  13. // 设置视角转换矩阵
  14. glMatrixMode(GL_PROJECTION);
  15. glLoadMatrixf( (float *) &projection_matrix);
  16. //glShadeModel(GL_FLAT); // 关闭内插
  17. //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); // 使用昼边线模式
  18. glEnable(GL_CULL_FACE); // 忽略背对镜头的面
  19. return true;
  20. }
  21. bool ReleaseResourceOpenGL(void)
  22. {
  23. // 没做任何事
  24. return true;
  25. }
  26. // `使用OpenGL来绘图`
  27. void RenderFrameOpenGL(void)
  28. {
  29. // `清除画面`
  30. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  31. glEnable(GL_DEPTH_TEST);
  32. // `设置好GPU要去哪读取顶点坐标数据`
  33. glEnableClientState(GL_VERTEX_ARRAY);
  34. glVertexPointer(3, GL_FLOAT, sizeof(Vertex_VC), &g_vertices[0].m_Position);
  35. // `设置好GPU要去哪读取顶点颜色数据`
  36. glEnableClientState(GL_COLOR_ARRAY);
  37. glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(Vertex_VC), &g_vertices[0].m_RGBA);
  38. // `设置要改变GL_MODELVIEW矩阵`
  39. glMatrixMode(GL_MODELVIEW);
  40. static float angle = 0.0f;
  41. angle += 0.01f;
  42. // `设置转换矩阵`
  43. Matrix4x4 world_view_matrix = g_view_matrix;
  44. // `乘上旋转矩阵`
  45. world_view_matrix.RotateZ(angle); 
  46. glLoadMatrixf( (float *) &world_view_matrix);
  47. // `画出金字塔的8条边线`
  48. glDrawElements(
  49. GL_TRIANGLES, // `指定所要画的基本图形种类`
  50. 18, // `有几个索引值`
  51. GL_UNSIGNED_SHORT, // `索引值的类型`
  52. g_indices // `索引值数组`
  53. );
  54. // `把背景backbuffer的画面显示出来`
  55. GutSwapBuffersOpenGL();
  56. }