Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as C++ by Winarto ( 8 years ago )
#version 330 core
uniform vec2 viewDimensions;
uniform float outerRadius;
uniform vec4 customColor;
out vec4 outColor;
void main(){
float x = (gl_FragCoord.x - (viewDimensions.x / 2.0f)) / (viewDimensions.x / 2.0f);
float y = (gl_FragCoord.y - (viewDimensions.y / 2.0f)) / (viewDimensions.y / 2.0f);
float len = sqrt((x * x) + (y * y));
if(len > outerRadius) {
discard;
}
outColor = customColor;
}
#include <glad>
#include <GLFW>
#include <glm>
#include <glm>
#include <glm>
#include <Winarto>
#include <iostream>
/*
LEFT ARROW -> SLOW DOWN ANIMATION
RIGHT ARROW -> SPEED UP ANIMATION
*/
void processInput(GLFWwindow* window);
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
float speedMultiply = 1.0f;
int main() {
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
GLFWwindow *window = glfwCreateWindow(800, 600, "Tugas GaIB 3", NULL, NULL);
glfwMakeContextCurrent(window);
gladLoadGLLoader((GLADloadproc)glfwGetProcAddress);
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
glViewport(0, 0, 800, 600);
//Shader Program
Shader prog("vertDefaultShader.vert", "fragDefaultShader.frag");
Shader circleProg("vertDefaultShader.vert", "CircleFragmentShader.frag");
//List of all vertices
float lineVert[] = {
0.0f, 0.3f, 0.0f,
0.3f, 0.3f, 0.0f,
};
float vert[] = {
-0.15f, 0.0f, 0.0f,
0.15f, 0.0f, 0.0f,
-0.15f, -0.7f, 0.0f,
0.15f, -0.7f, 0.0f,
-0.15f, 0.6f, 0.0f,
0.15f, 0.6f, 0.0f,
-0.3f , 0.15f, 0.0f,
0.3f , 0.15f, 0.0f,
-0.3f , 0.45f, 0.0f,
0.3f , 0.45f, 0.0f,
0.0f , 0.3f , 0.0f
};
unsigned int quadIndices[] = {
4, 5, 2,
2, 3, 5
};
unsigned int octaIndices[] = {
10, 9, 7, 1, 0, 6, 8, 4, 5, 9
};
unsigned int lineVAO, lineVBO, quadVAO, quadVBO, quadEBO, octaVAO, octaEBO;
//Generate all VAOs & VBOs
glGenVertexArrays(1, &lineVAO);
glGenVertexArrays(1, &quadVAO);
glGenVertexArrays(1, &octaVAO);
glGenBuffers(1, &lineVBO);
glGenBuffers(1, &quadVBO);
glGenBuffers(1, &quadEBO);
glGenBuffers(1, &octaEBO);
//Line object
glBindVertexArray(lineVAO);
glBindBuffer(GL_ARRAY_BUFFER, lineVBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(lineVert), lineVert, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
//Quad object
glBindVertexArray(quadVAO);
glBindBuffer(GL_ARRAY_BUFFER, quadVBO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, quadEBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(quadIndices), quadIndices, GL_STATIC_DRAW);
glBufferData(GL_ARRAY_BUFFER, sizeof(vert), vert, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
glBindVertexArray(octaVAO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, octaEBO);
glBindBuffer(GL_ARRAY_BUFFER, quadVBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(octaIndices), octaIndices, GL_STATIC_DRAW);
glBufferData(GL_ARRAY_BUFFER, sizeof(vert), vert, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
glBindVertexArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
unsigned int colorLoc = glGetUniformLocation(prog.ID, "customColor");
unsigned int transformLoc = glGetUniformLocation(prog.ID, "transform");
unsigned int circleColorLoc = glGetUniformLocation(circleProg.ID, "customColor");
unsigned int circleTransformLoc = glGetUniformLocation(circleProg.ID, "transform");
unsigned int circleViewLoc = glGetUniformLocation(circleProg.ID, "viewDimensions");
unsigned int circleOuterRadiusLoc = glGetUniformLocation(circleProg.ID, "outerRadius");
while (!glfwWindowShouldClose(window)) {
processInput(window);
glClearColor(0.1f, 0.5f, 0.5f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
prog.use();
glm::mat4 quadTrans;
float scaleAmount = (glm::abs(sin((float)glfwGetTime()*speedMultiply)) + 0.5f);
quadTrans = glm::scale(quadTrans, glm::vec3(scaleAmount, 1.0f, 1.0f));
glUniform4f(colorLoc, 1.0f, 0.7f, 0.3f, 1.0f);
glUniformMatrix4fv(transformLoc, 1, GL_FALSE, glm::value_ptr(quadTrans));
glBindVertexArray(quadVAO);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
glm::mat4 octaTrans;
octaTrans = glm::translate(octaTrans, glm::vec3(0.0f, 0.3f, 0.0f));
octaTrans = glm::rotate(octaTrans, glm::radians((float)glfwGetTime()*15.0f*speedMultiply), glm::vec3(0.0f, 0.0f, -1.0f));
octaTrans = glm::translate(octaTrans, glm::vec3(0.0f, -0.3f, 0.0f));
glUniformMatrix4fv(transformLoc, 1, GL_FALSE, glm::value_ptr(octaTrans));
glUniform4f(colorLoc, 0.4f, 0.3f, 0.2f, 1.0f);
glBindVertexArray(octaVAO);
glDrawElements(GL_TRIANGLE_FAN, 10, GL_UNSIGNED_INT, 0);
glm::mat4 lineTrans;
lineTrans = glm::translate(lineTrans, glm::vec3(0.0f, 0.3f, 0.0f));
lineTrans = glm::rotate(lineTrans, glm::radians((float)glfwGetTime() * 15.0f * speedMultiply), glm::vec3(0.0f, 0.0f, 1.0f));
lineTrans = glm::translate(lineTrans, glm::vec3(0.0f, -0.3f, 0.0f));
glUniformMatrix4fv(transformLoc, 1, GL_FALSE, glm::value_ptr(lineTrans));
glUniform4f(colorLoc, 1.0f, 1.0f, 0.0f, 1.0f);
glBindVertexArray(lineVAO);
glDrawArrays(GL_LINE_STRIP, 0, 2);
glLineWidth(5.0f);
circleProg.use();
glm::mat4 circleTrans;
float circleScale = cos(glfwGetTime()*speedMultiply);
circleTrans = glm::scale(circleTrans, glm::vec3(circleScale, circleScale * 3.0f/13.0f, circleScale));
glUniform2f(circleViewLoc, 800.0f, 600.0f);
glUniformMatrix4fv(circleTransformLoc, 1, GL_FALSE, glm::value_ptr(circleTrans));
glUniform4f(circleColorLoc, 1.0f, 1.0f, 0.0f, 1.0f);
glUniform1f(circleOuterRadiusLoc, 0.15f);
glBindVertexArray(quadVAO);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}
void processInput(GLFWwindow* window) {
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
if (glfwGetKey(window, GLFW_KEY_RIGHT) == GLFW_PRESS)
speedMultiply = (speedMultiply < 2 xss=removed xss=removed> 0.1f) ? (speedMultiply - 0.001f) : speedMultiply;
}
void framebuffer_size_callback(GLFWwindow* window, int width, int height) {
glViewport(0, 0, width, height);
}
Revise this Paste