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.
124 lines
4.5 KiB
124 lines
4.5 KiB
#include "skybox.h"
|
|
#include "utils.h"
|
|
void SkyBox::Init(const char *imageDir) {
|
|
mShader = new Shader[6];
|
|
mVertexBuffer = new VertexBuffer[6];
|
|
InitFront(imageDir);
|
|
InitBack(imageDir);
|
|
InitLeft(imageDir);
|
|
InitRight(imageDir);
|
|
InitTop(imageDir);
|
|
InitBottom(imageDir);
|
|
}
|
|
void SkyBox::InitFront(const char *imageDir) {
|
|
mShader[0].Init("Res/skybox.vs", "Res/skybox.fs");
|
|
char temp[256];
|
|
memset(temp, 0, 256);
|
|
strcpy(temp, imageDir);
|
|
strcat(temp, "front.bmp");
|
|
mShader[0].SetTexture("U_Texture", temp);
|
|
mVertexBuffer[0].SetSize(4);
|
|
mVertexBuffer[0].SetPosition(0, -0.5f, -0.5f, -0.5f);
|
|
mVertexBuffer[0].SetTexcoord(0, 0.0f, 0.0f);
|
|
mVertexBuffer[0].SetPosition(1, 0.5f, -0.5f, -0.5f);
|
|
mVertexBuffer[0].SetTexcoord(1, 1.0f, 0.0f);
|
|
mVertexBuffer[0].SetPosition(2, -0.5f, 0.5f, -0.5f);
|
|
mVertexBuffer[0].SetTexcoord(2, 0.0f, 1.0f);
|
|
mVertexBuffer[0].SetPosition(3, 0.5f, 0.5f, -0.5f);
|
|
mVertexBuffer[0].SetTexcoord(3, 1.0f, 1.0f);
|
|
}
|
|
void SkyBox::InitBack(const char *imageDir) {
|
|
mShader[1].Init("Res/skybox.vs", "Res/skybox.fs");
|
|
char temp[256];
|
|
memset(temp, 0, 256);
|
|
strcpy(temp, imageDir);
|
|
strcat(temp, "back.bmp");
|
|
mShader[1].SetTexture("U_Texture", temp);
|
|
mVertexBuffer[1].SetSize(4);
|
|
mVertexBuffer[1].SetPosition(0, 0.5f, -0.5f, 0.5f);
|
|
mVertexBuffer[1].SetTexcoord(0, 0.0f, 0.0f);
|
|
mVertexBuffer[1].SetPosition(1, -0.5f, -0.5f, 0.5f);
|
|
mVertexBuffer[1].SetTexcoord(1, 1.0f, 0.0f);
|
|
mVertexBuffer[1].SetPosition(2, 0.5f, 0.5f, 0.5f);
|
|
mVertexBuffer[1].SetTexcoord(2, 0.0f, 1.0f);
|
|
mVertexBuffer[1].SetPosition(3, -0.5f, 0.5f, 0.5f);
|
|
mVertexBuffer[1].SetTexcoord(3, 1.0f, 1.0f);
|
|
}
|
|
void SkyBox::InitLeft(const char *imageDir) {
|
|
mShader[2].Init("Res/skybox.vs", "Res/skybox.fs");
|
|
char temp[256];
|
|
memset(temp, 0, 256);
|
|
strcpy(temp, imageDir);
|
|
strcat(temp, "left.bmp");
|
|
mShader[2].SetTexture("U_Texture", temp);
|
|
mVertexBuffer[2].SetSize(4);
|
|
mVertexBuffer[2].SetPosition(0, -0.5f, -0.5f, 0.5f);
|
|
mVertexBuffer[2].SetTexcoord(0, 0.0f, 0.0f);
|
|
mVertexBuffer[2].SetPosition(1, -0.5f, -0.5f, -0.5f);
|
|
mVertexBuffer[2].SetTexcoord(1, 1.0f, 0.0f);
|
|
mVertexBuffer[2].SetPosition(2, -0.5f, 0.5f, 0.5f);
|
|
mVertexBuffer[2].SetTexcoord(2, 0.0f, 1.0f);
|
|
mVertexBuffer[2].SetPosition(3, -0.5f, 0.5f, -0.5f);
|
|
mVertexBuffer[2].SetTexcoord(3, 1.0f, 1.0f);
|
|
}
|
|
void SkyBox::InitRight(const char *imageDir) {
|
|
mShader[3].Init("Res/skybox.vs", "Res/skybox.fs");
|
|
char temp[256];
|
|
memset(temp, 0, 256);
|
|
strcpy(temp, imageDir);
|
|
strcat(temp, "right.bmp");
|
|
mShader[3].SetTexture("U_Texture", temp);
|
|
mVertexBuffer[3].SetSize(4);
|
|
mVertexBuffer[3].SetPosition(0, 0.5f, -0.5f, -0.5f);
|
|
mVertexBuffer[3].SetTexcoord(0, 0.0f, 0.0f);
|
|
mVertexBuffer[3].SetPosition(1, 0.5f, -0.5f, 0.5f);
|
|
mVertexBuffer[3].SetTexcoord(1, 1.0f, 0.0f);
|
|
mVertexBuffer[3].SetPosition(2, 0.5f, 0.5f, -0.5f);
|
|
mVertexBuffer[3].SetTexcoord(2, 0.0f, 1.0f);
|
|
mVertexBuffer[3].SetPosition(3, 0.5f, 0.5f, 0.5f);
|
|
mVertexBuffer[3].SetTexcoord(3, 1.0f, 1.0f);
|
|
}
|
|
void SkyBox::InitTop(const char *imageDir) {
|
|
mShader[4].Init("Res/skybox.vs", "Res/skybox.fs");
|
|
char temp[256];
|
|
memset(temp, 0, 256);
|
|
strcpy(temp, imageDir);
|
|
strcat(temp, "top.bmp");
|
|
mShader[4].SetTexture("U_Texture", temp);
|
|
mVertexBuffer[4].SetSize(4);
|
|
mVertexBuffer[4].SetPosition(0, -0.5f, 0.5f, -0.5f);
|
|
mVertexBuffer[4].SetTexcoord(0, 0.0f, 0.0f);
|
|
mVertexBuffer[4].SetPosition(1, 0.5f, 0.5f, -0.5f);
|
|
mVertexBuffer[4].SetTexcoord(1, 1.0f, 0.0f);
|
|
mVertexBuffer[4].SetPosition(2, -0.5f, 0.5f, 0.5f);
|
|
mVertexBuffer[4].SetTexcoord(2, 0.0f, 1.0f);
|
|
mVertexBuffer[4].SetPosition(3, 0.5f, 0.5f, 0.5f);
|
|
mVertexBuffer[4].SetTexcoord(3, 1.0f, 1.0f);
|
|
}
|
|
void SkyBox::InitBottom(const char *imageDir) {
|
|
mShader[5].Init("Res/skybox.vs", "Res/skybox.fs");
|
|
char temp[256];
|
|
memset(temp, 0, 256);
|
|
strcpy(temp, imageDir);
|
|
strcat(temp, "bottom.bmp");
|
|
mShader[5].SetTexture("U_Texture", temp);
|
|
mVertexBuffer[5].SetSize(4);
|
|
mVertexBuffer[5].SetPosition(0, -0.5f, -0.5f, 0.5f);
|
|
mVertexBuffer[5].SetTexcoord(0, 0.0f, 0.0f);
|
|
mVertexBuffer[5].SetPosition(1, 0.5f, -0.5f, 0.5f);
|
|
mVertexBuffer[5].SetTexcoord(1, 1.0f, 0.0f);
|
|
mVertexBuffer[5].SetPosition(2, -0.5f, -0.5f, -0.5f);
|
|
mVertexBuffer[5].SetTexcoord(2, 0.0f, 1.0f);
|
|
mVertexBuffer[5].SetPosition(3, 0.5f, -0.5f, -0.5f);
|
|
mVertexBuffer[5].SetTexcoord(3, 1.0f, 1.0f);
|
|
}
|
|
void SkyBox::Draw(glm::mat4 &V, glm::mat4&P, float x, float y, float z) {
|
|
glDisable(GL_DEPTH_TEST);
|
|
mModelMatrix = glm::translate(x, y, z);
|
|
for (int i = 0; i < 6; ++i) {
|
|
mVertexBuffer[i].Bind();
|
|
mShader[i].Bind(glm::value_ptr(mModelMatrix), glm::value_ptr(V), glm::value_ptr(P));
|
|
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
|
mVertexBuffer[i].Unbind();
|
|
}
|
|
}
|