Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // main.cpp
- // OpenGL-06
- //
- // Created by Alexander Kevin on 5/24/16.
- // Copyright © 2016 Alexander Kevin. All right reserved.
- //
- //CASE LINK : https://www.dropbox.com/s/hbisb17di5p9yfq/T00740020220154042Tugas%20dan%20Latihan%205.doc?dl=0
- //.exe LINK : https://www.dropbox.com/s/umewwn109ba4tuq/OpenGL-06?dl=0
- #ifdef WIN32
- #include <windows.h>
- #endif
- #include <stdlib.h>
- #include <iostream>
- #include <fstream>
- #ifdef __APPLE__
- #include <GLUT/glut.h>
- #include <OpenGL/gl.h>
- #include <OpenGL/glu.h>
- #else
- #include <GL/glut.h>
- #include <GL/glu.h>
- #include <GL/gl.h>
- #endif
- GLfloat light_diffuse[] = {1.0, 0.0, 1.0, 1.0}; /* warna merah 1. */
- GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0};
- GLfloat light_diffuse2[] = {1.0, 1.0, 1.0, 1.0}; /* warna merah 2. */
- GLfloat light_position2[] = {1.0, 0, 1.0, 0.0};
- GLfloat light_diffuse3[] = {1.0, 1, 0.5, 1.0}; /* warna merah 3. */
- GLfloat light_position3[] = {1.0, 1.0, 0, 0.0};
- GLfloat light_diffuse4[] = {1.0, 1, 0, 1.0}; /* warna merah 4. */
- GLfloat light_position4[] = {0, 1.0, 1.0, 0.0};
- GLfloat n[6][3] = { /* secara normal kubus ada 6 muka. */
- {-1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {1.0, 0.0, 0.0}, {0.0, -1.0, 0.0}, {0.0, 0.0, 1.0}, {0.0, 0.0, -1.0} };
- GLint faces[6][4] = { {0, 1, 2, 3}, {3, 2, 6, 7}, {7, 6, 5, 4}, {4, 5, 1, 0}, {5, 6, 2, 1}, {7, 4, 0, 3} };
- GLfloat v[8][3];
- GLfloat v6kiri[8][3];
- GLfloat v6bawah[8][3];
- GLfloat v6kanan[8][3];
- GLfloat v6atas[8][3];
- GLfloat v9kanan[8][3];
- GLfloat v9atas[8][3];
- GLfloat v9kiri[8][3];
- GLfloat v9bawah[8][3];
- int flag;
- void changeColor(int);
- void drawOne(void)
- {
- int i;
- for (i = 0; i < 6; i++)
- {
- glBegin(GL_QUADS);
- glNormal3fv(&n[i][0]);
- glVertex3fv(&v[faces[i][0]][0]);
- glVertex3fv(&v[faces[i][1]][0]);
- glVertex3fv(&v[faces[i][2]][0]);
- glVertex3fv(&v[faces[i][3]][0]);
- // printf("%d %d %d %d\n",faces[i][0],faces[i][1],faces[i][2],faces[i][3]);
- // printf("%.2f %.2f %.2f\n",n[i][0],n[i][1],n[i][2]);
- // printf("%.2f %.2f %.2f\n",v[faces[i][0]][0],v[faces[i][0]][1],v[faces[i][0]][2]);
- // printf("%.2f %.2f %.2f\n",v[faces[i][1]][0],v[faces[i][1]][1],v[faces[i][1]][2]);
- // printf("%.2f %.2f %.2f\n",v[faces[i][2]][0],v[faces[i][2]][1],v[faces[i][2]][2]);
- // printf("%.2f %.2f %.2f\n\n\n",v[faces[i][3]][0],v[faces[i][3]][1],v[faces[i][3]][2]);
- glEnd();
- }
- }
- void drawSix(void)
- {
- int i;
- for (i = 0; i < 6; i++)
- {
- glBegin(GL_QUADS);
- glNormal3fv(&n[i][0]);
- glVertex3fv(&v6kiri[faces[i][0]][0]);
- glVertex3fv(&v6kiri[faces[i][1]][0]);
- glVertex3fv(&v6kiri[faces[i][2]][0]);
- glVertex3fv(&v6kiri[faces[i][3]][0]);
- glEnd();
- }
- for (i = 0; i < 6; i++)
- {
- glBegin(GL_QUADS);
- glNormal3fv(&n[i][0]);
- glVertex3fv(&v6bawah[faces[i][0]][0]);
- glVertex3fv(&v6bawah[faces[i][1]][0]);
- glVertex3fv(&v6bawah[faces[i][2]][0]);
- glVertex3fv(&v6bawah[faces[i][3]][0]);
- glEnd();
- }
- for (i = 0; i < 6; i++)
- {
- glBegin(GL_QUADS);
- glNormal3fv(&n[i][0]);
- glVertex3fv(&v6kanan[faces[i][0]][0]);
- glVertex3fv(&v6kanan[faces[i][1]][0]);
- glVertex3fv(&v6kanan[faces[i][2]][0]);
- glVertex3fv(&v6kanan[faces[i][3]][0]);
- glEnd();
- }
- for (i = 0; i < 6; i++)
- {
- glBegin(GL_QUADS);
- glNormal3fv(&n[i][0]);
- glVertex3fv(&v6atas[faces[i][0]][0]);
- glVertex3fv(&v6atas[faces[i][1]][0]);
- glVertex3fv(&v6atas[faces[i][2]][0]);
- glVertex3fv(&v6atas[faces[i][3]][0]);
- glEnd();
- }
- }
- void drawNine(void)
- {
- int i;
- for (i = 0; i < 6; i++)
- {
- glBegin(GL_QUADS);
- glNormal3fv(&n[i][0]);
- glVertex3fv(&v9kanan[faces[i][0]][0]);
- glVertex3fv(&v9kanan[faces[i][1]][0]);
- glVertex3fv(&v9kanan[faces[i][2]][0]);
- glVertex3fv(&v9kanan[faces[i][3]][0]);
- glEnd();
- }
- for (i = 0; i < 6; i++)
- {
- glBegin(GL_QUADS);
- glNormal3fv(&n[i][0]);
- glVertex3fv(&v9atas[faces[i][0]][0]);
- glVertex3fv(&v9atas[faces[i][1]][0]);
- glVertex3fv(&v9atas[faces[i][2]][0]);
- glVertex3fv(&v9atas[faces[i][3]][0]);
- glEnd();
- }
- for (i = 0; i < 6; i++)
- {
- glBegin(GL_QUADS);
- glNormal3fv(&n[i][0]);
- glVertex3fv(&v9kiri[faces[i][0]][0]);
- glVertex3fv(&v9kiri[faces[i][1]][0]);
- glVertex3fv(&v9kiri[faces[i][2]][0]);
- glVertex3fv(&v9kiri[faces[i][3]][0]);
- glEnd();
- }
- for (i = 0; i < 6; i++)
- {
- glBegin(GL_QUADS);
- glNormal3fv(&n[i][0]);
- glVertex3fv(&v9bawah[faces[i][0]][0]);
- glVertex3fv(&v9bawah[faces[i][1]][0]);
- glVertex3fv(&v9bawah[faces[i][2]][0]);
- glVertex3fv(&v9bawah[faces[i][3]][0]);
- glEnd();
- }
- }
- void soalsatu(){
- drawOne();
- drawSix();
- drawNine();
- }
- void display(void)
- {
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- soalsatu();
- glutSwapBuffers();
- }
- void init(void)
- {
- /* pengaturan data vertek 1. */
- v[0][0] = v[1][0] = v[2][0] = v[3][0] = -1.5;//batas kiri
- v[4][0] = v[5][0] = v[6][0] = v[7][0] = -1;//batas kanan
- v[0][1] = v[1][1] = v[4][1] = v[5][1] = -0.5;//kedalam belakang
- v[2][1] = v[3][1] = v[6][1] = v[7][1] = 0.5;//kedalaman depan
- v[0][2] = v[3][2] = v[4][2] = v[7][2] = 1;//batas atas
- v[1][2] = v[2][2] = v[5][2] = v[6][2] = -1;//batas bawah/
- /* pengaturan data vertek 6. */
- v6kiri[0][0] = v6kiri[1][0] = v6kiri[2][0] = v6kiri[3][0] = -0.5;//batas kiri
- v6kiri[4][0] = v6kiri[5][0] = v6kiri[6][0] = v6kiri[7][0] = 0;//batas kanan
- v6kiri[0][1] = v6kiri[1][1] = v6kiri[4][1] = v6kiri[5][1] = -0.5;//kedalam belakang
- v6kiri[2][1] = v6kiri[3][1] = v6kiri[6][1] = v6kiri[7][1] = 0.5;//kedalaman depan
- v6kiri[0][2] = v6kiri[3][2] = v6kiri[4][2] = v6kiri[7][2] = 1;//batas atas
- v6kiri[1][2] = v6kiri[2][2] = v6kiri[5][2] = v6kiri[6][2] = -1;//batas bawah/
- v6bawah[0][0] = v6bawah[1][0] = v6bawah[2][0] = v6bawah[3][0] = 0;//batas kiri
- v6bawah[4][0] = v6bawah[5][0] = v6bawah[6][0] = v6bawah[7][0] = 0.5;//batas kanan
- v6bawah[0][1] = v6bawah[1][1] = v6bawah[4][1] = v6bawah[5][1] = -0.5;//kedalam belakang
- v6bawah[2][1] = v6bawah[3][1] = v6bawah[6][1] = v6bawah[7][1] = 0.5;//kedalaman depan
- v6bawah[0][2] = v6bawah[3][2] = v6bawah[4][2] = v6bawah[7][2] = 1;//batas atas
- v6bawah[1][2] = v6bawah[2][2] = v6bawah[5][2] = v6bawah[6][2] = 0.75;//batas bawah
- v6kanan[0][0] = v6kanan[1][0] = v6kanan[2][0] = v6kanan[3][0] = 0.25;//batas kiri
- v6kanan[4][0] = v6kanan[5][0] = v6kanan[6][0] = v6kanan[7][0] = 0.5;//batas kanan
- v6kanan[0][1] = v6kanan[1][1] = v6kanan[4][1] = v6kanan[5][1] = -0.5;//kedalam belakang
- v6kanan[2][1] = v6kanan[3][1] = v6kanan[6][1] = v6kanan[7][1] = 0.5;//kedalaman depan
- v6kanan[0][2] = v6kanan[3][2] = v6kanan[4][2] = v6kanan[7][2] = 0.25;//batas atas
- v6kanan[1][2] = v6kanan[2][2] = v6kanan[5][2] = v6kanan[6][2] = 0.75;//batas bawah
- v6atas[0][0] = v6atas[1][0] = v6atas[2][0] = v6atas[3][0] = 0;//batas kiri
- v6atas[4][0] = v6atas[5][0] = v6atas[6][0] = v6atas[7][0] = 0.5;//batas kanan
- v6atas[0][1] = v6atas[1][1] = v6atas[4][1] = v6atas[5][1] = -0.5;//kedalam belakang
- v6atas[2][1] = v6atas[3][1] = v6atas[6][1] = v6atas[7][1] = 0.5;//kedalaman depan
- v6atas[0][2] = v6atas[3][2] = v6atas[4][2] = v6atas[7][2] = 0.25;//batas atas
- v6atas[1][2] = v6atas[2][2] = v6atas[5][2] = v6atas[6][2] = 0;//batas bawah
- /* pengaturan data vertek 9. */
- v9kanan[0][0] = v9kanan[1][0] = v9kanan[2][0] = v9kanan[3][0] = 1.25;//batas kiri
- v9kanan[4][0] = v9kanan[5][0] = v9kanan[6][0] = v9kanan[7][0] = 1.75;//batas kanan
- v9kanan[0][1] = v9kanan[1][1] = v9kanan[4][1] = v9kanan[5][1] = -0.5;//kedalam belakang
- v9kanan[2][1] = v9kanan[3][1] = v9kanan[6][1] = v9kanan[7][1] = 0.5;//kedalaman depan
- v9kanan[0][2] = v9kanan[3][2] = v9kanan[4][2] = v9kanan[7][2] = 1;//batas atas
- v9kanan[1][2] = v9kanan[2][2] = v9kanan[5][2] = v9kanan[6][2] = -1;//batas bawah/
- v9atas[0][0] = v9atas[1][0] = v9atas[2][0] = v9atas[3][0] = 0.75;//batas kiri
- v9atas[4][0] = v9atas[5][0] = v9atas[6][0] = v9atas[7][0] = 1.25;//batas kanan
- v9atas[0][1] = v9atas[1][1] = v9atas[4][1] = v9atas[5][1] = -0.5;//kedalam belakang
- v9atas[2][1] = v9atas[3][1] = v9atas[6][1] = v9atas[7][1] = 0.5;//kedalaman depan
- v9atas[0][2] = v9atas[3][2] = v9atas[4][2] = v9atas[7][2] = -1;//batas atas
- v9atas[1][2] = v9atas[2][2] = v9atas[5][2] = v9atas[6][2] = -0.75;//batas bawah
- v9kiri[0][0] = v9kiri[1][0] = v9kiri[2][0] = v9kiri[3][0] = 0.75;//batas kiri
- v9kiri[4][0] = v9kiri[5][0] = v9kiri[6][0] = v9kiri[7][0] = 1;//batas kanan
- v9kiri[0][1] = v9kiri[1][1] = v9kiri[4][1] = v9kiri[5][1] = -0.5;//kedalam belakang
- v9kiri[2][1] = v9kiri[3][1] = v9kiri[6][1] = v9kiri[7][1] = 0.5;//kedalaman depan
- v9kiri[0][2] = v9kiri[3][2] = v9kiri[4][2] = v9kiri[7][2] = -0.75;//batas atas
- v9kiri[1][2] = v9kiri[2][2] = v9kiri[5][2] = v9kiri[6][2] = -0.25;//batas bawah
- v9bawah[0][0] = v9bawah[1][0] = v9bawah[2][0] = v9bawah[3][0] = 0.75;//batas kiri
- v9bawah[4][0] = v9bawah[5][0] = v9bawah[6][0] = v9bawah[7][0] = 1.25;//batas kanan
- v9bawah[0][1] = v9bawah[1][1] = v9bawah[4][1] = v9bawah[5][1] = -0.5;//kedalam belakang
- v9bawah[2][1] = v9bawah[3][1] = v9bawah[6][1] = v9bawah[7][1] = 0.5;//kedalaman depan
- v9bawah[0][2] = v9bawah[3][2] = v9bawah[4][2] = v9bawah[7][2] = -0.25;//batas atas
- v9bawah[1][2] = v9bawah[2][2] = v9bawah[5][2] = v9bawah[6][2] = 0;//batas bawah
- /* meng-Enable-kan pencahayaan OpenGL single. */
- changeColor(1);
- /* mengatur penglihatan kubus. */
- glMatrixMode(GL_PROJECTION);
- /* sudut pandangan, aspek ratio, kedekatan Z, jauh Z */
- gluPerspective(40.0,1.0, 1.0, 10.0);
- glMatrixMode(GL_MODELVIEW);
- gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.);
- /* mengatur posisi kubus */
- glTranslatef(0.0, 0.0, -1.0);
- glRotatef(60, 1.0, 0.0, 0.0);
- glRotatef(-20, 0.0, 0.0, 1.0);
- }
- void changeColor(int flag){
- if(flag==1){
- glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
- glLightfv(GL_LIGHT0, GL_POSITION, light_position);
- }
- else if(flag==2){
- glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse2);
- glLightfv(GL_LIGHT0, GL_POSITION, light_position2);
- }
- else if(flag==3){
- glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse3);
- glLightfv(GL_LIGHT0, GL_POSITION, light_position3);
- }
- else if(flag==4){
- glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse4);
- glLightfv(GL_LIGHT0, GL_POSITION, light_position4);
- }
- glEnable(GL_LIGHT0);
- glEnable(GL_LIGHTING);
- glEnable(GL_DEPTH_TEST);
- }
- void kunci(unsigned char key, int x, int y)
- {
- static int rot=0;
- flag=1;
- switch (key)
- {
- /* aplikasi berhenti ketika tombol q ditekan */
- case 27 :
- case 'z':
- exit(0);
- break;
- case 'q':
- glRotated(5, 0,0,1);
- break;
- case 'e':
- glRotated(-5, 0,0,1);
- break;
- case 's':
- glRotated(5, 1,0,0);
- break;
- case 'a':
- glRotated(-5, 0,1,0);
- break;
- case 'w':
- glRotated(-5, 1,0,0);
- break;
- case 'd':
- glRotated(5, 0,1,0);
- break;
- case '1':
- changeColor(1);
- break;
- case '2':
- changeColor(2);
- break;
- case '3':
- changeColor(3);
- break;
- case '4':
- changeColor(4);
- break;
- }
- glutPostRedisplay();
- }
- int main(int argc, char **argv)
- {
- printf("Welcome,\n");
- printf("Press Keyboard\n");
- printf("(1) for color and perspective 1\n");
- printf("(2) for color and perspective 2\n");
- printf("(3) for color and perspective 3\n");
- printf("(4) for color and perspective 4\n");
- printf("for x-y-rotation use standart WASD (up,left,down,right)\n");
- printf("and q for left rotate and e for right z-rotation\n");
- printf("<press z to exit>\n");
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
- glutCreateWindow("NIM");
- glutDisplayFunc(display);
- init();
- glutKeyboardFunc(kunci);
- glutMainLoop();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment