Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <GLFW/glfw3.h>
- #include <stdlib.h>
- #include <stdio.h>
- static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
- {
- if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
- glfwSetWindowShouldClose(window, GL_TRUE); // close program on ESC key
- }
- void setup_viewport(GLFWwindow* window)
- {
- /*
- float ratio;
- int width, height;
- glfwGetFramebufferSize(window, &width, &height);
- ratio = width / (float) height;
- glViewport(0, 0, width, height);
- */
- glClear(GL_COLOR_BUFFER_BIT);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho(-10, 10, -10, 10, 1.f, -1.f);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- }
- void grid(int baris, int kolom)
- {
- int i;
- int kiri = -kolom/2; //batas kiri x
- int kanan = kolom/2; //batas kanan x
- int bawah = -baris/2; //batas bawah y
- int atas = baris/2; //batas atas y
- glColor3f(0.5,0.5,0.5);
- glBegin(GL_LINES);
- //Baris digambar dari atas ke bawah
- for(i=0;i<baris+1;i++){
- glVertex2f( kiri, baris/2-i);
- glVertex2f(kanan, baris/2-i);
- }
- //Kolom digambar dari kanan ke kiri
- for(i=0;i<kolom+1;i++){
- glVertex2f(kolom/2-i, bawah);
- glVertex2f(kolom/2-i, atas);
- }
- //Garis tengah
- glColor3f(0.8,0.8,0.8);
- glVertex2f(kiri,0);
- glVertex2f(kanan,0);
- glVertex2f(0,bawah);
- glVertex2f(0, atas);
- glEnd();
- }
- void rectangle(float a, float b){
- a/=2;
- b/=2;
- glBegin(GL_POLYGON);
- glVertex2f(a,b);
- glVertex2f(-a,b);
- glVertex2f(-a,-b);
- glVertex2f(a, -b);
- glEnd();
- }
- void sail()
- {
- int height=8;
- int width=2;
- glColor3ub(153,44,0);
- rectangle(width,height);
- width=width/2;
- glColor3ub(243,134,48);
- glLineWidth(5);
- for(int i=2; i<height-2; i++)
- {
- glBegin(GL_LINE_LOOP);
- glVertex2f( width,-height + i*2);
- glVertex2f(-width,-height + i*2);
- glVertex2f(-width,-height + (i+1)*2);
- glVertex2f( width,-height + (i+1)*2);
- glEnd();
- }
- glLineWidth(1);
- }
- void kincir()
- {
- glPushMatrix();
- glTranslatef(0,5,0);
- sail();
- glTranslatef(0,-10,0);
- sail();
- glRotatef(90,0,0,1);
- glTranslatef(5,-5,0);
- sail();
- glTranslatef(0,10,0);
- sail();
- }
- float sudut = 0.0;
- void display()
- {
- grid(20,20);
- glPushMatrix();
- glRotatef(sudut,0,0,1);
- kincir();
- glPopMatrix();
- sudut += 1;
- }
- int main(void)
- {
- GLFWwindow* window;
- if (!glfwInit()) exit(EXIT_FAILURE);
- window = glfwCreateWindow(500, 500, "Kincir", NULL, NULL);
- if (!window)
- {
- glfwTerminate();
- exit(EXIT_FAILURE);
- }
- glfwMakeContextCurrent(window);
- glfwSwapInterval(1);
- glfwSetKeyCallback(window, key_callback);
- while (!glfwWindowShouldClose(window))
- {
- setup_viewport(window);
- display();
- glfwSwapBuffers(window);
- glfwPollEvents();
- }
- glfwDestroyWindow(window);
- glfwTerminate();
- exit(EXIT_SUCCESS);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement