You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
2.9 KiB

5 years ago
  1. #include "skybox.h"
  2. #include "utils.h"
  3. void SkyBox::Init(const char * imageDir)
  4. {
  5. char temp[256];
  6. memset(temp, 0, 256);
  7. strcpy(temp, imageDir);
  8. strcat(temp, "front.bmp");
  9. mTextures[0] = CreateTexture2DFromBMP(temp);
  10. memset(temp, 0, 256);
  11. strcpy(temp, imageDir);
  12. strcat(temp, "back.bmp");
  13. mTextures[1] = CreateTexture2DFromBMP(temp);
  14. memset(temp, 0, 256);
  15. strcpy(temp, imageDir);
  16. strcat(temp, "left.bmp");
  17. mTextures[2] = CreateTexture2DFromBMP(temp);
  18. memset(temp, 0, 256);
  19. strcpy(temp, imageDir);
  20. strcat(temp, "right.bmp");
  21. mTextures[3] = CreateTexture2DFromBMP(temp);
  22. memset(temp, 0, 256);
  23. strcpy(temp, imageDir);
  24. strcat(temp, "top.bmp");
  25. mTextures[4] = CreateTexture2DFromBMP(temp);
  26. memset(temp, 0, 256);
  27. strcpy(temp, imageDir);
  28. strcat(temp, "bottom.bmp");
  29. mTextures[5] = CreateTexture2DFromBMP(temp);
  30. mFastDrawCall = CreateDisplayList([this]()->void {DrawCommand();});
  31. }
  32. void SkyBox::DrawCommand()
  33. {
  34. glDisable(GL_LIGHTING);
  35. glDisable(GL_DEPTH_TEST);
  36. glEnable(GL_TEXTURE_2D);
  37. glBindTexture(GL_TEXTURE_2D, mTextures[0]);
  38. glBegin(GL_QUADS);
  39. glColor4ub(255, 255, 255, 255);
  40. glTexCoord2d(0.0f, 0.0f); glVertex3f(-0.5f,-0.5f,-0.5f);
  41. glTexCoord2d(1.0f, 0.0f); glVertex3f(0.5f, -0.5f, -0.5f);
  42. glTexCoord2d(1.0f, 1.0f); glVertex3f(0.5f, 0.5f, -0.5f);
  43. glTexCoord2d(0.0f, 1.0f); glVertex3f(-0.5f, 0.5f, -0.5f);
  44. glEnd();
  45. glBindTexture(GL_TEXTURE_2D, mTextures[1]);
  46. glBegin(GL_QUADS);
  47. glTexCoord2d(0.0f, 0.0f); glVertex3f(-0.5f, -0.5f, 0.5f);
  48. glTexCoord2d(1.0f, 0.0f); glVertex3f(0.5f, -0.5f, 0.5f);
  49. glTexCoord2d(1.0f, 1.0f); glVertex3f(0.5f, 0.5f, 0.5f);
  50. glTexCoord2d(0.0f, 1.0f); glVertex3f(-0.5f, 0.5f, 0.5f);
  51. glEnd();
  52. glBindTexture(GL_TEXTURE_2D, mTextures[2]);
  53. glBegin(GL_QUADS);
  54. glTexCoord2d(0.0f, 0.0f); glVertex3f(-0.5f, -0.5f, 0.5f);
  55. glTexCoord2d(1.0f, 0.0f); glVertex3f(-0.5f, -0.5f, -0.5f);
  56. glTexCoord2d(1.0f, 1.0f); glVertex3f(-0.5f, 0.5f, -0.5f);
  57. glTexCoord2d(0.0f, 1.0f); glVertex3f(-0.5f, 0.5f, 0.5f);
  58. glEnd();
  59. glBindTexture(GL_TEXTURE_2D, mTextures[3]);
  60. glBegin(GL_QUADS);
  61. glTexCoord2d(0.0f, 0.0f); glVertex3f(0.5f, -0.5f, -0.5f);
  62. glTexCoord2d(1.0f, 0.0f); glVertex3f(0.5f, -0.5f, 0.5f);
  63. glTexCoord2d(1.0f, 1.0f); glVertex3f(0.5f, 0.5f, 0.5f);
  64. glTexCoord2d(0.0f, 1.0f); glVertex3f(0.5f, 0.5f, -0.5f);
  65. glEnd();
  66. glBindTexture(GL_TEXTURE_2D, mTextures[4]);
  67. glBegin(GL_QUADS);
  68. glTexCoord2d(0.0f, 0.0f); glVertex3f(-0.5f, 0.5f, -0.5f);
  69. glTexCoord2d(1.0f, 0.0f); glVertex3f(0.5f, 0.5f, -0.5f);
  70. glTexCoord2d(1.0f, 1.0f); glVertex3f(0.5f, 0.5f, 0.5f);
  71. glTexCoord2d(0.0f, 1.0f); glVertex3f(-0.5f, 0.5f, 0.5f);
  72. glEnd();
  73. glBindTexture(GL_TEXTURE_2D, mTextures[5]);
  74. glBegin(GL_QUADS);
  75. glTexCoord2d(0.0f, 0.0f); glVertex3f(-0.5f, -0.5f, 0.5f);
  76. glTexCoord2d(1.0f, 0.0f); glVertex3f(0.5f, -0.5f, 0.5f);
  77. glTexCoord2d(1.0f, 1.0f); glVertex3f(0.5f, -0.5f, -0.5f);
  78. glTexCoord2d(0.0f, 1.0f); glVertex3f(-0.5f, -0.5f, -0.5f);
  79. glEnd();
  80. }
  81. void SkyBox::Draw()
  82. {
  83. glCallList(mFastDrawCall);
  84. }