add skybox, move assets
This commit is contained in:
		@@ -8,8 +8,8 @@ if(CMAKE_BUILD_TYPE MATCHES DEBUG)
 | 
				
			|||||||
	set(CMAKE_CXX_FLAGS "-Wall ${CMAKE_CXX_FLAGS}")
 | 
						set(CMAKE_CXX_FLAGS "-Wall ${CMAKE_CXX_FLAGS}")
 | 
				
			||||||
endif()
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SET(CMAKE_C_FLAGS_RELEASE "-Ofast -msse4 -DNDEBUG")
 | 
					SET(CMAKE_C_FLAGS_RELEASE "-Ofast -msse4 -msse2 -DNDEBUG")
 | 
				
			||||||
SET(CMAKE_CXX_FLAGS_RELEASE "-Ofast -msse4 -DNDEBUG")
 | 
					SET(CMAKE_CXX_FLAGS_RELEASE "-Ofast -msse4 -msse2 -DNDEBUG")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(CMAKE_BUILD_TYPE MATCHES RELEASE)
 | 
					if(CMAKE_BUILD_TYPE MATCHES RELEASE)
 | 
				
			||||||
	set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
 | 
						set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										12
									
								
								assets/shader/skybox.fragment.glsl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								assets/shader/skybox.fragment.glsl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					#version 330
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					in vec3 TexCoord0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					out vec4 color;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uniform samplerCube tCubemap;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void main()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    color = texture(tCubemap, TexCoord0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										14
									
								
								assets/shader/skybox.vertex.glsl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								assets/shader/skybox.vertex.glsl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					#version 330
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					in vec3 vPosition;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uniform mat4 MVP;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					out vec3 TexCoord0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void main()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    vec4 WVP_Pos = MVP * vec4(vPosition, 1.0);
 | 
				
			||||||
 | 
					    gl_Position = WVP_Pos.xyww;
 | 
				
			||||||
 | 
					    TexCoord0 = vPosition;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -20,7 +20,7 @@ void main(){
 | 
				
			|||||||
	// Light emission properties
 | 
						// Light emission properties
 | 
				
			||||||
	// You probably want to put them as uniforms
 | 
						// You probably want to put them as uniforms
 | 
				
			||||||
	vec3 LightColor = vec3(1,1,1);
 | 
						vec3 LightColor = vec3(1,1,1);
 | 
				
			||||||
	float LightPower = 400.0f;
 | 
						float LightPower = 200.0f;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// Material properties
 | 
						// Material properties
 | 
				
			||||||
	vec3 MaterialDiffuseColor = texture( tAlbedo, UV ).rgb;
 | 
						vec3 MaterialDiffuseColor = texture( tAlbedo, UV ).rgb;
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								assets/textures/background_back6.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/textures/background_back6.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 78 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								assets/textures/background_bottom4.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/textures/background_bottom4.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 83 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								assets/textures/background_front5.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/textures/background_front5.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 72 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								assets/textures/background_left2.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/textures/background_left2.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 71 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								assets/textures/background_right1.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/textures/background_right1.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 77 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								assets/textures/background_top3.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/textures/background_top3.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 83 KiB  | 
@@ -1,12 +0,0 @@
 | 
				
			|||||||
#version 330
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
in vec3 TexCoord0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
out vec4 FragColor;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
uniform samplerCube gCubemapTexture;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void main()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    FragColor = texture(gCubemapTexture, TexCoord0);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,14 +0,0 @@
 | 
				
			|||||||
#version 330
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
in vec3 Position;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
uniform mat4 gWVP;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
out vec3 TexCoord0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void main()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    vec4 WVP_Pos = gWVP * vec4(Position, 1.0);
 | 
					 | 
				
			||||||
    gl_Position = WVP_Pos.xyww;
 | 
					 | 
				
			||||||
    TexCoord0 = Position;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -126,8 +126,10 @@ void Application::init() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	loadShader();
 | 
						loadShader();
 | 
				
			||||||
	glMesh.create();
 | 
						glMesh.create();
 | 
				
			||||||
	glMesh.update(vPositionLoc, vNormalLoc, vTexCoordLoc);
 | 
						glMesh.update(programId);
 | 
				
			||||||
	generateAsteroid();
 | 
						generateAsteroid();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						skybox.Load("background");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Application::shutdown() {
 | 
					void Application::shutdown() {
 | 
				
			||||||
@@ -214,7 +216,7 @@ void Application::generateAsteroid() {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (meshProgress.begin("Generate Patched", 1)) {
 | 
						if (meshProgress.begin("Generate Patched", 1)) {
 | 
				
			||||||
		mesh = polygonizer.mesh.createPatched(0.9);
 | 
							mesh = polygonizer.mesh.createPatched(0.8);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (meshProgress.begin("Save Patched", 1)) {
 | 
						if (meshProgress.begin("Save Patched", 1)) {
 | 
				
			||||||
@@ -253,10 +255,6 @@ void Application::loadShader() {
 | 
				
			|||||||
	GLCK(
 | 
						GLCK(
 | 
				
			||||||
			LightPosition_worldspaceloc = glGetUniformLocation(programId, "LightPosition_worldspace"))
 | 
								LightPosition_worldspaceloc = glGetUniformLocation(programId, "LightPosition_worldspace"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	GLCK(vPositionLoc = glGetAttribLocation(programId, "vPosition"))
 | 
					 | 
				
			||||||
	GLCK(vTexCoordLoc = glGetAttribLocation(programId, "vTexCoord"))
 | 
					 | 
				
			||||||
	GLCK(vNormalLoc = glGetAttribLocation(programId, "vNormal"))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	GLCK(tAlbedoLoc = glGetAttribLocation(programId, "tAlbedo"))
 | 
						GLCK(tAlbedoLoc = glGetAttribLocation(programId, "tAlbedo"))
 | 
				
			||||||
	GLCK(tNormalLoc = glGetAttribLocation(programId, "tNormal"))
 | 
						GLCK(tNormalLoc = glGetAttribLocation(programId, "tNormal"))
 | 
				
			||||||
	GLCK(tRoughnessLoc = glGetAttribLocation(programId, "tRoughness"))
 | 
						GLCK(tRoughnessLoc = glGetAttribLocation(programId, "tRoughness"))
 | 
				
			||||||
@@ -281,9 +279,7 @@ void Application::renderMesh() {
 | 
				
			|||||||
	glMesh.render();
 | 
						glMesh.render();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Application::prepareShader() {
 | 
					void Application::updateMatrices() {
 | 
				
			||||||
	glm::mat4 view;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	double mouseX, mouseY;
 | 
						double mouseX, mouseY;
 | 
				
			||||||
	glfwGetCursorPos(window, &mouseX, &mouseY);
 | 
						glfwGetCursorPos(window, &mouseX, &mouseY);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -333,10 +329,12 @@ void Application::prepareShader() {
 | 
				
			|||||||
	lastMouseX = mouseX;
 | 
						lastMouseX = mouseX;
 | 
				
			||||||
	lastMouseY = mouseY;
 | 
						lastMouseY = mouseY;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	glm::mat4 perspective = glm::perspective(glm::radians(45.0f),
 | 
						perspective = glm::perspective(glm::radians(45.0f),
 | 
				
			||||||
			(float) width / (float) height, 0.1f, 100.0f);
 | 
								(float) width / (float) height, 0.1f, 100.0f);
 | 
				
			||||||
	glm::mat4 mvp = perspective * view * modelTrafo;
 | 
						mvp = perspective * view * modelTrafo;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Application::prepareShader() {
 | 
				
			||||||
	GLCK(glUseProgram(programId))
 | 
						GLCK(glUseProgram(programId))
 | 
				
			||||||
	if (MVPloc >= 0) {
 | 
						if (MVPloc >= 0) {
 | 
				
			||||||
		GLCK(glUniformMatrix4fv(MVPloc, 1, GL_FALSE, glm::value_ptr(mvp)))
 | 
							GLCK(glUniformMatrix4fv(MVPloc, 1, GL_FALSE, glm::value_ptr(mvp)))
 | 
				
			||||||
@@ -421,7 +419,7 @@ void Application::gui() {
 | 
				
			|||||||
	ImGui::Begin("Rendering");
 | 
						ImGui::Begin("Rendering");
 | 
				
			||||||
	if (ImGui::Button("Reload Shader")) {
 | 
						if (ImGui::Button("Reload Shader")) {
 | 
				
			||||||
		loadShader();
 | 
							loadShader();
 | 
				
			||||||
		glMesh.update(vPositionLoc, vNormalLoc, vTexCoordLoc);
 | 
							glMesh.update(programId);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (ImGui::Button("Wireframe"))
 | 
						if (ImGui::Button("Wireframe"))
 | 
				
			||||||
		glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
 | 
							glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
 | 
				
			||||||
@@ -458,9 +456,10 @@ void Application::run() {
 | 
				
			|||||||
			uploadTexture();
 | 
								uploadTexture();
 | 
				
			||||||
			textureUploadRequest = false;
 | 
								textureUploadRequest = false;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							updateMatrices();
 | 
				
			||||||
		prepareShader();
 | 
							prepareShader();
 | 
				
			||||||
		renderMesh();
 | 
							renderMesh();
 | 
				
			||||||
 | 
							skybox.Render(mvp);
 | 
				
			||||||
		ImGui::Render();
 | 
							ImGui::Render();
 | 
				
			||||||
		glfwSwapBuffers(window);
 | 
							glfwSwapBuffers(window);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,6 +4,7 @@
 | 
				
			|||||||
#include "Polygoniser.h"
 | 
					#include "Polygoniser.h"
 | 
				
			||||||
#include "TextureMapper.h"
 | 
					#include "TextureMapper.h"
 | 
				
			||||||
#include "ProgressMonitor.h"
 | 
					#include "ProgressMonitor.h"
 | 
				
			||||||
 | 
					#include "SkyBox.h"
 | 
				
			||||||
#include "gl.h"
 | 
					#include "gl.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <glm/mat4x4.hpp>
 | 
					#include <glm/mat4x4.hpp>
 | 
				
			||||||
@@ -54,6 +55,11 @@ class Application {
 | 
				
			|||||||
	bool meshUploadRequest, textureUploadRequest;
 | 
						bool meshUploadRequest, textureUploadRequest;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void toogleFpsMode();
 | 
						void toogleFpsMode();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						glm::mat4 perspective, view, mvp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						SkyBox skybox;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
	Application();
 | 
						Application();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -86,6 +92,7 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	void renderMesh();
 | 
						void renderMesh();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						void updateMatrices();
 | 
				
			||||||
	void prepareShader();
 | 
						void prepareShader();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void gui();
 | 
						void gui();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -310,7 +310,6 @@ Mesh Mesh::createPatched(float threshold) const {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
			mesh.indices.push_back(idx);
 | 
								mesh.indices.push_back(idx);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		printf("\n");
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return mesh;
 | 
						return mesh;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ GLuint loadProgram(const string &name) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// Read the Vertex Shader code from the file
 | 
						// Read the Vertex Shader code from the file
 | 
				
			||||||
	string VertexShaderCode;
 | 
						string VertexShaderCode;
 | 
				
			||||||
	string vertex_file_path = "shader/" + name + ".vertex.glsl";
 | 
						string vertex_file_path = "assets/shader/" + name + ".vertex.glsl";
 | 
				
			||||||
	ifstream VertexShaderStream(vertex_file_path, ios::in);
 | 
						ifstream VertexShaderStream(vertex_file_path, ios::in);
 | 
				
			||||||
	if (VertexShaderStream.is_open()) {
 | 
						if (VertexShaderStream.is_open()) {
 | 
				
			||||||
		string Line = "";
 | 
							string Line = "";
 | 
				
			||||||
@@ -29,7 +29,7 @@ GLuint loadProgram(const string &name) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// Read the Fragment Shader code from the file
 | 
						// Read the Fragment Shader code from the file
 | 
				
			||||||
	string FragmentShaderCode;
 | 
						string FragmentShaderCode;
 | 
				
			||||||
	string fragment_file_path = "shader/" + name + ".fragment.glsl";
 | 
						string fragment_file_path = "assets/shader/" + name + ".fragment.glsl";
 | 
				
			||||||
	ifstream FragmentShaderStream(fragment_file_path, ios::in);
 | 
						ifstream FragmentShaderStream(fragment_file_path, ios::in);
 | 
				
			||||||
	if (FragmentShaderStream.is_open()) {
 | 
						if (FragmentShaderStream.is_open()) {
 | 
				
			||||||
		string Line = "";
 | 
							string Line = "";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,12 +3,13 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include <glad/glad.h>
 | 
					#include <glad/glad.h>
 | 
				
			||||||
#include <stb_image.h>
 | 
					#include <stb_image.h>
 | 
				
			||||||
 | 
					#include <glm/gtc/type_ptr.hpp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
using namespace std;
 | 
					using namespace std;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SkyBox::SkyBox() :
 | 
					SkyBox::SkyBox() :
 | 
				
			||||||
		textureId(GL_INVALID_INDEX), programId(GL_INVALID_INDEX) {
 | 
							textureId(GL_INVALID_INDEX), programId(GL_INVALID_INDEX), textureLoc(-1) {
 | 
				
			||||||
	glGenTextures(1, &textureId);
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SkyBox::~SkyBox() {
 | 
					SkyBox::~SkyBox() {
 | 
				
			||||||
@@ -16,25 +17,70 @@ SkyBox::~SkyBox() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool SkyBox::Load(const std::string basename) {
 | 
					bool SkyBox::Load(const std::string basename) {
 | 
				
			||||||
 | 
						glGenTextures(1, &textureId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						float extent = 10;
 | 
				
			||||||
 | 
						mesh.positions.clear();
 | 
				
			||||||
 | 
						mesh.positions.push_back(glm::vec3(-extent, -extent, -extent));
 | 
				
			||||||
 | 
						mesh.positions.push_back(glm::vec3(-extent, -extent, extent));
 | 
				
			||||||
 | 
						mesh.positions.push_back(glm::vec3(extent, -extent, extent));
 | 
				
			||||||
 | 
						mesh.positions.push_back(glm::vec3(extent, -extent, -extent));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mesh.positions.push_back(glm::vec3(-extent, extent, -extent));
 | 
				
			||||||
 | 
						mesh.positions.push_back(glm::vec3(-extent, extent, extent));
 | 
				
			||||||
 | 
						mesh.positions.push_back(glm::vec3(extent, extent, extent));
 | 
				
			||||||
 | 
						mesh.positions.push_back(glm::vec3(extent, extent, -extent));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mesh.indices.clear();
 | 
				
			||||||
 | 
						// bottom
 | 
				
			||||||
 | 
						mesh.indices.push_back(glm::uvec3(1, 0, 2));
 | 
				
			||||||
 | 
						mesh.indices.push_back(glm::uvec3(2, 0, 3));
 | 
				
			||||||
 | 
						// back
 | 
				
			||||||
 | 
						mesh.indices.push_back(glm::uvec3(5, 2, 6));
 | 
				
			||||||
 | 
						mesh.indices.push_back(glm::uvec3(1, 2, 5));
 | 
				
			||||||
 | 
						// front
 | 
				
			||||||
 | 
						mesh.indices.push_back(glm::uvec3(3, 4, 7));
 | 
				
			||||||
 | 
						mesh.indices.push_back(glm::uvec3(3, 0, 4));
 | 
				
			||||||
 | 
						// left
 | 
				
			||||||
 | 
						mesh.indices.push_back(glm::uvec3(6, 3, 7));
 | 
				
			||||||
 | 
						mesh.indices.push_back(glm::uvec3(2, 3, 6));
 | 
				
			||||||
 | 
						// right
 | 
				
			||||||
 | 
						mesh.indices.push_back(glm::uvec3(0, 1, 4));
 | 
				
			||||||
 | 
						mesh.indices.push_back(glm::uvec3(4, 1, 5));
 | 
				
			||||||
 | 
						// top
 | 
				
			||||||
 | 
						mesh.indices.push_back(glm::uvec3(5, 6, 4));
 | 
				
			||||||
 | 
						mesh.indices.push_back(glm::uvec3(6, 7, 4));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	glBindTexture(GL_TEXTURE_CUBE_MAP, textureId);
 | 
						glBindTexture(GL_TEXTURE_CUBE_MAP, textureId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Load(GL_TEXTURE_CUBE_MAP_POSITIVE_X, basename + "_right1.png");
 | 
						Load(GL_TEXTURE_CUBE_MAP_POSITIVE_X, "assets/textures/" + basename + "_right1.jpg");
 | 
				
			||||||
	Load(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, basename + "_left2.png");
 | 
						Load(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, "assets/textures/" + basename + "_left2.jpg");
 | 
				
			||||||
	Load(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, basename + "_top3.png");
 | 
						Load(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, "assets/textures/" + basename + "_top3.jpg");
 | 
				
			||||||
	Load(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, basename + "_bottom4.png");
 | 
						Load(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, "assets/textures/" + basename + "_bottom4.jpg");
 | 
				
			||||||
	Load(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, basename + "_front5.png");
 | 
						Load(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, "assets/textures/" + basename + "_front5.jpg");
 | 
				
			||||||
	Load(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, basename + "_back6.png");
 | 
						Load(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, "assets/textures/" + basename + "_back6.jpg");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	programId = loadProgram("skybox");
 | 
						programId = loadProgram("skybox");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						GLCK(textureLoc = glGetAttribLocation(programId, "tCubemap"))
 | 
				
			||||||
 | 
						GLCK(MVPloc = glGetUniformLocation(programId, "MVP"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						glMesh.create();
 | 
				
			||||||
 | 
						glMesh.update(programId);
 | 
				
			||||||
 | 
						glMesh.upload(mesh);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return true;
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool SkyBox::Load(GLuint target, const std::string filename) {
 | 
					bool SkyBox::Load(GLuint target, const std::string filename) {
 | 
				
			||||||
	int x, y, comp;
 | 
						int x, y, comp;
 | 
				
			||||||
	unsigned char *data = stbi_load(filename.c_str(), &x, &y, &comp, 4);
 | 
						printf ("start\n");
 | 
				
			||||||
 | 
						unsigned char *data = stbi_load(filename.c_str(), &x, &y, &comp, 0);
 | 
				
			||||||
 | 
						printf ("end\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	glTexImage2D(target, 0, GL_RGBA, x, y, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
 | 
						glTexImage2D(target, 0, GL_RGB, x, y, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
 | 
				
			||||||
	glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
 | 
						glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
 | 
				
			||||||
	glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
 | 
						glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
 | 
				
			||||||
	glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S,
 | 
						glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S,
 | 
				
			||||||
@@ -48,7 +94,7 @@ bool SkyBox::Load(GLuint target, const std::string filename) {
 | 
				
			|||||||
	return true;
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void SkyBox::Render() {
 | 
					void SkyBox::Render(glm::mat4 mvp) {
 | 
				
			||||||
	GLint OldCullFaceMode;
 | 
						GLint OldCullFaceMode;
 | 
				
			||||||
	glGetIntegerv(GL_CULL_FACE_MODE, &OldCullFaceMode);
 | 
						glGetIntegerv(GL_CULL_FACE_MODE, &OldCullFaceMode);
 | 
				
			||||||
	GLint OldDepthFuncMode;
 | 
						GLint OldDepthFuncMode;
 | 
				
			||||||
@@ -67,13 +113,17 @@ void SkyBox::Render() {
 | 
				
			|||||||
	 p.SetPerspectiveProj(m_persProjInfo);
 | 
						 p.SetPerspectiveProj(m_persProjInfo);
 | 
				
			||||||
	 m_pSkyboxTechnique->SetWVP(p.GetWVPTrans());
 | 
						 m_pSkyboxTechnique->SetWVP(p.GetWVPTrans());
 | 
				
			||||||
	 m_pCubemapTex->Bind(GL_TEXTURE0);
 | 
						 m_pCubemapTex->Bind(GL_TEXTURE0);
 | 
				
			||||||
	 m_pMesh->Render();
 | 
					 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						GLCK(glUseProgram(programId));
 | 
				
			||||||
 | 
						mvp[3] = glm::vec4(0, 0, 0, 1);
 | 
				
			||||||
 | 
						GLCK(glUniformMatrix4fv(MVPloc, 1, GL_FALSE, glm::value_ptr(mvp)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						GLCK(glUniform1i(textureLoc, 0))
 | 
				
			||||||
 | 
						GLCK(glActiveTexture(GL_TEXTURE0))
 | 
				
			||||||
 | 
						GLCK(glBindTexture(GL_TEXTURE_CUBE_MAP, textureId))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						glMesh.render();
 | 
				
			||||||
	glCullFace(OldCullFaceMode);
 | 
						glCullFace(OldCullFaceMode);
 | 
				
			||||||
	glDepthFunc(OldDepthFuncMode);
 | 
						glDepthFunc(OldDepthFuncMode);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
void SkyBox::Bind(GLenum unit) {
 | 
					 | 
				
			||||||
	glActiveTexture(unit);
 | 
					 | 
				
			||||||
	glBindTexture(GL_TEXTURE_CUBE_MAP, textureId);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										12
									
								
								src/SkyBox.h
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								src/SkyBox.h
									
									
									
									
									
								
							@@ -1,9 +1,13 @@
 | 
				
			|||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <glad/glad.h>
 | 
					#include "gl.h"
 | 
				
			||||||
 | 
					#include "Mesh.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <glm/mat4x4.hpp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <string>
 | 
					#include <string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class SkyBox {
 | 
					class SkyBox {
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -14,11 +18,13 @@ public:
 | 
				
			|||||||
	bool Load(const std::string basename);
 | 
						bool Load(const std::string basename);
 | 
				
			||||||
	bool Load(GLuint target, const std::string filename);
 | 
						bool Load(GLuint target, const std::string filename);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void Bind(GLenum TextureUnit);
 | 
						void Render(glm::mat4 mvp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void Render();
 | 
					 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	std::string fileNames[6];
 | 
						std::string fileNames[6];
 | 
				
			||||||
	GLuint textureId, programId;
 | 
						GLuint textureId, programId;
 | 
				
			||||||
 | 
						GLint textureLoc, MVPloc;
 | 
				
			||||||
 | 
						Mesh mesh;
 | 
				
			||||||
 | 
						GLMesh glMesh;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								src/gl.h
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								src/gl.h
									
									
									
									
									
								
							@@ -3,6 +3,7 @@
 | 
				
			|||||||
#include <glad/glad.h>
 | 
					#include <glad/glad.h>
 | 
				
			||||||
#include <GLFW/glfw3.h>
 | 
					#include <GLFW/glfw3.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "Mesh.h"
 | 
				
			||||||
#include "types.h"
 | 
					#include "types.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool glck(const char* call) {
 | 
					static bool glck(const char* call) {
 | 
				
			||||||
@@ -93,7 +94,7 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	bool bindVertexAttrib(GLuint id, GLint loc, GLuint size) const {
 | 
						bool bindVertexAttrib(GLuint id, GLint loc, GLuint size) const {
 | 
				
			||||||
		if (loc < 0) {
 | 
							if (loc < 0) {
 | 
				
			||||||
			GLCK(glDisableVertexAttribArray(loc))
 | 
								return false;
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			GLCK(glBindBuffer(GL_ARRAY_BUFFER, id))
 | 
								GLCK(glBindBuffer(GL_ARRAY_BUFFER, id))
 | 
				
			||||||
			GLCK(glEnableVertexAttribArray(loc))
 | 
								GLCK(glEnableVertexAttribArray(loc))
 | 
				
			||||||
@@ -104,11 +105,17 @@ public:
 | 
				
			|||||||
					0,// stride
 | 
										0,// stride
 | 
				
			||||||
					(void* ) 0// array buffer offset
 | 
										(void* ) 0// array buffer offset
 | 
				
			||||||
					))
 | 
										))
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
			return true;
 | 
								return true;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void update(int vPositionLoc, int vNormalLoc, int vTexCoordLoc) const {
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						void update(int programId) const {
 | 
				
			||||||
 | 
							int vPositionLoc, vNormalLoc, vTexCoordLoc;
 | 
				
			||||||
 | 
							GLCK(vPositionLoc = glGetAttribLocation(programId, "vPosition"))
 | 
				
			||||||
 | 
							GLCK(vTexCoordLoc = glGetAttribLocation(programId, "vTexCoord"))
 | 
				
			||||||
 | 
							GLCK(vNormalLoc = glGetAttribLocation(programId, "vNormal"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		GLCK(glBindVertexArray(vertexArrayId))
 | 
							GLCK(glBindVertexArray(vertexArrayId))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		bindVertexAttrib(vPositionId, vPositionLoc, 3);
 | 
							bindVertexAttrib(vPositionId, vPositionLoc, 3);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user