00001
00002
00003 #include "SkyBox.h"
00004
00005 #include "DayNightCycle.h"
00006 #include "Renderer.h"
00007 #include "Sprite.h"
00008 #include "Texture.h"
00009 #include "TextureDatabase.h"
00010
00011
00012 namespace pge {
00013
00014
00015
00016
00017
00018
00019
00020 SkyBox::SkyBox(const std::string &skyPrefix, float size) {
00021 m_size = size;
00022
00023 m_frontTopLeft = Vector3f(-m_size, m_size, m_size);
00024 m_frontTopRight = Vector3f(m_size, m_size, m_size);
00025 m_frontBottomLeft = Vector3f(-m_size, -m_size, m_size);
00026 m_frontBottomRight = Vector3f(m_size, -m_size, m_size);
00027 m_backTopLeft = Vector3f(-m_size, m_size, -m_size);
00028 m_backTopRight = Vector3f(m_size, m_size, -m_size);
00029 m_backBottomLeft = Vector3f(-m_size, -m_size, -m_size);
00030 m_backBottomRight = Vector3f(m_size, -m_size, -m_size);
00031
00032 m_front = new Sprite(m_frontTopRight, m_frontTopLeft, m_frontBottomLeft, m_frontBottomRight);
00033 m_back = new Sprite(m_backTopLeft, m_backTopRight, m_backBottomRight, m_backBottomLeft);
00034 m_left = new Sprite(m_backTopRight, m_frontTopRight, m_frontBottomRight, m_backBottomRight);
00035 m_right = new Sprite(m_frontTopLeft, m_backTopLeft, m_backBottomLeft, m_frontBottomLeft);
00036 m_bottom = new Sprite(m_backBottomRight, m_frontBottomRight, m_frontBottomLeft, m_backBottomLeft);
00037 m_top = new Sprite(m_backTopRight, m_backTopLeft, m_frontTopLeft, m_frontTopRight);
00038
00039 std::string file = skyPrefix;
00040 m_skyBack = TextureDatabase::getInstance()->addTexture(file.append("_back.jpg"), "sky_back.jpg", false, GL_CLAMP, GL_CLAMP, GL_NEAREST, GL_NEAREST, false, 0, 0, 0);
00041 file = skyPrefix;
00042 m_skyFront = TextureDatabase::getInstance()->addTexture(file.append("_front.jpg"), "sky_front.jpg", false, GL_CLAMP, GL_CLAMP, GL_NEAREST, GL_NEAREST, false, 0, 0, 0);
00043 file = skyPrefix;
00044 m_skyRight = TextureDatabase::getInstance()->addTexture(file.append("_right.jpg"), "sky_right.jpg", false, GL_CLAMP, GL_CLAMP, GL_NEAREST, GL_NEAREST, false, 0, 0, 0);
00045 file = skyPrefix;
00046 m_skyLeft = TextureDatabase::getInstance()->addTexture(file.append("_left.jpg"), "sky_left.jpg", false, GL_CLAMP, GL_CLAMP, GL_NEAREST, GL_NEAREST, false, 0, 0, 0);
00047 file = skyPrefix;
00048 m_skyBottom = TextureDatabase::getInstance()->addTexture(file.append("_bottom.jpg"), "sky_bottom.jpg", false, GL_CLAMP, GL_CLAMP, GL_NEAREST, GL_NEAREST, false, 0, 0, 0);
00049 file = skyPrefix;
00050 m_skyTop = TextureDatabase::getInstance()->addTexture(file.append("_top.jpg"), "sky_top.jpg", false, GL_CLAMP, GL_CLAMP, GL_NEAREST, GL_NEAREST, false, 0, 0, 0);
00051 }
00052
00053
00054
00055
00056
00057
00058
00059 SkyBox::~SkyBox(void) {
00060 if(m_front != NULL) {
00061 delete m_front;
00062 m_front = NULL;
00063 }
00064 if(m_back != NULL) {
00065 delete m_back;
00066 m_back = NULL;
00067 }
00068 if(m_left != NULL) {
00069 delete m_left;
00070 m_left = NULL;
00071 }
00072 if(m_right != NULL) {
00073 delete m_right;
00074 m_right = NULL;
00075 }
00076 if(m_bottom != NULL) {
00077 delete m_bottom;
00078 m_bottom = NULL;
00079 }
00080 if(m_top != NULL) {
00081 delete m_top;
00082 m_top = NULL;
00083 }
00084 }
00085
00086
00087
00088
00089
00090
00091
00092 bool SkyBox::init(void) {
00093 return true;
00094 }
00095
00096
00097
00098
00099
00100
00101
00102 void SkyBox::render(void) {
00103 Vector3f color;
00104
00105 if(DayNightCycle::getInstance()->getDayNightCycle() >= 0.1f) {
00106 color = Vector3f(1.0f, 1.0f, 1.0f) * DayNightCycle::getInstance()->getDayNightCycle();
00107 } else {
00108 color = Vector3f(0.1f, 0.1f, 0.1f);
00109 }
00110
00111 renderer::color4f(color.m_v[0], color.m_v[1], color.m_v[2], 1.0f);
00112 renderer::setTexture(m_skyBack, GL_MODULATE);
00113 m_back->render();
00114 renderer::setTexture(m_skyFront);
00115 m_front->render();
00116 renderer::setTexture(m_skyLeft);
00117 m_left->render();
00118 renderer::setTexture(m_skyRight);
00119 m_right->render();
00120 renderer::setTexture(m_skyTop);
00121 m_top->render();
00122 renderer::setTexture(m_skyBottom);
00123 m_bottom->render();
00124 }
00125
00126
00127
00128
00129
00130
00131
00132 void SkyBox::timer(unsigned int delay) {
00133 }
00134 };