- OpenGLContext
- PyOpenGL
- PyVRML97
- pillow
Source Code :
from OpenGLContext import testingcontext
from random import randrange
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
def init():
glClearColor(0.0, 0.0, 0.0, 0.0)
gluOrtho2D(-10.0, 100.0, -100.0, 10.0)
def ploting():
glClear(GL_COLOR_BUFFER_BIT)
# Cerobong Atas
glColor3f(0.5, 0.5, 0.5)
glBegin(GL_POLYGON)
glVertex2f(15.5, -5.0)
glVertex2f(24.0, -5.0)
glVertex2f(24.0, -3.5)
glVertex2f(9.0, -3.5)
glVertex2f(9.0, -5.0)
glEnd()
glFlush()
# Badan Cerobong
glColor3f(1.0, 0.0, 0.0)
glBegin(GL_POLYGON)
glVertex2f(12.5, -20.0)
glVertex2f(12.5, -5.0)
glVertex2f(20.0, -5.0)
glVertex2f(20.0, -13.0)
glEnd()
glFlush()
# Atap Rumah
glColor3f(1.0, 0.5, 0.6)
glBegin(GL_LINE_STRIP)
glVertex2f(5.0, -30.0)
glVertex2f(2.0, -30.0)
glVertex2f(40.0, 6.0)
glVertex2f(78.0, -30.0)
glVertex2f(75.0,-30.0)
glEnd()
glFlush()
# Bangunan
glColor3f(0.1, 0.1, 0.1)
glBegin(GL_POLYGON)
glVertex2f(5.0, -30.0)
glVertex2f(40.0, 2.0)
glVertex2f(75.0, -30.0)
glVertex2f(75.0, -70.0)
glVertex2f(5.0,-70.0)
glVertex2f(5.0,-30.0)
glEnd()
glFlush()
# Jendela Kiri
glColor3f(1.0, 0.5, 0.5)
glBegin(GL_LINE_STRIP)
glVertex2f(15.0, -47.0)
glVertex2f(25.0, -47.0)
glVertex2f(25.0, -57.0)
glVertex2f(15.0, -57.0)
glVertex2f(15.0,-47.0)
glEnd()
glFlush()
# Jendela Kiri segi
glColor3f(1.0, 1.0, 1.0)
glBegin(GL_LINE_STRIP)
glVertex2f(20.0, -47.0)
glVertex2f(20.0, -50.0)
glVertex2f(25.0, -50.0)
glEnd()
glFlush()
# Jendela Kiri bawah
glColor3f(1.0, 1.0, 1.0)
glBegin(GL_LINE_STRIP)
glVertex2f(20.0, -50.0)
glVertex2f(20.0, -57.0)
glEnd()
glFlush()
# Jendela Atas
glColor3f(1.0, 0.25, 0.6)
glBegin(GL_LINE_STRIP)
glVertex2f(35.0, -20.0)
glVertex2f(45.0, -20.0)
glVertex2f(45.0, -30.0)
glVertex2f(35.0, -30.0)
glVertex2f(35.0,-20.0)
glEnd()
glFlush()
# Jendela Atas segi
glColor3f(1.0, 1.0, 1.0)
glBegin(GL_LINE_STRIP)
glVertex2f(40.0, -20.0)
glVertex2f(40.0, -23.0)
glVertex2f(45.0, -23.0)
glEnd()
glFlush()
# Jendela Atas bawah
glColor3f(1.0, 1.0, 1.0)
glBegin(GL_LINE_STRIP)
glVertex2f(40.0, -23.0)
glVertex2f(40.0, -30.0)
glEnd()
glFlush()
# Jendela Kanan
glColor3f(1.0, 0.0, 0.0)
glBegin(GL_LINE_STRIP)
glVertex2f(55.0, -47.0)
glVertex2f(65.0, -47.0)
glVertex2f(65.0, -57.0)
glVertex2f(55.0, -57.0)
glVertex2f(55.0,-47.0)
glEnd()
glFlush()
# Jendela Kanan segi
glColor3f(1.0, 1.0, 1.0)
glBegin(GL_LINE_STRIP)
glVertex2f(60.0, -47.0)
glVertex2f(60.0, -50.0)
glVertex2f(65.0, -50.0)
glEnd()
glFlush()
# Jendela Kanan bawah
glColor3f(1.0, 1.0, 1.0)
glBegin(GL_LINE_STRIP)
glVertex2f(60.0, -50.0)
glVertex2f(60.0, -57.0)
glEnd()
glFlush()
# Bagian Atas Pintu 1
glColor3f(1.0, 0.5, 0.25)
glBegin(GL_POLYGON)
glVertex2f(36.0, -44.0)
glVertex2f(44.0, -44.0)
glVertex2f(44.0, -46.0)
glVertex2f(36.0, -46.0)
glVertex2f(36.0,-44.0)
glEnd()
glFlush()
# Bagian Atas Pintu 2
glColor3f(1.0, 0.5, 0.9)
glBegin(GL_POLYGON)
glVertex2f(35.0, -46.0)
glVertex2f(45.0, -46.0)
glVertex2f(45.0, -48.0)
glVertex2f(35.0, -48.0)
glVertex2f(35.0,-46.0)
glEnd()
glFlush()
# Bagian Atas Pintu 3
glColor3f(1.0, 0.5, 0.5)
glBegin(GL_POLYGON)
glVertex2f(33.0, -48.0)
glVertex2f(47.0, -48.0)
glVertex2f(47.0, -50.0)
glVertex2f(33.0, -50.0)
glVertex2f(33.0,-48.0)
glEnd()
glFlush()
# Pintu
glColor3f(1.0, 0.0, 0.0)
glBegin(GL_POLYGON)
glVertex2f(35.0, -50.0)
glVertex2f(45.0, -50.0)
glVertex2f(45.0, -70.0)
glVertex2f(35.0, -70.0)
glVertex2f(35.0,-50.0)
glEnd()
glFlush()
# Pondasi Bawah
glColor3f(0.5, 0.5, 0.5)
glBegin(GL_POLYGON)
glVertex2f(2.0, -70.0)
glVertex2f(78.0, -70.0)
glVertex2f(78.0, -73.0)
glVertex2f(2.0, -73.0)
glVertex2f(2.0,-70.0)
glEnd()
glFlush()
# Tangga Pertama
glColor3f(1.0, 1.0, 1.0)
glBegin(GL_POLYGON)
glVertex2f(34.0, -69.0)
glVertex2f(46.0, -69.0)
glVertex2f(46.0, -70.5)
glVertex2f(34.0, -70.5)
glVertex2f(34.0,-69.0)
glEnd()
glFlush()
# Tangga kedua
glColor3f(1.0, 0.0, 0.0)
glBegin(GL_POLYGON)
glVertex2f(33.0, -70.5)
glVertex2f(47.0, -70.5)
glVertex2f(47.0, -72.0)
glVertex2f(33.0, -72.0)
glVertex2f(33.0,-70.5)
glEnd()
glFlush()
# Tangga ketiga
glColor3f(1.0, 1.0, 1.0)
glBegin(GL_POLYGON)
glVertex2f(32.0, -72)
glVertex2f(48.0, -72)
glVertex2f(48.0, -73.5)
glVertex2f(32.0, -73.5)
glVertex2f(32.0,-72)
glEnd()
glFlush()
# Tangga C 1
glColor3f(1.0, 1.0, 1.0)
glBegin(GL_LINE_STRIP)
glVertex2f(32.0, -72)
glVertex2f(48.0, -72)
glVertex2f(48.0, -73.5)
glVertex2f(32.0, -73.5)
glVertex2f(32.0,-72)
glEnd()
glFlush()
def drawBitmapText(string,x,y,z) :
glRasterPos3f(x,y,z)
for text in string :
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,ord(text))
def reshape(w, h):
glViewport(0,0,w,h)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluOrtho2D(0,w,h,0)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
# Fungsi untuk mendapatkan callback event handling Pada Mouse
def input_mouse(button, state, x, y):
global merah, hijau, biru
global bg_red, bg_green, bg_blue
global light_red, light_green, light_blue
global kt_red, kt_green, kt_blue
# Fungsi untuk mendapatkan callback event handling Pada Keyboard Tombol khusus
def input_keyboard_special_func(key,x,y):
global pos_x, pos_y
global warna_background
global teks_merah, teks_hijau, teks_biru
# Untuk mengubah posisi Rumahku dengan menekan
# Tombol Key UP, Key DOWN, Key RIGHT, Key LEFT
# saat ditekan nilai pada variable pos_x dan pos_y
# akan berubah secara increment dan decremant dengan pertambahan 20
if key == GLUT_KEY_UP:
pos_y += 20
print("Tombol Atas ditekan ", "x : ", pos_x, " y : ", pos_y)
print("Koor ", "x : ", koordinat_x, " y : ", koordinat_y)
elif key == GLUT_KEY_DOWN:
pos_y -= 20
print("Tombol Bawah ditekan ", "x : ", pos_x, " y : ", pos_y)
print("Koor ", "x : ", koordinat_x, " y : ", koordinat_y)
elif key == GLUT_KEY_RIGHT:
pos_x += 20
print("Tombol Kanan ditekan ", "x : ", pos_x, " y : ", pos_y)
print("Koor ", "x : ", koordinat_x, " y : ", koordinat_y)
elif key == GLUT_KEY_LEFT:
pos_x -= 20
print("Tombol Kiri ditekan ", "x : ", pos_x, " y : ", pos_y)
print("Koor ", "x : ", koordinat_x, " y : ", koordinat_y)
# Fungsi untuk mendapatkan callback event handling Pada Keyboard Tombol yang akan mengembalikan nilai ascii
def input_keyboard_func(key, x, y):
global zoom_x, zoom_y
global rotation
dk = key.decode("utf-8")
# Untuk mengatur Zoom In & Out pada gambar Tekan tombol a / s
# Maka variable zoom_x dan zoom_y
# akan berubah secara increment dan decrement
# dengan pertamban 0.1
if dk == 'a' or dk == 'A':
zoom_x += 0.1
zoom_y += 0.1
elif dk == 's' or dk == 'S':
zoom_x -= 0.1
zoom_y -= 0.1
# Untuk mengatur Rotasi ke kanan / kiri pada gambar Tekan tombol z / x
# Maka variable rotation akan berubah secara increment dan decrement
# dengan pertamban 10
elif dk == 'z' or dk == 'Z':
rotation -= 10
print(rotation)
elif dk == 'x' or dk == 'X':
rotation += 10
print(rotation)
def update(value):
global koordinat_x, koordinat_y, pos_x, pos_y
global angka
global kt
global kt_red, kt_green, kt_blue
# Untuk mengatur posisi kotak
# Secara Randaom
koordinat_x = randrange(-800,100)
koordinat_y = randrange(-100,800)
# Untuk mendapatkan Poin
# atau nilai koor_x, koor_y sama dengan pos_x, pos_y
# Fungsi untuk menampilkan Teks Pada Window
def drawText():
glColor3f(teks_merah,teks_hijau,teks_biru)
# Petunjuk Pemakaia
drawBitmapText("GAMBAR : ",-460,440,0)
drawBitmapText("Rumahku",-460,400,0)
# Kontrol
drawBitmapText("KONTROL :",-460,-200,0)
drawBitmapText("- Untuk Scaling Tekan tombol => a/s a = zoom in, s = zoom out",-460,-240,0)
drawBitmapText("- Untuk rotasi tekan tombol => z/x z = searah jarum jam, x = berlawanan",-460,-280,0)
#INFORMASI
drawBitmapText("INFORMASI : " ,-460,-320,0)
drawBitmapText("-> Ganti Warna Klik Mouse Kanan dan Kiri",-460,-360,0)
drawBitmapText("-> Untuk Menjalankan Objek Tekan Keyboard => KEY UP, KEY DOWN, KEY RIGHT, KEY LEFT " ,-460,-400,0)
drawBitmapText("-> Angka => " + str(angka),-460,-440,0)
# Fungsi untuk menampilkan semua bentuk atau objek pada Window
def display():
glClear(GL_COLOR_BUFFER_BIT)
# Deklarasi Sektsa Rumahku
glPushMatrix()
shape()
glPopMatrix()
# Deklarasi Bentuk Kotak
kotak()
# Deklarasi untuk Teks
drawText()
glFlush()
def main():
glutInit(sys.argv)
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB)
glutInitWindowSize(900,600)
glutInitWindowPosition(100,100)
glutCreateWindow(" Pertemuan 10 . Quiz - Rumahku")
glutSpecialFunc(input_keyboard_special_func)
glutKeyboardFunc(input_keyboard_func)
glutMouseFunc(input_mouse)
glutTimerFunc(50, update, 0)
glutDisplayFunc(ploting)
init()
glutMainLoop()
main()