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

3D图形编程

开发平台:

Visual C++

  1. #include <stdio.h>
  2. #include "Gut.h"
  3. void RenderFrameDX9(void);
  4. void RenderFrameOpenGL(void);
  5. void main(int argc, char *argv[])
  6. {
  7. // `默认使用DirectX 9来绘图`
  8. char *device = "dx9";
  9. if ( argc > 1 )
  10. {
  11. // `如果命令行参数指定用OpenGL, 就改用OpenGL.`
  12. if ( stricmp(argv[1], "opengl")==0 )
  13. {
  14. device = "opengl";
  15. }
  16. }
  17. // `在(100,100)的位置打开一个大小为(512x512)的窗口`
  18. GutCreateWindow(100, 100, 512, 512, device);
  19. // `做OpenGL或DirectX初始化`
  20. if ( !GutInitGraphicsDevice(device) )
  21. {
  22. printf("Failed to initialize %s devicen", device);
  23. exit(0);
  24. }
  25. // `主循环`
  26. while( GutProcessMessage() )
  27. {
  28. if ( !strcmp(device, "dx9") )
  29. {
  30. RenderFrameDX9();
  31. }
  32. else
  33. {
  34. RenderFrameOpenGL();
  35. }
  36. }
  37. // `关闭OpenGL/DirectX绘图设备`
  38. GutReleaseGraphicsDevice();
  39. }
  40. float vertex[] = {0.0f, 0.0f, 0.0f}; // `一个3D坐标点(x,y,z)的位置`
  41. // `使用Direct3D9`
  42. void RenderFrameDX9(void)
  43. {
  44. // `获得D3D设备. 在调用GutInitGraphicsDevice时就已经有了, 直接把它拿来用.`
  45. LPDIRECT3DDEVICE9 device = GutGetGraphicsDeviceDX9();
  46. // `关闭光照的计算`
  47. device->SetRenderState( D3DRS_LIGHTING, FALSE );
  48. // `把画面清为黑色`
  49. device->Clear( 
  50. 0, NULL, // `清除整个画面` 
  51. D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, // `清除颜色和Z Buffer` 
  52. D3DCOLOR_RGBA(0, 0, 0, 0), // `设置要把颜色清成黑色`
  53. 1.0f, // `设置要把Z值清为1, 也就是离镜头最远.`
  54. 0 // `设置要把Stencil buffer清为0, 在这是否设置没有区别.`
  55. );
  56. // `开始下绘图指令`
  57. device->BeginScene(); 
  58. // `设置数据格式`
  59. device->SetFVF(D3DFVF_XYZ); 
  60. // `画出一个点`
  61. device->DrawPrimitiveUP(D3DPT_POINTLIST, 1, vertex, 12); 
  62. // `声明所有的绘图指令都下完了`
  63. device->EndScene();
  64. // `把背景backbuffer的画面显示出来`
  65. device->Present( NULL, NULL, NULL, NULL );
  66. }
  67. // `使用OpenGL`
  68. void RenderFrameOpenGL(void)
  69. {
  70. // `清除画面`
  71. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  72. // `画一个点`
  73. glBegin(GL_POINTS);
  74. glVertex3fv(vertex);
  75. glEnd();
  76. // `把背景backbuffer的画面显示出来`
  77. GutSwapBuffersOpenGL();
  78. }