Welcome, guest! Login / Register - Why register?
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

Your Name: Code Language: