Browse Source

instancing

master
alistair 3 years ago
parent
commit
7f469d6072
  1. 46
      src/main.cpp
  2. 29
      src/shaders/instanced.vert
  3. 5
      src/shaders/test.frag

46
src/main.cpp

@ -249,7 +249,7 @@ class SDLGLGLWindow { @@ -249,7 +249,7 @@ class SDLGLGLWindow {
//Success flag
bool success = true;
//Generate program
shader = new Shader("src/shaders/test.vert", "src/shaders/test.frag");
shader = new Shader("src/shaders/instanced.vert", "src/shaders/test.frag");
texShader = new Shader("src/shaders/screentexture.vert", "src/shaders/screentexture.frag");
skyboxShader = new Shader("src/shaders/sky.vert", "src/shaders/sky.frag");
glCheckError();
@ -291,6 +291,30 @@ class SDLGLGLWindow { @@ -291,6 +291,30 @@ class SDLGLGLWindow {
glBindFramebuffer(GL_FRAMEBUFFER, 0); // unbind
glCheckError();
glm::vec3 *translations = new glm::vec3[100];
int index = 0;
float offset = 0.1f;
for (int y = -10; y < 10; y += 2) {
for (int x = -10; x < 10; x += 4) {
for (int z = -10; z < 10; z += 4) {
if (index >= 100) {
goto yeetbreak;
}
translations[index++] = glm::vec3(x,y,z);
}
}
}
yeetbreak:
shader->use();
for (unsigned int i = 0; i < 100; i++) {
shader->setVec3("offsets[" + std::to_string(i) + "]", translations[i]);
}
delete[] translations;
/* textures */
@ -529,29 +553,29 @@ class SDLGLGLWindow { @@ -529,29 +553,29 @@ class SDLGLGLWindow {
shader->setFloat("lights[0].angle_cutoff", glm::cos(glm::radians(12.5f)));
shader->setFloat("lights[0].outer_angle_cutoff", glm::cos(glm::radians(17.5f)));
shader->setVec3("lights[0].direction", glm::vec3(0,1,0));
shader->setVec3("lights[0].direction", glm::vec3(0,-1,0));
shader->setVec3("lights[0].position", camera_pos);
shader->setVec3("lights[0].ambient", glm::vec3(0.3));
shader->setVec3("lights[0].diffuse", glm::vec3(0.8));
shader->setVec3("lights[0].diffuse", glm::vec3(0.8,0.7,1.0));
shader->setVec3("lights[0].specular", glm::vec3(1.0));
shader->setBool("lights[0].attenuate", true);
shader->setVec3("lights[0].attenuation", glm::vec3(1.0, 0.09, 0.032));
shader->setBool("lights[0].attenuate", false);
// shader->setVec3("lights[0].attenuation", glm::vec3(1.0, 0.09, 0.032));
shader->setInt("num_lights", 3);
shader->setInt("lights[1].type", 1);
shader->setVec3("lights[1].position", lightPositions[0]);
shader->setVec3("lights[1].ambient", glm::vec3(0.3));
shader->setVec3("lights[1].diffuse", glm::vec3(0.8, 0.9, 0.4));
shader->setVec3("lights[1].diffuse", glm::vec3(0.9, 0.7, 0.7));
shader->setVec3("lights[1].specular", glm::vec3(1.0));
shader->setBool("lights[1].attenuate", false);
shader->setVec3("lights[1].attenuation", glm::vec3(1.0, 0.09, 0.032));
shader->setInt("lights[2].type", 1);
shader->setInt("lights[2].type", 0);
shader->setVec3("lights[2].position", lightPositions[1]);
shader->setVec3("lights[2].ambient", glm::vec3(0.3));
shader->setVec3("lights[2].diffuse", glm::vec3(0.4, 0.92, 0.4));
shader->setVec3("lights[2].ambient", glm::vec3(0.1));
shader->setVec3("lights[2].diffuse", glm::vec3(0.3, 0.4, 0.6));
shader->setVec3("lights[2].specular", glm::vec3(0.3, 1.0, 0.5));
shader->setBool("lights[2].attenuate", false);
shader->setVec3("lights[2].attenuation", glm::vec3(1.0, 0.09, 0.032));
@ -628,7 +652,10 @@ class SDLGLGLWindow { @@ -628,7 +652,10 @@ class SDLGLGLWindow {
glBindVertexArray(gVAO);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glCheckError();
glDrawArraysInstanced(GL_TRIANGLES, 0,36,100);
glCheckError();
/*
std::map<float, glm::vec3> sorted;
glCheckError();
@ -661,6 +688,7 @@ class SDLGLGLWindow { @@ -661,6 +688,7 @@ class SDLGLGLWindow {
glDrawArrays(GL_TRIANGLES, 0, 36);
glCheckError();
}
*/
/*
glBindVertexArray(lightVAO);

29
src/shaders/instanced.vert

@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
#version 330 core
layout (location = 0) in vec3 LVertexPos2D;
layout (location = 1) in vec3 aNormal;
layout (location = 2) in vec2 aTexCoords;
out vec3 theTexCoord;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
uniform bool skyboxON;
out vec3 Normal;
out vec3 FragPos;
uniform vec3 offsets[100];
void main()
{
vec3 offset = offsets[gl_InstanceID];
vec4 pos = (vec4( LVertexPos2D, 1.0) - vec4(offset, 0));
gl_Position = projection * view * (model) * pos;
theTexCoord = vec3(aTexCoords, 1.0);
Normal = mat3(transpose(inverse(model))) * aNormal;
FragPos = vec3((model) * pos);
}

5
src/shaders/test.frag

@ -6,10 +6,6 @@ in vec3 theTexCoord; @@ -6,10 +6,6 @@ in vec3 theTexCoord;
in vec3 Normal;
in vec3 FragPos;
//uniform vec3 objectColour;
//uniform vec3 lightColour;
//uniform vec3 lightPosition;
uniform vec3 cameraPosition;
uniform samplerCube skybox;
@ -51,7 +47,6 @@ uniform int num_lights; @@ -51,7 +47,6 @@ uniform int num_lights;
uniform Material material;
vec4
reflection()
{

Loading…
Cancel
Save