generated from karl/cpp-template
Basic structure there, but not functional
This commit is contained in:
parent
9ab7f3eed0
commit
835520edb8
27
Camera.h
Normal file
27
Camera.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <glm/glm.hpp>
|
||||||
|
#include <glm/gtc/matrix_transform.hpp>
|
||||||
|
|
||||||
|
#include "Spatial.h"
|
||||||
|
|
||||||
|
class Camera : public Spatial {
|
||||||
|
public:
|
||||||
|
/// Create a camera with a field of view (in degrees), width and height (in any unit) and near
|
||||||
|
/// and far distances
|
||||||
|
Camera(float fov, float width, float height, float near, float far)
|
||||||
|
: projection(glm::perspective(glm::radians(fov), width / height, near, far)) {
|
||||||
|
}
|
||||||
|
|
||||||
|
glm::mat4 get_projection() {
|
||||||
|
return projection;
|
||||||
|
}
|
||||||
|
|
||||||
|
glm::mat4 get_view() {
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
glm::mat4 projection;
|
||||||
|
glm::mat4 view;
|
||||||
|
};
|
40
Framebuffer3D.cpp
Normal file
40
Framebuffer3D.cpp
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
#include "Framebuffer3D.h"
|
||||||
|
|
||||||
|
Framebuffer3D::Framebuffer3D(int width, int height, int depth) {
|
||||||
|
glGenTextures(1, &texture);
|
||||||
|
glBindTexture(GL_TEXTURE_3D, texture);
|
||||||
|
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
|
||||||
|
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_BORDER);
|
||||||
|
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
|
||||||
|
glTexImage3D(GL_TEXTURE_3D, 0, GL_R32F, width, height, depth, 0, GL_RED, GL_FLOAT, nullptr);
|
||||||
|
|
||||||
|
glGenFramebuffers(1, &buffer);
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, buffer);
|
||||||
|
|
||||||
|
GLenum c = GL_COLOR_ATTACHMENT0;
|
||||||
|
|
||||||
|
glFramebufferTexture3D(GL_FRAMEBUFFER, c, GL_TEXTURE_3D, texture, 0, 0);
|
||||||
|
glDrawBuffers(1, &c);
|
||||||
|
}
|
||||||
|
|
||||||
|
Framebuffer3D::~Framebuffer3D() {
|
||||||
|
glDeleteFramebuffers(1, &buffer);
|
||||||
|
glDeleteTextures(1, &texture);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Framebuffer3D::bind_and_clear() {
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, buffer);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Framebuffer3D::bind_to(int unit) const {
|
||||||
|
glActiveTexture(GL_TEXTURE0 + unit);
|
||||||
|
glBindTexture(GL_TEXTURE_3D, texture);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Framebuffer3D::bind_layer(int layer) {
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, buffer);
|
||||||
|
glFramebufferTexture3D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_3D, texture, 0, layer);
|
||||||
|
}
|
21
Framebuffer3D.h
Normal file
21
Framebuffer3D.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Must be the first include
|
||||||
|
#include <glad/glad.h>
|
||||||
|
|
||||||
|
// Other includes
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
|
class Framebuffer3D {
|
||||||
|
public:
|
||||||
|
Framebuffer3D(int width, int height, int depth);
|
||||||
|
~Framebuffer3D();
|
||||||
|
|
||||||
|
void bind_and_clear();
|
||||||
|
void bind_to(int unit) const;
|
||||||
|
void bind_layer(int layer);
|
||||||
|
|
||||||
|
private:
|
||||||
|
GLuint texture;
|
||||||
|
GLuint buffer;
|
||||||
|
};
|
49
MCRenderer.cpp
Normal file
49
MCRenderer.cpp
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
#include "MCRenderer.h"
|
||||||
|
#include "Framebuffer3D.h"
|
||||||
|
#include "VertexBuffer.h"
|
||||||
|
|
||||||
|
MCRenderer::MCRenderer()
|
||||||
|
: render_shader(Shader("Shader/mc.vs", "Shader/mc.fs", "Shader/mc.gs")),
|
||||||
|
noise_shader(Shader("Shader/noise.vs", "Shader/noise.fs")), noise(Framebuffer3D(64, 64, 64)),
|
||||||
|
camera(Camera(90, 1920, 1080, 0.1, 100.0)) {
|
||||||
|
float rectangle_data[6][2] = {{-1.0f, -1.0f}, {-1.0, 1.0}, {1.0, -1.0},
|
||||||
|
{1.0f, 1.0f}, {-1.0, 1.0}, {1.0, -1.0}};
|
||||||
|
|
||||||
|
vertex_rectangle.set_data(sizeof(rectangle_data), rectangle_data, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MCRenderer::render(float delta) {
|
||||||
|
// Create the noise
|
||||||
|
noise_shader.use();
|
||||||
|
noise.bind_and_clear();
|
||||||
|
|
||||||
|
noise_shader.setFloat("height", 0);
|
||||||
|
|
||||||
|
for (int i = 0; i < 64; i++) {
|
||||||
|
// Create one layer
|
||||||
|
noise_shader.setFloat("layer", i * (1.0f / 63.0f));
|
||||||
|
noise.bind_layer(i);
|
||||||
|
|
||||||
|
// Each layer is made up of a rectangle of vertices
|
||||||
|
vertex_rectangle.draw();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Actual rendering
|
||||||
|
glViewport(0, 0, 1920, 1080);
|
||||||
|
|
||||||
|
glClearColor(0.6f, 0.9f, 0.9f, 1.0f);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
|
render_shader.use();
|
||||||
|
|
||||||
|
// Bind the camera to the rendering shader
|
||||||
|
render_shader.setMat4("proj", camera.get_projection());
|
||||||
|
render_shader.setMat4("view", camera.get_view());
|
||||||
|
|
||||||
|
// Bind the noise texture to the rendering shader
|
||||||
|
noise.bind_to(0);
|
||||||
|
|
||||||
|
// Draw all layers as polygons
|
||||||
|
glDrawArrays(GL_POINTS, 0, 64 * 64 * 64);
|
||||||
|
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
||||||
|
}
|
22
MCRenderer.h
Normal file
22
MCRenderer.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Camera.h"
|
||||||
|
#include "Framebuffer3D.h"
|
||||||
|
#include "Shader.h"
|
||||||
|
#include "VertexBuffer.h"
|
||||||
|
|
||||||
|
class MCRenderer {
|
||||||
|
public:
|
||||||
|
MCRenderer();
|
||||||
|
|
||||||
|
void render(float delta);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Shader render_shader;
|
||||||
|
Shader noise_shader;
|
||||||
|
|
||||||
|
Framebuffer3D noise;
|
||||||
|
VertexBuffer vertex_rectangle;
|
||||||
|
|
||||||
|
Camera camera;
|
||||||
|
};
|
16
Shader/mc.fs
16
Shader/mc.fs
@ -1,10 +1,12 @@
|
|||||||
#version 330 core
|
#version 430
|
||||||
out vec4 FragColor;
|
|
||||||
|
|
||||||
in vec3 fColor;
|
layout (binding = 0) uniform sampler3D densities;
|
||||||
|
|
||||||
void main()
|
in vec3 varTextureG;
|
||||||
{
|
|
||||||
FragColor = vec4(fColor, 1.0);
|
out vec4 color;
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
float f = texture(densities, varTextureG).r;
|
||||||
|
color = vec4(f, f, f, 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
211
Shader/mc.gs
211
Shader/mc.gs
@ -1,31 +1,196 @@
|
|||||||
#version 330 core
|
#version 430
|
||||||
|
|
||||||
layout (points) in;
|
layout (points) in;
|
||||||
layout (triangle_strip, max_vertices = 5) out;
|
layout (triangle_strip, max_vertices = 12) out;
|
||||||
|
|
||||||
in VS_OUT {
|
uniform mat4 proj;
|
||||||
vec3 color;
|
uniform mat4 view;
|
||||||
} gs_in[];
|
|
||||||
|
|
||||||
out vec3 fColor;
|
in vec3 varTexture[];
|
||||||
|
in int varIndex[];
|
||||||
|
out vec3 varTextureG;
|
||||||
|
|
||||||
void build_house(vec4 position)
|
vec3 vectors[13] = {
|
||||||
{
|
vec3(0.0, 0.0, 0.0), vec3(0.5, 1.0, 1.0), vec3(0.0, 0.5, 1.0),
|
||||||
fColor = gs_in[0].color; // gs_in[0] since there's only one input vertex
|
vec3(0.0, 1.0, 0.5), vec3(1.0, 0.5, 1.0), vec3(1.0, 1.0, 0.5),
|
||||||
gl_Position = position + vec4(-0.2, -0.2, 0.0, 0.0); // 1:bottom-left
|
vec3(0.5, 1.0, 0.0), vec3(1.0, 0.5, 0.0), vec3(0.0, 0.5, 0.0),
|
||||||
EmitVertex();
|
vec3(0.0, 0.0, 0.5), vec3(0.5, 0.0, 1.0), vec3(1.0, 0.0, 0.5),
|
||||||
gl_Position = position + vec4( 0.2, -0.2, 0.0, 0.0); // 2:bottom-right
|
vec3(0.5, 0.0, 0.0)};
|
||||||
EmitVertex();
|
|
||||||
gl_Position = position + vec4(-0.2, 0.2, 0.0, 0.0); // 3:top-left
|
int table[3072] = {
|
||||||
EmitVertex();
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0,
|
||||||
gl_Position = position + vec4( 0.2, 0.2, 0.0, 0.0); // 4:top-right
|
0, 0, 0, 0, 0, 4, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5,
|
||||||
EmitVertex();
|
2, 5, 2, 4, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 0, 0, 0, 0, 0,
|
||||||
gl_Position = position + vec4( 0.0, 0.4, 0.0, 0.0); // 5:top
|
0, 0, 0, 5, 6, 7, 3, 1, 2, 0, 0, 0, 0, 0, 0, 7, 4, 6, 4,
|
||||||
fColor = vec3(1.0, 1.0, 1.0);
|
6, 1, 0, 0, 0, 0, 0, 0, 3, 6, 2, 7, 6, 2, 7, 2, 4, 0, 0,
|
||||||
|
0, 3, 8, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1, 8, 1, 8, 2,
|
||||||
|
0, 0, 0, 0, 0, 0, 6, 3, 8, 1, 5, 4, 0, 0, 0, 0, 0, 0, 6,
|
||||||
|
5, 8, 4, 5, 8, 4, 8, 2, 0, 0, 0, 5, 3, 7, 3, 7, 8, 0, 0,
|
||||||
|
0, 0, 0, 0, 5, 1, 7, 2, 1, 7, 2, 7, 8, 0, 0, 0, 1, 3, 4,
|
||||||
|
8, 3, 4, 8, 4, 7, 0, 0, 0, 8, 7, 2, 4, 7, 2, 0, 0, 0, 0,
|
||||||
|
0, 0, 9, 2, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 3, 10, 3, 10,
|
||||||
|
1, 0, 0, 0, 0, 0, 0, 4, 1, 5, 2, 10, 9, 0, 0, 0, 0, 0, 0,
|
||||||
|
4, 10, 5, 9, 10, 5, 9, 5, 3, 0, 0, 0, 9, 2, 10, 5, 7, 6, 0,
|
||||||
|
0, 0, 0, 0, 0, 9, 3, 10, 3, 10, 1, 7, 6, 5, 0, 0, 0, 7, 4,
|
||||||
|
6, 4, 6, 1, 9, 10, 2, 0, 0, 0, 4, 10, 7, 3, 10, 7, 3, 10, 9,
|
||||||
|
3, 6, 7, 9, 2, 10, 3, 8, 6, 0, 0, 0, 0, 0, 0, 9, 8, 10, 6,
|
||||||
|
8, 10, 6, 10, 1, 0, 0, 0, 6, 8, 3, 10, 2, 9, 1, 4, 5, 0, 0,
|
||||||
|
0, 4, 5, 6, 4, 10, 6, 8, 10, 6, 8, 10, 9, 5, 3, 7, 3, 7, 8,
|
||||||
|
10, 2, 9, 0, 0, 0, 9, 7, 1, 9, 10, 1, 5, 7, 1, 9, 7, 8, 9,
|
||||||
|
10, 8, 4, 10, 8, 4, 10, 7, 3, 2, 1, 9, 10, 8, 4, 10, 8, 4, 8,
|
||||||
|
7, 0, 0, 0, 10, 4, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 11,
|
||||||
|
1, 2, 3, 0, 0, 0, 0, 0, 0, 5, 11, 1, 11, 1, 10, 0, 0, 0, 0,
|
||||||
|
0, 0, 10, 2, 11, 3, 2, 11, 3, 11, 5, 0, 0, 0, 7, 5, 6, 4, 11,
|
||||||
|
10, 0, 0, 0, 0, 0, 0, 3, 2, 1, 11, 4, 10, 5, 7, 6, 0, 0, 0,
|
||||||
|
7, 11, 6, 10, 11, 6, 10, 6, 1, 0, 0, 0, 7, 6, 3, 7, 11, 3, 2,
|
||||||
|
11, 3, 2, 11, 10, 10, 4, 11, 6, 8, 3, 0, 0, 0, 0, 0, 0, 6, 1,
|
||||||
|
8, 1, 8, 2, 11, 4, 10, 0, 0, 0, 10, 1, 11, 1, 11, 5, 8, 3, 6,
|
||||||
|
0, 0, 0, 10, 8, 5, 10, 11, 5, 6, 8, 5, 10, 8, 2, 8, 7, 3, 7,
|
||||||
|
3, 5, 10, 11, 4, 0, 0, 0, 10, 11, 2, 7, 11, 2, 7, 11, 8, 1, 4,
|
||||||
|
5, 7, 11, 8, 1, 11, 8, 1, 11, 10, 1, 3, 8, 10, 11, 2, 7, 11, 2,
|
||||||
|
7, 2, 8, 0, 0, 0, 11, 9, 4, 9, 4, 2, 0, 0, 0, 0, 0, 0, 1,
|
||||||
|
4, 3, 11, 4, 3, 11, 3, 9, 0, 0, 0, 2, 1, 9, 5, 1, 9, 5, 9,
|
||||||
|
11, 0, 0, 0, 3, 5, 9, 11, 5, 9, 0, 0, 0, 0, 0, 0, 2, 4, 9,
|
||||||
|
4, 9, 11, 6, 5, 7, 0, 0, 0, 7, 6, 11, 3, 6, 11, 3, 6, 9, 4,
|
||||||
|
5, 1, 7, 1, 9, 7, 11, 9, 2, 1, 9, 7, 1, 6, 7, 6, 11, 3, 6,
|
||||||
|
11, 3, 11, 9, 0, 0, 0, 11, 9, 4, 9, 4, 2, 6, 8, 3, 0, 0, 0,
|
||||||
|
1, 4, 6, 9, 4, 6, 9, 4, 11, 9, 8, 6, 6, 8, 5, 9, 8, 5, 9,
|
||||||
|
8, 11, 1, 3, 2, 6, 8, 5, 9, 8, 5, 9, 5, 11, 0, 0, 0, 7, 11,
|
||||||
|
9, 7, 9, 9, 5, 4, 2, 5, 2, 2, 9, 11, 8, 11, 8, 7, 1, 4, 5,
|
||||||
|
0, 0, 0, 7, 8, 11, 8, 11, 9, 1, 3, 2, 0, 0, 0, 9, 11, 8, 11,
|
||||||
|
8, 7, 0, 0, 0, 0, 0, 0, 11, 7, 12, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 11, 7, 12, 3, 2, 1, 0, 0, 0, 0, 0, 0, 11, 7, 12, 5, 4, 1,
|
||||||
|
0, 0, 0, 0, 0, 0, 3, 5, 2, 5, 2, 4, 12, 7, 11, 0, 0, 0, 11,
|
||||||
|
5, 12, 5, 12, 6, 0, 0, 0, 0, 0, 0, 11, 5, 12, 5, 12, 6, 2, 1,
|
||||||
|
3, 0, 0, 0, 11, 4, 12, 1, 4, 12, 1, 12, 6, 0, 0, 0, 11, 2, 6,
|
||||||
|
11, 12, 6, 3, 2, 6, 11, 2, 4, 7, 12, 11, 8, 6, 3, 0, 0, 0, 0,
|
||||||
|
0, 0, 2, 8, 1, 8, 1, 6, 11, 12, 7, 0, 0, 0, 1, 4, 5, 12, 7,
|
||||||
|
11, 6, 8, 3, 0, 0, 0, 11, 12, 4, 8, 12, 4, 8, 12, 2, 5, 7, 6,
|
||||||
|
8, 12, 3, 11, 12, 3, 11, 3, 5, 0, 0, 0, 8, 12, 2, 5, 12, 2, 5,
|
||||||
|
12, 11, 5, 1, 2, 8, 3, 1, 8, 12, 1, 4, 12, 1, 4, 12, 11, 11, 12,
|
||||||
|
4, 8, 12, 4, 8, 4, 2, 0, 0, 0, 12, 11, 7, 10, 9, 2, 0, 0, 0,
|
||||||
|
0, 0, 0, 1, 10, 3, 10, 3, 9, 7, 11, 12, 0, 0, 0, 12, 7, 11, 1,
|
||||||
|
4, 5, 10, 2, 9, 0, 0, 0, 12, 7, 9, 5, 7, 9, 5, 7, 3, 10, 11,
|
||||||
|
4, 6, 12, 5, 12, 5, 11, 2, 9, 10, 0, 0, 0, 12, 9, 3, 12, 3, 3,
|
||||||
|
11, 10, 1, 11, 1, 1, 11, 4, 12, 1, 4, 12, 1, 4, 6, 9, 10, 2, 3,
|
||||||
|
9, 6, 9, 6, 12, 4, 10, 11, 0, 0, 0, 3, 6, 8, 11, 12, 7, 9, 10,
|
||||||
|
2, 0, 0, 0, 7, 11, 6, 10, 11, 6, 10, 11, 1, 8, 12, 9, 12, 8, 9,
|
||||||
|
6, 7, 5, 1, 2, 3, 6, 7, 5, 9, 8, 12, 5, 7, 6, 11, 4, 10, 0,
|
||||||
|
0, 0, 8, 12, 3, 11, 12, 3, 11, 12, 5, 2, 9, 10, 5, 11, 1, 11, 1,
|
||||||
|
10, 8, 12, 9, 0, 0, 0, 8, 12, 9, 4, 10, 11, 2, 1, 3, 0, 0, 0,
|
||||||
|
11, 10, 4, 9, 12, 8, 0, 0, 0, 0, 0, 0, 12, 10, 7, 10, 7, 4, 0,
|
||||||
|
0, 0, 0, 0, 0, 12, 10, 7, 10, 7, 4, 3, 2, 1, 0, 0, 0, 5, 7,
|
||||||
|
1, 12, 7, 1, 12, 1, 10, 0, 0, 0, 12, 7, 10, 3, 7, 10, 3, 7, 5,
|
||||||
|
3, 2, 10, 4, 5, 10, 6, 5, 10, 6, 10, 12, 0, 0, 0, 4, 5, 10, 6,
|
||||||
|
5, 10, 6, 5, 12, 2, 1, 3, 12, 6, 10, 1, 6, 10, 0, 0, 0, 0, 0,
|
||||||
|
0, 3, 2, 6, 10, 2, 6, 10, 6, 12, 0, 0, 0, 4, 7, 10, 7, 10, 12,
|
||||||
|
3, 6, 8, 0, 0, 0, 6, 8, 2, 6, 2, 2, 7, 12, 10, 7, 10, 10, 5,
|
||||||
|
7, 1, 12, 7, 1, 12, 7, 10, 3, 6, 8, 10, 12, 2, 12, 2, 8, 5, 7,
|
||||||
|
6, 0, 0, 0, 4, 12, 3, 4, 5, 3, 8, 12, 3, 4, 12, 10, 8, 2, 12,
|
||||||
|
2, 12, 10, 5, 1, 4, 0, 0, 0, 8, 3, 12, 1, 3, 12, 1, 12, 10, 0,
|
||||||
|
0, 0, 10, 12, 2, 12, 2, 8, 0, 0, 0, 0, 0, 0, 12, 9, 7, 2, 9,
|
||||||
|
7, 2, 7, 4, 0, 0, 0, 12, 4, 3, 12, 9, 3, 1, 4, 3, 12, 4, 7,
|
||||||
|
2, 1, 5, 2, 9, 5, 7, 9, 5, 7, 9, 12, 12, 7, 9, 5, 7, 9, 5,
|
||||||
|
9, 3, 0, 0, 0, 2, 9, 4, 6, 9, 4, 6, 9, 12, 6, 5, 4, 12, 6,
|
||||||
|
9, 6, 9, 3, 4, 5, 1, 0, 0, 0, 2, 9, 1, 12, 9, 1, 12, 1, 6,
|
||||||
|
0, 0, 0, 3, 9, 6, 9, 6, 12, 0, 0, 0, 0, 0, 0, 12, 9, 7, 2,
|
||||||
|
9, 7, 2, 9, 4, 6, 8, 3, 1, 6, 4, 6, 4, 7, 9, 8, 12, 0, 0,
|
||||||
|
0, 5, 7, 6, 9, 8, 12, 3, 2, 1, 0, 0, 0, 12, 8, 9, 6, 7, 5,
|
||||||
|
0, 0, 0, 0, 0, 0, 4, 2, 5, 2, 5, 3, 12, 9, 8, 0, 0, 0, 12,
|
||||||
|
8, 9, 1, 4, 5, 0, 0, 0, 0, 0, 0, 8, 9, 12, 2, 3, 1, 0, 0,
|
||||||
|
0, 0, 0, 0, 12, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 8, 9,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 9, 12, 2, 3, 1, 0, 0, 0, 0,
|
||||||
|
0, 0, 12, 8, 9, 1, 4, 5, 0, 0, 0, 0, 0, 0, 4, 2, 5, 2, 5,
|
||||||
|
3, 12, 9, 8, 0, 0, 0, 12, 8, 9, 6, 7, 5, 0, 0, 0, 0, 0, 0,
|
||||||
|
5, 7, 6, 9, 8, 12, 3, 2, 1, 0, 0, 0, 1, 6, 4, 6, 4, 7, 9,
|
||||||
|
8, 12, 0, 0, 0, 12, 9, 7, 2, 9, 7, 2, 9, 4, 6, 8, 3, 3, 9,
|
||||||
|
6, 9, 6, 12, 0, 0, 0, 0, 0, 0, 2, 9, 1, 12, 9, 1, 12, 1, 6,
|
||||||
|
0, 0, 0, 12, 6, 9, 6, 9, 3, 4, 5, 1, 0, 0, 0, 2, 9, 4, 6,
|
||||||
|
9, 4, 6, 9, 12, 6, 5, 4, 12, 7, 9, 5, 7, 9, 5, 9, 3, 0, 0,
|
||||||
|
0, 2, 1, 5, 2, 9, 5, 7, 9, 5, 7, 9, 12, 12, 4, 3, 12, 9, 3,
|
||||||
|
1, 4, 3, 12, 4, 7, 12, 9, 7, 2, 9, 7, 2, 7, 4, 0, 0, 0, 10,
|
||||||
|
12, 2, 12, 2, 8, 0, 0, 0, 0, 0, 0, 8, 3, 12, 1, 3, 12, 1, 12,
|
||||||
|
10, 0, 0, 0, 8, 2, 12, 2, 12, 10, 5, 1, 4, 0, 0, 0, 4, 12, 3,
|
||||||
|
4, 5, 3, 8, 12, 3, 4, 12, 10, 10, 12, 2, 12, 2, 8, 5, 7, 6, 0,
|
||||||
|
0, 0, 5, 7, 1, 12, 7, 1, 12, 7, 10, 3, 6, 8, 6, 8, 2, 6, 2,
|
||||||
|
2, 7, 12, 10, 7, 10, 10, 4, 7, 10, 7, 10, 12, 3, 6, 8, 0, 0, 0,
|
||||||
|
3, 2, 6, 10, 2, 6, 10, 6, 12, 0, 0, 0, 12, 6, 10, 1, 6, 10, 0,
|
||||||
|
0, 0, 0, 0, 0, 4, 5, 10, 6, 5, 10, 6, 5, 12, 2, 1, 3, 4, 5,
|
||||||
|
10, 6, 5, 10, 6, 10, 12, 0, 0, 0, 12, 7, 10, 3, 7, 10, 3, 7, 5,
|
||||||
|
3, 2, 10, 5, 7, 1, 12, 7, 1, 12, 1, 10, 0, 0, 0, 12, 10, 7, 10,
|
||||||
|
7, 4, 3, 2, 1, 0, 0, 0, 12, 10, 7, 10, 7, 4, 0, 0, 0, 0, 0,
|
||||||
|
0, 11, 10, 4, 9, 12, 8, 0, 0, 0, 0, 0, 0, 8, 12, 9, 4, 10, 11,
|
||||||
|
2, 1, 3, 0, 0, 0, 5, 11, 1, 11, 1, 10, 8, 12, 9, 0, 0, 0, 8,
|
||||||
|
12, 3, 11, 12, 3, 11, 12, 5, 2, 9, 10, 9, 8, 12, 5, 7, 6, 11, 4,
|
||||||
|
10, 0, 0, 0, 12, 8, 9, 6, 7, 5, 1, 2, 3, 6, 7, 5, 7, 11, 6,
|
||||||
|
10, 11, 6, 10, 11, 1, 8, 12, 9, 3, 6, 8, 11, 12, 7, 9, 10, 2, 0,
|
||||||
|
0, 0, 3, 9, 6, 9, 6, 12, 4, 10, 11, 0, 0, 0, 11, 4, 12, 1, 4,
|
||||||
|
12, 1, 4, 6, 9, 10, 2, 12, 9, 3, 12, 3, 3, 11, 10, 1, 11, 1, 1,
|
||||||
|
6, 12, 5, 12, 5, 11, 2, 9, 10, 0, 0, 0, 12, 7, 9, 5, 7, 9, 5,
|
||||||
|
7, 3, 10, 11, 4, 12, 7, 11, 1, 4, 5, 10, 2, 9, 0, 0, 0, 1, 10,
|
||||||
|
3, 10, 3, 9, 7, 11, 12, 0, 0, 0, 12, 11, 7, 10, 9, 2, 0, 0, 0,
|
||||||
|
0, 0, 0, 11, 12, 4, 8, 12, 4, 8, 4, 2, 0, 0, 0, 8, 3, 1, 8,
|
||||||
|
12, 1, 4, 12, 1, 4, 12, 11, 8, 12, 2, 5, 12, 2, 5, 12, 11, 5, 1,
|
||||||
|
2, 8, 12, 3, 11, 12, 3, 11, 3, 5, 0, 0, 0, 11, 12, 4, 8, 12, 4,
|
||||||
|
8, 12, 2, 5, 7, 6, 1, 4, 5, 12, 7, 11, 6, 8, 3, 0, 0, 0, 2,
|
||||||
|
8, 1, 8, 1, 6, 11, 12, 7, 0, 0, 0, 7, 12, 11, 8, 6, 3, 0, 0,
|
||||||
|
0, 0, 0, 0, 11, 2, 6, 11, 12, 6, 3, 2, 6, 11, 2, 4, 11, 4, 12,
|
||||||
|
1, 4, 12, 1, 12, 6, 0, 0, 0, 11, 5, 12, 5, 12, 6, 2, 1, 3, 0,
|
||||||
|
0, 0, 11, 5, 12, 5, 12, 6, 0, 0, 0, 0, 0, 0, 3, 5, 2, 5, 2,
|
||||||
|
4, 12, 7, 11, 0, 0, 0, 11, 7, 12, 5, 4, 1, 0, 0, 0, 0, 0, 0,
|
||||||
|
11, 7, 12, 3, 2, 1, 0, 0, 0, 0, 0, 0, 11, 7, 12, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 9, 11, 8, 11, 8, 7, 0, 0, 0, 0, 0, 0, 7, 8,
|
||||||
|
11, 8, 11, 9, 1, 3, 2, 0, 0, 0, 9, 11, 8, 11, 8, 7, 1, 4, 5,
|
||||||
|
0, 0, 0, 7, 11, 9, 7, 9, 9, 5, 4, 2, 5, 2, 2, 6, 8, 5, 9,
|
||||||
|
8, 5, 9, 5, 11, 0, 0, 0, 6, 8, 5, 9, 8, 5, 9, 8, 11, 1, 3,
|
||||||
|
2, 1, 4, 6, 9, 4, 6, 9, 4, 11, 9, 8, 6, 11, 9, 4, 9, 4, 2,
|
||||||
|
6, 8, 3, 0, 0, 0, 7, 6, 11, 3, 6, 11, 3, 11, 9, 0, 0, 0, 7,
|
||||||
|
1, 9, 7, 11, 9, 2, 1, 9, 7, 1, 6, 7, 6, 11, 3, 6, 11, 3, 6,
|
||||||
|
9, 4, 5, 1, 2, 4, 9, 4, 9, 11, 6, 5, 7, 0, 0, 0, 3, 5, 9,
|
||||||
|
11, 5, 9, 0, 0, 0, 0, 0, 0, 2, 1, 9, 5, 1, 9, 5, 9, 11, 0,
|
||||||
|
0, 0, 1, 4, 3, 11, 4, 3, 11, 3, 9, 0, 0, 0, 11, 9, 4, 9, 4,
|
||||||
|
2, 0, 0, 0, 0, 0, 0, 10, 11, 2, 7, 11, 2, 7, 2, 8, 0, 0, 0,
|
||||||
|
7, 11, 8, 1, 11, 8, 1, 11, 10, 1, 3, 8, 10, 11, 2, 7, 11, 2, 7,
|
||||||
|
11, 8, 1, 4, 5, 8, 7, 3, 7, 3, 5, 10, 11, 4, 0, 0, 0, 10, 8,
|
||||||
|
5, 10, 11, 5, 6, 8, 5, 10, 8, 2, 10, 1, 11, 1, 11, 5, 8, 3, 6,
|
||||||
|
0, 0, 0, 6, 1, 8, 1, 8, 2, 11, 4, 10, 0, 0, 0, 10, 4, 11, 6,
|
||||||
|
8, 3, 0, 0, 0, 0, 0, 0, 7, 6, 3, 7, 11, 3, 2, 11, 3, 2, 11,
|
||||||
|
10, 7, 11, 6, 10, 11, 6, 10, 6, 1, 0, 0, 0, 3, 2, 1, 11, 4, 10,
|
||||||
|
5, 7, 6, 0, 0, 0, 7, 5, 6, 4, 11, 10, 0, 0, 0, 0, 0, 0, 10,
|
||||||
|
2, 11, 3, 2, 11, 3, 11, 5, 0, 0, 0, 5, 11, 1, 11, 1, 10, 0, 0,
|
||||||
|
0, 0, 0, 0, 10, 4, 11, 1, 2, 3, 0, 0, 0, 0, 0, 0, 10, 4, 11,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 8, 4, 10, 8, 4, 8, 7, 0,
|
||||||
|
0, 0, 9, 10, 8, 4, 10, 8, 4, 10, 7, 3, 2, 1, 9, 7, 1, 9, 10,
|
||||||
|
1, 5, 7, 1, 9, 7, 8, 5, 3, 7, 3, 7, 8, 10, 2, 9, 0, 0, 0,
|
||||||
|
4, 5, 6, 4, 10, 6, 8, 10, 6, 8, 10, 9, 6, 8, 3, 10, 2, 9, 1,
|
||||||
|
4, 5, 0, 0, 0, 9, 8, 10, 6, 8, 10, 6, 10, 1, 0, 0, 0, 9, 2,
|
||||||
|
10, 3, 8, 6, 0, 0, 0, 0, 0, 0, 4, 10, 7, 3, 10, 7, 3, 10, 9,
|
||||||
|
3, 6, 7, 7, 4, 6, 4, 6, 1, 9, 10, 2, 0, 0, 0, 9, 3, 10, 3,
|
||||||
|
10, 1, 7, 6, 5, 0, 0, 0, 9, 2, 10, 5, 7, 6, 0, 0, 0, 0, 0,
|
||||||
|
0, 4, 10, 5, 9, 10, 5, 9, 5, 3, 0, 0, 0, 4, 1, 5, 2, 10, 9,
|
||||||
|
0, 0, 0, 0, 0, 0, 9, 3, 10, 3, 10, 1, 0, 0, 0, 0, 0, 0, 9,
|
||||||
|
2, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 7, 2, 4, 7, 2, 0, 0,
|
||||||
|
0, 0, 0, 0, 1, 3, 4, 8, 3, 4, 8, 4, 7, 0, 0, 0, 5, 1, 7,
|
||||||
|
2, 1, 7, 2, 7, 8, 0, 0, 0, 5, 3, 7, 3, 7, 8, 0, 0, 0, 0,
|
||||||
|
0, 0, 6, 5, 8, 4, 5, 8, 4, 8, 2, 0, 0, 0, 6, 3, 8, 1, 5,
|
||||||
|
4, 0, 0, 0, 0, 0, 0, 6, 1, 8, 1, 8, 2, 0, 0, 0, 0, 0, 0,
|
||||||
|
3, 8, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 2, 7, 6, 2, 7,
|
||||||
|
2, 4, 0, 0, 0, 7, 4, 6, 4, 6, 1, 0, 0, 0, 0, 0, 0, 5, 6,
|
||||||
|
7, 3, 1, 2, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 3, 5, 2, 5, 2, 4, 0, 0, 0, 0, 0, 0, 4, 1, 5, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
vec4 base = gl_in[0].gl_Position;
|
||||||
|
int index = varIndex[0] * 12;
|
||||||
|
for(int i = 0; i < 12; i += 3) {
|
||||||
|
for(int k = 0; k < 3; k++) {
|
||||||
|
gl_Position = proj * view * (base + vec4(vectors[table[index + i + k]], 0.0));
|
||||||
|
varTextureG = varTexture[0];
|
||||||
EmitVertex();
|
EmitVertex();
|
||||||
|
}
|
||||||
EndPrimitive();
|
EndPrimitive();
|
||||||
}
|
}
|
||||||
|
|
||||||
void main() {
|
|
||||||
build_house(gl_in[0].gl_Position);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
38
Shader/mc.vs
38
Shader/mc.vs
@ -1,14 +1,30 @@
|
|||||||
#version 330 core
|
#version 430
|
||||||
layout (location = 0) in vec2 aPos;
|
|
||||||
layout (location = 1) in vec3 aColor;
|
|
||||||
|
|
||||||
out VS_OUT {
|
layout (binding = 0) uniform sampler3D densities;
|
||||||
vec3 color;
|
|
||||||
} vs_out;
|
|
||||||
|
|
||||||
void main()
|
out vec3 varTexture;
|
||||||
{
|
out int varIndex;
|
||||||
vs_out.color = aColor;
|
|
||||||
gl_Position = vec4(aPos.x, aPos.y, 0.0, 1.0);
|
const float step = 1.0 / 63.0;
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
int id = gl_VertexID;
|
||||||
|
int x = id & 0x3F;
|
||||||
|
int y = (id >> 6) & 0x3F;
|
||||||
|
int z = (id >> 12) & 0x3F;
|
||||||
|
|
||||||
|
vec3 xyz = vec3(x, y, z);
|
||||||
|
gl_Position = vec4(xyz, 1.0);
|
||||||
|
varTexture = xyz * step;
|
||||||
|
|
||||||
|
int b1 = int(texture(densities, varTexture).r < 0.5f);
|
||||||
|
int b2 = int(texture(densities, varTexture + vec3(step, 0.0, 0.0)).r < 0.5f);
|
||||||
|
int b3 = int(texture(densities, varTexture + vec3(step, 0.0, step)).r < 0.5f);
|
||||||
|
int b4 = int(texture(densities, varTexture + vec3(0.0, 0.0, step)).r < 0.5f);
|
||||||
|
int b5 = int(texture(densities, varTexture + vec3(0.0, step, 0.0)).r < 0.5f);
|
||||||
|
int b6 = int(texture(densities, varTexture + vec3(step, step, 0.0)).r < 0.5f);
|
||||||
|
int b7 = int(texture(densities, varTexture + vec3(step, step, step)).r < 0.5f);
|
||||||
|
int b8 = int(texture(densities, varTexture + vec3(0.0, step, step)).r < 0.5f);
|
||||||
|
varIndex = (b1 << 7) | (b2 << 6) | (b3 << 5) | (b4 << 4) |
|
||||||
|
(b5 << 3) | (b6 << 2) | (b7 << 1) | b8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
13
Shader/noise.fs
Normal file
13
Shader/noise.fs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#version 430
|
||||||
|
|
||||||
|
in vec3 varPosition;
|
||||||
|
|
||||||
|
out float noise;
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
float sinX = sin(varPosition.x * 5.8905);
|
||||||
|
float cosY = cos(varPosition.y * 5.8905);
|
||||||
|
float cosZ = cos(varPosition.z * 5.8905);
|
||||||
|
|
||||||
|
noise = (sinX * sinX + cosY * cosY + cosZ * cosZ) * (1.0f / 3.0f);
|
||||||
|
}
|
13
Shader/noise.vs
Normal file
13
Shader/noise.vs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#version 430
|
||||||
|
|
||||||
|
layout (location = 0) in vec2 position;
|
||||||
|
|
||||||
|
uniform float layer;
|
||||||
|
uniform float height;
|
||||||
|
|
||||||
|
out vec3 varPosition;
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
gl_Position = vec4(position, 0.0, 1.0);
|
||||||
|
varPosition = vec3(position.x, position.y + height, layer);
|
||||||
|
}
|
72
Spatial.h
Normal file
72
Spatial.h
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <glm/glm.hpp>
|
||||||
|
#include <glm/gtc/matrix_transform.hpp>
|
||||||
|
#include <glm/gtc/type_ptr.hpp>
|
||||||
|
|
||||||
|
#include "glm/gtx/string_cast.hpp"
|
||||||
|
|
||||||
|
class Spatial {
|
||||||
|
public:
|
||||||
|
Spatial() = default;
|
||||||
|
|
||||||
|
void translate(glm::vec3 offset) {
|
||||||
|
matrix = glm::translate(matrix, offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
glm::vec3 get_translation() {
|
||||||
|
return glm::vec3(matrix[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void uniform_scale(float factor) {
|
||||||
|
scale(glm::vec3(factor, factor, factor));
|
||||||
|
}
|
||||||
|
|
||||||
|
void scale(glm::vec3 factors) {
|
||||||
|
matrix = glm::scale(matrix, factors);
|
||||||
|
}
|
||||||
|
|
||||||
|
void rotate(float degrees, glm::vec3 axis) {
|
||||||
|
matrix = glm::rotate(matrix, glm::radians(degrees), axis);
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_origin(glm::vec3 position) {
|
||||||
|
origin = position;
|
||||||
|
}
|
||||||
|
|
||||||
|
void add_to_origin(glm::vec3 addition) {
|
||||||
|
origin += addition;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_rotation_from_quat(glm::quat quaternion) {
|
||||||
|
// Remember translation
|
||||||
|
glm::vec4 save = matrix[3];
|
||||||
|
|
||||||
|
matrix = glm::mat4_cast(quaternion);
|
||||||
|
matrix[3] = save;
|
||||||
|
}
|
||||||
|
|
||||||
|
glm::vec3 get_origin() const {
|
||||||
|
return origin;
|
||||||
|
}
|
||||||
|
|
||||||
|
glm::mat4 get_matrix() {
|
||||||
|
return matrix;
|
||||||
|
}
|
||||||
|
|
||||||
|
glm::vec3 forward() const {
|
||||||
|
return matrix * glm::vec4(0.0, 0.0, -1.0, 0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
glm::vec3 up() const {
|
||||||
|
return matrix * glm::vec4(0.0, 1.0, 0.0, 0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
glm::vec3 right() const {
|
||||||
|
return matrix * glm::vec4(1.0, 0.0, 0.0, 0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
glm::mat4 matrix = glm::mat4(1.0f); // Initialize as identity
|
||||||
|
glm::vec3 origin = glm::vec3(0.0f, 0.0f, 0.0f);
|
||||||
|
};
|
18
VertexBuffer.cpp
Normal file
18
VertexBuffer.cpp
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#include "VertexBuffer.h"
|
||||||
|
|
||||||
|
VertexBuffer::VertexBuffer() {
|
||||||
|
glGenVertexArrays(1, &vertex_array);
|
||||||
|
glGenBuffers(1, &vertex_buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void VertexBuffer::set_data(unsigned int size, const void *data, int flag) {
|
||||||
|
this->size = size;
|
||||||
|
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, size, data, flag);
|
||||||
|
}
|
||||||
|
|
||||||
|
void VertexBuffer::draw() {
|
||||||
|
glBindVertexArray(vertex_array);
|
||||||
|
glDrawArrays(GL_TRIANGLES, 0, size);
|
||||||
|
}
|
21
VertexBuffer.h
Normal file
21
VertexBuffer.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Must be the first include
|
||||||
|
#include <glad/glad.h>
|
||||||
|
|
||||||
|
// Other includes
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
|
class VertexBuffer {
|
||||||
|
public:
|
||||||
|
VertexBuffer();
|
||||||
|
|
||||||
|
void set_data(unsigned int size, const void *data, int flag);
|
||||||
|
|
||||||
|
void draw();
|
||||||
|
|
||||||
|
private:
|
||||||
|
GLuint vertex_array;
|
||||||
|
GLuint vertex_buffer;
|
||||||
|
unsigned int size;
|
||||||
|
};
|
58
main.cpp
58
main.cpp
@ -1,18 +1,19 @@
|
|||||||
|
// Must be the first include
|
||||||
#include <glad/glad.h>
|
#include <glad/glad.h>
|
||||||
|
|
||||||
// Needs to be second
|
// Other includes
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
#include "Shader.h"
|
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
#include "Framebuffer3D.h"
|
||||||
|
#include "MCRenderer.h"
|
||||||
|
#include "Shader.h"
|
||||||
|
|
||||||
void framebuffer_size_callback(GLFWwindow *window, int width, int height);
|
void framebuffer_size_callback(GLFWwindow *window, int width, int height);
|
||||||
|
|
||||||
// settings
|
// settings
|
||||||
const unsigned int SCR_WIDTH = 800;
|
const unsigned int SCR_WIDTH = 1920;
|
||||||
const unsigned int SCR_HEIGHT = 600;
|
const unsigned int SCR_HEIGHT = 1080;
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
// glfw: initialize and configure
|
// glfw: initialize and configure
|
||||||
@ -28,7 +29,7 @@ int main() {
|
|||||||
|
|
||||||
// glfw window creation
|
// glfw window creation
|
||||||
// --------------------
|
// --------------------
|
||||||
GLFWwindow *window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", NULL, NULL);
|
GLFWwindow *window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "Marching Cubes", NULL, NULL);
|
||||||
if (window == NULL) {
|
if (window == NULL) {
|
||||||
std::cout << "Failed to create GLFW window" << std::endl;
|
std::cout << "Failed to create GLFW window" << std::endl;
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
@ -47,54 +48,19 @@ int main() {
|
|||||||
// -----------------------------
|
// -----------------------------
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
// build and compile shaders
|
// Setup the Marching Cubes renderer
|
||||||
// -------------------------
|
MCRenderer renderer = MCRenderer();
|
||||||
Shader shader("Shader/mc.vs", "Shader/mc.fs", "Shader/mc.gs");
|
|
||||||
|
|
||||||
// set up vertex data (and buffer(s)) and configure vertex attributes
|
|
||||||
// ------------------------------------------------------------------
|
|
||||||
float points[] = {
|
|
||||||
-0.5f, 0.5f, 1.0f, 0.0f, 0.0f, // top-left
|
|
||||||
0.5f, 0.5f, 0.0f, 1.0f, 0.0f, // top-right
|
|
||||||
0.5f, -0.5f, 0.0f, 0.0f, 1.0f, // bottom-right
|
|
||||||
-0.5f, -0.5f, 1.0f, 1.0f, 0.0f // bottom-left
|
|
||||||
};
|
|
||||||
unsigned int VBO, VAO;
|
|
||||||
glGenBuffers(1, &VBO);
|
|
||||||
glGenVertexArrays(1, &VAO);
|
|
||||||
glBindVertexArray(VAO);
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
|
||||||
glBufferData(GL_ARRAY_BUFFER, sizeof(points), &points, GL_STATIC_DRAW);
|
|
||||||
glEnableVertexAttribArray(0);
|
|
||||||
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), 0);
|
|
||||||
glEnableVertexAttribArray(1);
|
|
||||||
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void *)(2 * sizeof(float)));
|
|
||||||
glBindVertexArray(0);
|
|
||||||
|
|
||||||
// render loop
|
// render loop
|
||||||
// -----------
|
// -----------
|
||||||
while (!glfwWindowShouldClose(window)) {
|
while (!glfwWindowShouldClose(window)) {
|
||||||
// render
|
renderer.render(1.0); // TODO: Proper delta
|
||||||
// ------
|
|
||||||
glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
|
||||||
|
|
||||||
// draw points
|
|
||||||
shader.use();
|
|
||||||
glBindVertexArray(VAO);
|
|
||||||
glDrawArrays(GL_POINTS, 0, 4);
|
|
||||||
|
|
||||||
// glfw: swap buffers and poll IO events (keys pressed/released, mouse moved etc.)
|
// glfw: swap buffers and poll IO events (keys pressed/released, mouse moved etc.)
|
||||||
// -------------------------------------------------------------------------------
|
|
||||||
glfwSwapBuffers(window);
|
glfwSwapBuffers(window);
|
||||||
glfwPollEvents();
|
glfwPollEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
// optional: de-allocate all resources once they've outlived their purpose:
|
|
||||||
// ------------------------------------------------------------------------
|
|
||||||
glDeleteVertexArrays(1, &VAO);
|
|
||||||
glDeleteBuffers(1, &VBO);
|
|
||||||
|
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user