Basic setup for tessellation: mesh rendering

This commit is contained in:
karl 2021-05-30 19:50:19 +02:00
parent 95f246bbd2
commit 3b97346ea7
2 changed files with 23 additions and 4 deletions

View File

@ -1,10 +1,14 @@
#version 430 #version 430
in vec3 position; layout (location = 0) in vec3 position;
in vec2 texture_coordinate; layout (location = 1) in vec3 aNormal;
layout (location = 2) in vec2 texture_coordinate;
layout (location = 3) in vec3 aTangent;
layout (location = 4) in vec3 aBitangent;
uniform mat4 model; uniform mat4 model;
uniform mat4 projection_view; uniform mat4 projection;
uniform mat4 view;
out PipelineData { out PipelineData {
vec4 position; vec4 position;
@ -12,7 +16,7 @@ out PipelineData {
} vs_out; } vs_out;
void main() { void main() {
mat4 pvm = projection_view * model; mat4 pvm = projection * view * model;
vs_out.texture_coordinate = texture_coordinate; vs_out.texture_coordinate = texture_coordinate;
vec4 homogenous_position = vec4(position, 1.0); vec4 homogenous_position = vec4(position, 1.0);
vs_out.position = pvm * homogenous_position; vs_out.position = pvm * homogenous_position;

View File

@ -47,6 +47,14 @@ class FullDemo : public Gedeng::Application {
mesh2.translate(glm::vec3(-3.0, 0.0, -3.0)); mesh2.translate(glm::vec3(-3.0, 0.0, -3.0));
mesh3.translate(glm::vec3(5.0, 0.0, 5.0)); mesh3.translate(glm::vec3(5.0, 0.0, 5.0));
mesh3.rotate(45.0, glm::vec3(0.0, 1.0, 0.0)); mesh3.rotate(45.0, glm::vec3(0.0, 1.0, 0.0));
terrain_mesh.translate(glm::vec3(0.0, 1.0, 0.0));
terrain_shader.add_vertex_shader("Shader/terrain.vs");
terrain_shader.add_fragment_shader("Shader/terrain.fs");
terrain_shader.add_tessellation_control_shader("Shader/terrain.tcs");
terrain_shader.add_tessellation_evaluation_shader("Shader/terrain.tes");
terrain_shader.link();
} }
~FullDemo() = default; ~FullDemo() = default;
@ -115,6 +123,12 @@ class FullDemo : public Gedeng::Application {
mesh1.render(render_shader); mesh1.render(render_shader);
mesh2.render(render_shader); mesh2.render(render_shader);
mesh3.render(render_shader); mesh3.render(render_shader);
// Terrain
terrain_shader.use();
terrain_shader.setMat4("projection", camera.get_projection());
terrain_shader.setMat4("view", camera.get_view());
terrain_mesh.render_patches(terrain_shader);
} }
private: private:
@ -126,6 +140,7 @@ class FullDemo : public Gedeng::Application {
Gedeng::Shader render_shader; Gedeng::Shader render_shader;
Gedeng::Shader debug_shader; Gedeng::Shader debug_shader;
Gedeng::Shader terrain_shader;
Gedeng::VertexBuffer vertex_rectangle; Gedeng::VertexBuffer vertex_rectangle;