add backface culling
This commit is contained in:
parent
a2c33e3c76
commit
56cf731b7f
27
u03-4/main.c
27
u03-4/main.c
|
@ -40,6 +40,8 @@ typedef struct {
|
||||||
GLuint program;
|
GLuint program;
|
||||||
GLuint vao;
|
GLuint vao;
|
||||||
|
|
||||||
|
GLfloat rotation;
|
||||||
|
|
||||||
void init(void) {
|
void init(void) {
|
||||||
|
|
||||||
// create and compile vertex shader
|
// create and compile vertex shader
|
||||||
|
@ -87,6 +89,10 @@ void init(void) {
|
||||||
printf("%s",infoLog);
|
printf("%s",infoLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(fragmentText);
|
||||||
|
fragmentText = NULL;
|
||||||
|
fragmentTextConst = NULL;
|
||||||
|
|
||||||
// create and link shader program
|
// create and link shader program
|
||||||
program = glCreateProgram();
|
program = glCreateProgram();
|
||||||
glAttachShader(program, vertexShader);
|
glAttachShader(program, vertexShader);
|
||||||
|
@ -214,6 +220,7 @@ void init(void) {
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
glBindVertexArray(0);
|
glBindVertexArray(0);
|
||||||
|
|
||||||
|
|
||||||
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
|
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -222,11 +229,22 @@ void draw(void) {
|
||||||
glUseProgram(program);
|
glUseProgram(program);
|
||||||
glBindVertexArray(vao);
|
glBindVertexArray(vao);
|
||||||
|
|
||||||
|
rotation = rotation + 0.01f;
|
||||||
|
if (rotation > 2 * 3.1415926f) {
|
||||||
|
rotation = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
glUniform1f(glGetUniformLocation(program, "rotation"), rotation);
|
||||||
|
|
||||||
|
glFrontFace(GL_CW);
|
||||||
|
glCullFace(GL_BACK);
|
||||||
|
glEnable(GL_CULL_FACE);
|
||||||
|
|
||||||
|
|
||||||
glEnable(GL_PRIMITIVE_RESTART);
|
glEnable(GL_PRIMITIVE_RESTART);
|
||||||
glPrimitiveRestartIndex(RESTART);
|
glPrimitiveRestartIndex(RESTART);
|
||||||
|
|
||||||
GLuint indices[] = {0, 1, 2, 3, RESTART, 4, 5, 6, 7, RESTART, 8, 9, 10, 11, RESTART, 12, 13, 14, 15};
|
GLuint indices[] = {0, 1, 2, 3, RESTART, 4, 6, 5, 7, RESTART, 8, 9, 10, 11, RESTART, 12, 14, 13, 15};
|
||||||
|
|
||||||
glDrawElements(GL_TRIANGLE_STRIP, sizeof(indices) / sizeof(GLuint), GL_UNSIGNED_INT, indices);
|
glDrawElements(GL_TRIANGLE_STRIP, sizeof(indices) / sizeof(GLuint), GL_UNSIGNED_INT, indices);
|
||||||
}
|
}
|
||||||
|
@ -236,14 +254,12 @@ void framebuffer_size_callback(GLFWwindow *window, int width, int height) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
printf("Hello World!\n");
|
|
||||||
|
|
||||||
glfwInit();
|
glfwInit();
|
||||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
|
||||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
|
||||||
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
||||||
|
|
||||||
GLFWwindow *window = glfwCreateWindow(800, 800, "Computergrafik 1", NULL, NULL);
|
GLFWwindow *window = glfwCreateWindow(600, 600, "Computergrafik 1", NULL, NULL);
|
||||||
|
|
||||||
if (!window) {
|
if (!window) {
|
||||||
printf("Failed to create window\n");
|
printf("Failed to create window\n");
|
||||||
|
@ -257,6 +273,9 @@ int main(void) {
|
||||||
|
|
||||||
glewInit();
|
glewInit();
|
||||||
|
|
||||||
|
printf("OpenGL version supported by this platform (%s):\n", glGetString(GL_VERSION));
|
||||||
|
|
||||||
|
|
||||||
init();
|
init();
|
||||||
|
|
||||||
while (!glfwWindowShouldClose(window)) {
|
while (!glfwWindowShouldClose(window)) {
|
||||||
|
|
|
@ -7,7 +7,9 @@ unsigned char vertexShader_glsl[] = {
|
||||||
0x61, 0x79, 0x6f, 0x75, 0x74, 0x20, 0x28, 0x6c, 0x6f, 0x63, 0x61, 0x74,
|
0x61, 0x79, 0x6f, 0x75, 0x74, 0x20, 0x28, 0x6c, 0x6f, 0x63, 0x61, 0x74,
|
||||||
0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x69, 0x6e, 0x20,
|
0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x69, 0x6e, 0x20,
|
||||||
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78,
|
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78,
|
||||||
0x56, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0x0a, 0x6f, 0x75, 0x74, 0x20, 0x66,
|
0x56, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f,
|
||||||
|
0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x72, 0x6f, 0x74,
|
||||||
|
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a, 0x6f, 0x75, 0x74, 0x20, 0x66,
|
||||||
0x6c, 0x6f, 0x61, 0x74, 0x20, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e,
|
0x6c, 0x6f, 0x61, 0x74, 0x20, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e,
|
||||||
0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64,
|
0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3b, 0x0a, 0x76, 0x6f, 0x69, 0x64,
|
||||||
0x20, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x66,
|
0x20, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x29, 0x20, 0x7b, 0x0a, 0x09, 0x66,
|
||||||
|
@ -15,7 +17,10 @@ unsigned char vertexShader_glsl[] = {
|
||||||
0x20, 0x3d, 0x20, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x56, 0x61, 0x6c,
|
0x20, 0x3d, 0x20, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x56, 0x61, 0x6c,
|
||||||
0x75, 0x65, 0x3b, 0x0a, 0x09, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69,
|
0x75, 0x65, 0x3b, 0x0a, 0x09, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69,
|
||||||
0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28,
|
0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28,
|
||||||
0x61, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x30,
|
0x61, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x78, 0x20,
|
||||||
0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x3b, 0x0a, 0x7d
|
0x2a, 0x20, 0x73, 0x69, 0x6e, 0x28, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x69,
|
||||||
|
0x6f, 0x6e, 0x29, 0x2c, 0x20, 0x61, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69,
|
||||||
|
0x6f, 0x6e, 0x2e, 0x79, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31,
|
||||||
|
0x2e, 0x30, 0x29, 0x3b, 0x0a, 0x7d
|
||||||
};
|
};
|
||||||
unsigned int vertexShader_glsl_len = 215;
|
unsigned int vertexShader_glsl_len = 270;
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
#version 330 core
|
#version 330 core
|
||||||
layout (location = 0) in vec2 aPosition;
|
layout (location = 0) in vec2 aPosition;
|
||||||
layout (location = 1) in float vertexValue;
|
layout (location = 1) in float vertexValue;
|
||||||
|
uniform float rotation;
|
||||||
out float fragmentValue;
|
out float fragmentValue;
|
||||||
void main() {
|
void main() {
|
||||||
fragmentValue = vertexValue;
|
fragmentValue = vertexValue;
|
||||||
gl_Position = vec4(aPosition, 0.0, 1.0);
|
gl_Position = vec4(aPosition.x * sin(rotation), aPosition.y, 0.0, 1.0);
|
||||||
}
|
}
|
Loading…
Reference in New Issue