World mesh loads; working on diffuse shader
This commit is contained in:
parent
53c6256e9c
commit
46bde19035
BIN
PlanetMiner
BIN
PlanetMiner
Binary file not shown.
BIN
bin/main.o
BIN
bin/main.o
Binary file not shown.
BIN
bin/worldgen.o
BIN
bin/worldgen.o
Binary file not shown.
96
src/main.c
96
src/main.c
@ -66,7 +66,7 @@ int main()
|
|||||||
glGenVertexArrays(1, &vertexArrayID);
|
glGenVertexArrays(1, &vertexArrayID);
|
||||||
glBindVertexArray(vertexArrayID);
|
glBindVertexArray(vertexArrayID);
|
||||||
|
|
||||||
|
//glEnable(GL_DEPTH_TEST);
|
||||||
GLuint programID = loadShaders( "src/shader.vert", "src/shader.frag" );
|
GLuint programID = loadShaders( "src/shader.vert", "src/shader.frag" );
|
||||||
|
|
||||||
GLuint matrixID = glGetUniformLocation(programID, "MVP");
|
GLuint matrixID = glGetUniformLocation(programID, "MVP");
|
||||||
@ -92,7 +92,7 @@ int main()
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
glClear( GL_COLOR_BUFFER_BIT );
|
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
|
||||||
|
|
||||||
mat4s view = glms_lookat(eye, center, up);
|
mat4s view = glms_lookat(eye, center, up);
|
||||||
mat4s model = glms_mat4_identity();
|
mat4s model = glms_mat4_identity();
|
||||||
@ -133,75 +133,37 @@ int main()
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
GLuint loadShaders(const char* vertexShaderPath, const char* fragmentShaderPath)
|
|
||||||
{
|
|
||||||
char* vertexShaderCode = readTextFile( vertexShaderPath );
|
|
||||||
char* fragmentShaderCode = readTextFile( fragmentShaderPath );
|
|
||||||
|
|
||||||
GLuint vertexShaderID = glCreateShader(GL_VERTEX_SHADER);
|
|
||||||
GLuint fragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
|
|
||||||
|
|
||||||
GLint result = GL_FALSE;
|
|
||||||
int infoLogLength;
|
|
||||||
|
|
||||||
printf("Compiling vertex shader...\n");
|
|
||||||
glShaderSource(vertexShaderID, 1, &vertexShaderCode, NULL);
|
|
||||||
glCompileShader(vertexShaderID);
|
|
||||||
|
|
||||||
glGetShaderiv(vertexShaderID, GL_COMPILE_STATUS, &result);
|
|
||||||
glGetShaderiv(vertexShaderID, GL_INFO_LOG_LENGTH, &infoLogLength);
|
|
||||||
if( infoLogLength > 0 )
|
|
||||||
{
|
|
||||||
char vertexShaderErrorMessage[infoLogLength + 1];
|
|
||||||
glGetShaderInfoLog(vertexShaderID, infoLogLength, NULL, &vertexShaderErrorMessage);
|
|
||||||
printf("%s\n", &vertexShaderErrorMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("Compiling fragment shader...\n");
|
|
||||||
glShaderSource(fragmentShaderID, 1, &fragmentShaderCode, NULL);
|
|
||||||
glCompileShader(fragmentShaderID);
|
|
||||||
|
|
||||||
glGetShaderiv(fragmentShaderID, GL_COMPILE_STATUS, &result);
|
|
||||||
glGetShaderiv(fragmentShaderID, GL_INFO_LOG_LENGTH, &infoLogLength);
|
|
||||||
if( infoLogLength > 0 )
|
|
||||||
{
|
|
||||||
char fragmentShaderErrorMessage[infoLogLength + 1];
|
|
||||||
glGetShaderInfoLog(fragmentShaderID, infoLogLength, NULL, &fragmentShaderErrorMessage);
|
|
||||||
printf("%s\n", &fragmentShaderErrorMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("Linking program\n");
|
|
||||||
GLuint programID = glCreateProgram();
|
|
||||||
glAttachShader(programID, vertexShaderID);
|
|
||||||
glAttachShader(programID, fragmentShaderID);
|
|
||||||
glLinkProgram(programID);
|
|
||||||
|
|
||||||
glGetProgramiv(programID, GL_LINK_STATUS, &result);
|
|
||||||
glGetProgramiv(programID, GL_INFO_LOG_LENGTH, &infoLogLength);
|
|
||||||
if( infoLogLength > 0 )
|
|
||||||
{
|
|
||||||
char programErrorMessage[infoLogLength + 1];
|
|
||||||
glGetProgramInfoLog(programID, infoLogLength, NULL, &programErrorMessage);
|
|
||||||
printf("%s\n", &programErrorMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
free( vertexShaderCode );
|
|
||||||
free( fragmentShaderCode );
|
|
||||||
|
|
||||||
glDetachShader( programID, vertexShaderID );
|
|
||||||
glDetachShader( programID, fragmentShaderID );
|
|
||||||
|
|
||||||
glDeleteShader( vertexShaderID );
|
|
||||||
glDeleteShader( fragmentShaderID );
|
|
||||||
return programID;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setVertexBufferData(GLfloat* vertices, unsigned int* triangles, unsigned int triangleCount)
|
void setVertexBufferData(GLfloat* vertices, unsigned int* triangles, unsigned int triangleCount)
|
||||||
{
|
{
|
||||||
for( int i = 0; i < triangleCount; ++i )
|
vec3s triangleVerts[3];
|
||||||
|
int startingIndex;
|
||||||
|
for( unsigned int i = 0; i < triangleCount; i+=3 )
|
||||||
{
|
{
|
||||||
vertexBufferData[i*3] = vertices[triangles[i]*3];
|
startingIndex = i*6;
|
||||||
vertexBufferData[i*3 + 1] = vertices[triangles[i]*3 + 1];
|
for( int j = 0; j < 3; ++j )
|
||||||
vertexBufferData[i*3 + 2] = vertices[triangles[i]*3 + 2];
|
{
|
||||||
|
triangleVerts[j].x = vertices[triangles[i+j]*3];
|
||||||
|
triangleVerts[j].y = vertices[triangles[i+j]*3 + 1];
|
||||||
|
triangleVerts[j].z = vertices[triangles[i+j]*3 + 2];
|
||||||
|
|
||||||
|
vertexBufferData[startingIndex + j*6] = triangleVerts[j].x;
|
||||||
|
vertexBufferData[startingIndex + j*6 + 1] = triangleVerts[j].y;
|
||||||
|
vertexBufferData[startingIndex + j*6 + 2] = triangleVerts[j].z;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3s normal = glms_vec3_crossn(glms_vec3_sub(triangleVerts[0], triangleVerts[1]),
|
||||||
|
glms_vec3_sub(triangleVerts[0], triangleVerts[2]));
|
||||||
|
|
||||||
|
vertexBufferData[startingIndex + 3] = normal.x;
|
||||||
|
vertexBufferData[startingIndex + 4] = normal.y;
|
||||||
|
vertexBufferData[startingIndex + 5] = normal.z;
|
||||||
|
vertexBufferData[startingIndex + 9] = normal.x;
|
||||||
|
vertexBufferData[startingIndex + 10] = normal.y;
|
||||||
|
vertexBufferData[startingIndex + 11] = normal.z;
|
||||||
|
vertexBufferData[startingIndex + 15] = normal.x;
|
||||||
|
vertexBufferData[startingIndex + 16] = normal.y;
|
||||||
|
vertexBufferData[startingIndex + 17] = normal.z;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,24 @@
|
|||||||
#version 330 core
|
#version 330 core
|
||||||
// Ouput data
|
out vec4 FragColor;
|
||||||
out vec3 color;
|
|
||||||
|
in vec3 Normal;
|
||||||
|
in vec3 FragPos;
|
||||||
|
|
||||||
|
uniform vec3 lightPos;
|
||||||
|
uniform vec3 viewPos;
|
||||||
|
uniform vec3 lightColor;
|
||||||
|
uniform vec3 objectColor;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
color = vec3(1,1,1);
|
float ambientStrength = 0.1;
|
||||||
|
vec3 ambient = ambientStrength * lightColor;
|
||||||
|
|
||||||
|
vec3 norm = normalize(Normal);
|
||||||
|
vec3 lightDir = normalize(lightPos - FragPos);
|
||||||
|
float diff = max(dot(norm, lightDir), 0.0);
|
||||||
|
vec3 diffuse = diff * lightColor;
|
||||||
|
|
||||||
|
vec3 result = (ambient + diffuse) * objectColor;
|
||||||
|
FragColor = vec4(result, 1.0);
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,15 @@
|
|||||||
#version 330 core
|
#version 330 core
|
||||||
|
|
||||||
layout(location = 0) in vec3 vertexPosition_modelspace;
|
layout(location = 0) in vec3 aPos;
|
||||||
|
layout(location = 1) in vec3 aNormal;
|
||||||
|
|
||||||
|
out vec3 Normal;
|
||||||
|
|
||||||
uniform mat4 MVP;
|
uniform mat4 MVP;
|
||||||
|
|
||||||
void main(){
|
void main(){
|
||||||
gl_Position = MVP * vec4(vertexPosition_modelspace,1);
|
FragPos = vec3(model * vec4(aPos, 1.0));
|
||||||
|
Normal = mat3(transpose(inverse(model))) * aNormal;
|
||||||
|
|
||||||
|
gl_Position = MVP * vec4(aPos, 1.0);
|
||||||
}
|
}
|
||||||
|
64
src/shaders.c
Normal file
64
src/shaders.c
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
GLuint loadShaders(const char* vertexShaderPath, const char* fragmentShaderPath)
|
||||||
|
{
|
||||||
|
char* vertexShaderCode = readTextFile( vertexShaderPath );
|
||||||
|
char* fragmentShaderCode = readTextFile( fragmentShaderPath );
|
||||||
|
|
||||||
|
GLuint vertexShaderID = glCreateShader(GL_VERTEX_SHADER);
|
||||||
|
GLuint fragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
|
||||||
|
|
||||||
|
GLint result = GL_FALSE;
|
||||||
|
int infoLogLength;
|
||||||
|
|
||||||
|
printf("Compiling vertex shader...\n");
|
||||||
|
glShaderSource(vertexShaderID, 1, &vertexShaderCode, NULL);
|
||||||
|
glCompileShader(vertexShaderID);
|
||||||
|
|
||||||
|
glGetShaderiv(vertexShaderID, GL_COMPILE_STATUS, &result);
|
||||||
|
glGetShaderiv(vertexShaderID, GL_INFO_LOG_LENGTH, &infoLogLength);
|
||||||
|
if( infoLogLength > 0 )
|
||||||
|
{
|
||||||
|
char vertexShaderErrorMessage[infoLogLength + 1];
|
||||||
|
glGetShaderInfoLog(vertexShaderID, infoLogLength, NULL, &vertexShaderErrorMessage);
|
||||||
|
printf("%s\n", &vertexShaderErrorMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Compiling fragment shader...\n");
|
||||||
|
glShaderSource(fragmentShaderID, 1, &fragmentShaderCode, NULL);
|
||||||
|
glCompileShader(fragmentShaderID);
|
||||||
|
|
||||||
|
glGetShaderiv(fragmentShaderID, GL_COMPILE_STATUS, &result);
|
||||||
|
glGetShaderiv(fragmentShaderID, GL_INFO_LOG_LENGTH, &infoLogLength);
|
||||||
|
if( infoLogLength > 0 )
|
||||||
|
{
|
||||||
|
char fragmentShaderErrorMessage[infoLogLength + 1];
|
||||||
|
glGetShaderInfoLog(fragmentShaderID, infoLogLength, NULL, &fragmentShaderErrorMessage);
|
||||||
|
printf("%s\n", &fragmentShaderErrorMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Linking program\n");
|
||||||
|
GLuint programID = glCreateProgram();
|
||||||
|
glAttachShader(programID, vertexShaderID);
|
||||||
|
glAttachShader(programID, fragmentShaderID);
|
||||||
|
glLinkProgram(programID);
|
||||||
|
|
||||||
|
glGetProgramiv(programID, GL_LINK_STATUS, &result);
|
||||||
|
glGetProgramiv(programID, GL_INFO_LOG_LENGTH, &infoLogLength);
|
||||||
|
if( infoLogLength > 0 )
|
||||||
|
{
|
||||||
|
char programErrorMessage[infoLogLength + 1];
|
||||||
|
glGetProgramInfoLog(programID, infoLogLength, NULL, &programErrorMessage);
|
||||||
|
printf("%s\n", &programErrorMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
free( vertexShaderCode );
|
||||||
|
free( fragmentShaderCode );
|
||||||
|
|
||||||
|
glDetachShader( programID, vertexShaderID );
|
||||||
|
glDetachShader( programID, fragmentShaderID );
|
||||||
|
|
||||||
|
glDeleteShader( vertexShaderID );
|
||||||
|
glDeleteShader( fragmentShaderID );
|
||||||
|
return programID;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
24
src/shaders.h
Normal file
24
src/shaders.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#include <stdbool.h>
|
||||||
|
#include <cglm/struct.h>
|
||||||
|
#include <GL/glew.h>
|
||||||
|
|
||||||
|
GLuint loadShaders(const char* vertexShaderPath, const char* fragmentShaderPath);
|
||||||
|
|
||||||
|
void use();
|
||||||
|
|
||||||
|
void setBool(char* name, bool value);
|
||||||
|
void setInt(char* name, int value);
|
||||||
|
void setFloat(char* name, float value);
|
||||||
|
|
||||||
|
void setVec2(char* name, vec2s value);
|
||||||
|
void setVec3(char* name, float x, float y);
|
||||||
|
|
||||||
|
void setVec3(char* name, vec3s value);
|
||||||
|
void setVec3(char* name, float x, float y, float z);
|
||||||
|
|
||||||
|
void setVec4(char* name, vec4s value);
|
||||||
|
void setVec4(char* name, float x, float y, float z, float w);
|
||||||
|
|
||||||
|
void setMat2(char* name, mat2s value);
|
||||||
|
void setMat3(char* name, mat3s value);
|
||||||
|
void setMat4(char* name, mat4s value);
|
Loading…
Reference in New Issue
Block a user