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);
|
||||
glBindVertexArray(vertexArrayID);
|
||||
|
||||
|
||||
//glEnable(GL_DEPTH_TEST);
|
||||
GLuint programID = loadShaders( "src/shader.vert", "src/shader.frag" );
|
||||
|
||||
GLuint matrixID = glGetUniformLocation(programID, "MVP");
|
||||
@ -92,7 +92,7 @@ int main()
|
||||
|
||||
do
|
||||
{
|
||||
glClear( GL_COLOR_BUFFER_BIT );
|
||||
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
|
||||
|
||||
mat4s view = glms_lookat(eye, center, up);
|
||||
mat4s model = glms_mat4_identity();
|
||||
@ -133,75 +133,37 @@ int main()
|
||||
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)
|
||||
{
|
||||
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];
|
||||
vertexBufferData[i*3 + 1] = vertices[triangles[i]*3 + 1];
|
||||
vertexBufferData[i*3 + 2] = vertices[triangles[i]*3 + 2];
|
||||
startingIndex = i*6;
|
||||
for( int j = 0; j < 3; ++j )
|
||||
{
|
||||
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
|
||||
// Ouput data
|
||||
out vec3 color;
|
||||
out vec4 FragColor;
|
||||
|
||||
in vec3 Normal;
|
||||
in vec3 FragPos;
|
||||
|
||||
uniform vec3 lightPos;
|
||||
uniform vec3 viewPos;
|
||||
uniform vec3 lightColor;
|
||||
uniform vec3 objectColor;
|
||||
|
||||
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
|
||||
|
||||
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;
|
||||
|
||||
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