Untitled

mail@pastecode.io avatar
unknown
plain_text
a month ago
2.4 kB
2
Indexable
Never
#include <iostream>
#include <GL/glew.h>
#include <GL/freeglut.h>

// Variabel untuk menyimpan posisi, sudut rotasi, dan skala
float x_pos = 0.0f, y_pos = 0.0f;  // Posisi objek (translasi)
float angle = 0.0f;                 // Sudut rotasi
float scale = 1.0f;                 // Faktor skala

// Fungsi untuk menggambar persegi
void render() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();

    // Terapkan translasi, rotasi, dan skala
    glTranslatef(x_pos, y_pos, 0.0f);  // Translasi objek
    glRotatef(angle, 0.0f, 0.0f, 1.0f); // Rotasi objek
    glScalef(scale, scale, 1.0f);     // Skala objek

    // Gambar persegi
    glBegin(GL_QUADS);
    glColor3f(0.0f, 1.0f, 0.0f); // Hijau
    glVertex2f(-0.1f, -0.1f);
    glVertex2f(0.1f, -0.1f);
    glVertex2f(0.1f, 0.1f);
    glVertex2f(-0.1f, 0.1f);
    glEnd();

    glutSwapBuffers();
}

// Fungsi untuk menangani input dari keyboard spesial (tombol panah)
void specialInput(int key, int x, int y) {
    switch (key) {
    case GLUT_KEY_UP:
        y_pos += 0.1f;  // Pindahkan objek ke atas
        break;
    case GLUT_KEY_DOWN:
        y_pos -= 0.1f;  // Pindahkan objek ke bawah
        break;
    case GLUT_KEY_LEFT:
        x_pos -= 0.1f;  // Pindahkan objek ke kiri
        break;
    case GLUT_KEY_RIGHT:
        x_pos += 0.1f;  // Pindahkan objek ke kanan
        break;
    }
    glutPostRedisplay();
}

// Fungsi untuk menangani input dari keyboard biasa (rotasi dan skala)
void keyboard(unsigned char key, int x, int y) {
    switch (key) {
    case 'r': // Rotasi ke kanan
        angle += 5.0f;
        break;
    case 'R': // Rotasi ke kiri
        angle -= 5.0f;
        break;
    case 's': // Perbesar skala
        scale += 0.1f;
        break;
    case 'S': // Perkecil skala
        scale -= 0.1f;
        break;
    }
    glutPostRedisplay();
}

int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
    glutInitWindowSize(500, 500);
    glutCreateWindow("Translation, Rotation, Scaling");
    glutDisplayFunc(render);
    glutSpecialFunc(specialInput);   // Input keyboard khusus (tombol panah)
    glutKeyboardFunc(keyboard);      // Input keyboard biasa (rotasi dan skala)

    glewInit();
    glutMainLoop();
    return 0;
}
Leave a Comment