選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 
 

162 行
4.2 KiB

  1. // Test stuff
  2. #ifdef WIN32
  3. # define WIN32_LEAN_AND_MEAN
  4. # include <windows.h>
  5. #endif
  6. #if defined __APPLE__ && defined __MACH__
  7. # include <OpenGL/gl.h>
  8. # include <OpenGL/glu.h>
  9. #else
  10. # include <GL/gl.h>
  11. # include <GL/glu.h>
  12. #endif
  13. #include <SDL.h>
  14. #include <SDL_image.h>
  15. float xrot, yrot, zrot;
  16. /* Storage for one texture */
  17. GLuint texture[1];
  18. // Load Bitmaps And Convert To Textures
  19. void LoadGLTextures(void)
  20. {
  21. SDL_Surface *image1 = IMG_Load("art/test/groundtest.png");
  22. if (!image1)
  23. {
  24. SDL_Quit();
  25. exit(1);
  26. }
  27. glGenTextures(1, &texture[0]);
  28. glBindTexture(GL_TEXTURE_2D, texture[0]);
  29. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  30. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  31. glTexImage2D(GL_TEXTURE_2D, 0, 4, image1->w, image1->h, 0,
  32. GL_RGBA, GL_UNSIGNED_BYTE, image1->pixels);
  33. };
  34. void InitGL(int Width, int Height)
  35. {
  36. glViewport(0, 0, Width, Height);
  37. LoadGLTextures();
  38. glEnable(GL_TEXTURE_2D);
  39. glClearColor(0.0f, 0.0f, 1.0f, 0.0f);
  40. glClearDepth(1.0);
  41. glDepthFunc(GL_LESS);
  42. glEnable(GL_DEPTH_TEST);
  43. glShadeModel(GL_SMOOTH);
  44. glMatrixMode(GL_PROJECTION);
  45. glLoadIdentity();
  46. gluPerspective(45.0f, (GLfloat)Width / (GLfloat)Height, 0.1f, 100.0f);
  47. glMatrixMode(GL_MODELVIEW);
  48. }
  49. /* The main drawing function. */
  50. void DrawGLScene()
  51. {
  52. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  53. glLoadIdentity();
  54. glTranslatef(0.0f, 0.0f, -5.0f);
  55. glRotatef(xrot, 1.0f, 0.0f, 0.0f);
  56. glRotatef(yrot, 0.0f, 1.0f, 0.0f);
  57. glRotatef(zrot, 0.0f, 0.0f, 1.0f);
  58. glBindTexture(GL_TEXTURE_2D, texture[0]);
  59. glBegin(GL_QUADS);
  60. glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
  61. glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
  62. glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
  63. glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
  64. glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
  65. glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
  66. glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
  67. glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
  68. glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
  69. glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
  70. glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
  71. glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
  72. glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
  73. glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
  74. glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
  75. glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
  76. glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
  77. glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
  78. glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
  79. glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
  80. glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
  81. glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
  82. glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
  83. glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
  84. glEnd();
  85. xrot += 0.2f;
  86. yrot += 0.2f;
  87. zrot += 0.2f;
  88. SDL_GL_SwapBuffers();
  89. }
  90. int main(int argc, char **argv)
  91. {
  92. int done;
  93. /* Initialize SDL for video output */
  94. if ( SDL_Init(SDL_INIT_VIDEO) < 0 )
  95. {
  96. fprintf(stderr, "Unable to initialize SDL: %s\n", SDL_GetError());
  97. exit(1);
  98. }
  99. /* Create a 640x480 OpenGL screen */
  100. if ( SDL_SetVideoMode(640, 480, 0, SDL_OPENGL) == NULL )
  101. {
  102. fprintf(stderr, "Unable to create OpenGL screen: %s\n", SDL_GetError());
  103. SDL_Quit();
  104. exit(2);
  105. }
  106. /* Set the title bar in environments that support it */
  107. SDL_WM_SetCaption("Deus Hax", NULL);
  108. /* Loop, drawing and checking events */
  109. InitGL(640, 480);
  110. done = 0;
  111. while ( !done )
  112. {
  113. DrawGLScene();
  114. /* This could go in a separate function */
  115. SDL_Event event;
  116. while ( SDL_PollEvent(&event) )
  117. {
  118. if ( event.type == SDL_QUIT )
  119. done = 1;
  120. if ( event.type == SDL_KEYDOWN )
  121. if ( event.key.keysym.sym == SDLK_ESCAPE )
  122. done = 1;
  123. }
  124. }
  125. SDL_Quit();
  126. return 1;
  127. }