Menambahkan
text warna object dan background yang sedang di tampilkan.
Halo
teman-teman sudah tahu kah bahwa OpenGL tidak menyediakan dukungan untuk font
dan demikian pula untuk teks. OpenGL menyediakan fungsi untuk bitmap dan fungsi
ini dapat dipakai untuk teks. Fungsi GLUT Bitmap berikut untuk menampilkan teks
dengan model *font dan indek karakter ascii (char) :
glutBitMapCharacter(font,
char)
Untuk
menempatkan teks yang telah dibuat dengan glut bitmap atau dengan stroke
charakter, digunakan fungsi openGL berikut:
glRasterPos{234}{sifd}(x,
y, z, w)
Penjelasan
{234} merujuk pada jumlah parameter fungsi salah satu dari 2,3 atau 4,begitu
pula dengan {sifd} berarti tipe parameter single,integer,float,atau double.
Stroke
Teks Karakter
Karakter
Stroke yang dihasilkan dengan menggunakan primitive OpenGL standar, misalkan
garis, poligon, dan kurva. Karakter ini dapat dimodifikasi oleh himpunan
transformasi yang dapat
diterapkan
pada objek geometris. Membuat stroke characters menggunakan fungsi :
glutStrokeCharacter(font,
character)
Parameter
font sebagai simbolik karakter menyatakan stroke font yang dipakai
(GLUT_STROKE_ROMAN atau GLUT_STROKE_MONO_ROMAN). Sedangkan character adalah karakter
yang dibuat.
Source code sebagai berikut :
from OpenGLContext import testingcontext
from
OpenGL.GL import *
|
|
from
OpenGL.GLU import *
|
|
from
OpenGL.GLUT import *
|
|
|
|
#
Koordinat x dan y untuk posisi kotak
|
|
pos_x
= 0
|
|
pos_y
= 0
|
|
|
|
# Digunakan untuk warna kotak
|
|
merah
= 0
|
|
hijau
= 0
|
|
biru
= 0
|
|
|
|
# Digunakan untuk warna teks
|
|
teks_merah
= 1
|
|
teks_hijau
= 1
|
|
teks_biru
= 1
|
|
|
|
# Digunakan untuk teks warna pada objek
|
|
warna_objek
= "Hitam"
|
|
|
|
# Digunakan untuk teks warna pada background
|
|
warna_background
= "Hitam"
|
|
|
|
|
|
def
init():
|
|
glClearColor(0.0, 0.0, 0.0, 1.0)
|
|
gluOrtho2D(-500.0, 500.0, -500.0, 500.0)
|
|
|
|
def
drawBitmapText(string,x,y,z) :
|
|
glRasterPos3f(x,y,z)
|
|
for c in string :
|
|
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,ord(c))
|
|
|
|
def
reshape(w, h):
|
|
glViewport(0,0,w,h)
|
|
glMatrixMode(GL_PROJECTION)
|
|
glLoadIdentity()
|
|
gluOrtho2D(0,w,h,0)
|
|
glMatrixMode(GL_MODELVIEW)
|
|
glLoadIdentity()
|
|
|
|
def
drawText():
|
|
glColor3f(teks_merah,teks_hijau,teks_biru)
|
|
drawBitmapText("Warna",-460,-350,0)
|
|
drawBitmapText("Objek : " + warna_objek,-460,-400,0)
|
|
drawBitmapText("Backgorund : " +
warna_background ,-460,-450,0)
|
|
|
|
|
|
|
|
# Digunakan untuk membuat bentuk kotak
|
|
def
kotak():
|
|
global pos_x, pos_y
|
|
glColor3f(merah,hijau,biru)
|
|
|
|
glBegin(GL_POLYGON) #
|
|
# Kiri Atas
|
|
glVertex2f(-50 + pos_x,-50 + pos_y)
|
|
# Kanan Atas
|
|
glVertex2f(50 + pos_x,-50 + pos_y)
|
|
# Kanan Bawah
|
|
glVertex2f(50 + pos_x,50 + pos_y)
|
|
# Kiri Bawah
|
|
glVertex2f(-50 + pos_x,50 + pos_y)
|
|
glEnd()
|
|
|
|
|
|
def
display():
|
|
glClear(GL_COLOR_BUFFER_BIT) #
|
|
|
|
drawText();
|
|
|
|
glColor3f(1.0,1.0,1.0)
|
|
glBegin(GL_LINES)
|
|
glVertex2f(-500.0, 0.0)
|
|
glVertex2f(500.0, 0.0)
|
|
glVertex2f(0.0, 500.0)
|
|
glVertex2f(0.0, -500.0)
|
|
glEnd()
|
|
|
|
|
|
|
|
glPushMatrix()
|
|
kotak()
|
|
glPopMatrix()
|
|
|
|
|
|
|
|
glFlush()
|
|
|
|
def
input_mouse(button, state, x, y):
|
|
global merah, hijau, biru
|
|
global warna_objek
|
|
|
|
# Jika mengklik kanan warna kotak akan
berubah menjadi warna hijau dan biru
|
|
if button == GLUT_RIGHT_BUTTON and state ==
GLUT_DOWN:
|
|
if hijau < 1:
|
|
merah = 0
|
|
hijau = 1
|
|
biru = 0
|
|
warna_objek = "Hijau"
|
|
elif biru < 1:
|
|
merah = 0
|
|
hijau = 0
|
|
biru = 1
|
|
warna_objek = "Biru"
|
|
print("Klik Kanan ditekan ",
"(", x, ",", y, ")")
|
|
# Jika mengklik kiri warna kotak akan
berubah menjadi warna merah dan hitam
|
|
elif button == GLUT_LEFT_BUTTON and state
== GLUT_DOWN:
|
|
if merah < 1:
|
|
merah = 1
|
|
hijau = 0
|
|
biru = 0
|
|
warna_objek = "Merah"
|
|
else:
|
|
merah = 0
|
|
hijau = 0
|
|
biru = 0
|
|
warna_objek = "Hitam"
|
|
|
|
print("Klik Kiri ditekan ",
"(", x, ",", y, ")")
|
|
|
|
def
input_keyboard(key,x,y):
|
|
global pos_x, pos_y
|
|
global warna_background
|
|
global teks_merah, teks_hijau, teks_biru
|
|
|
|
# Digunakan untuk mengubah posisi kotak
|
|
|
|
if key == GLUT_KEY_UP:
|
|
pos_y += 5
|
|
print("Tombol Atas ditekan
", "x : ", pos_x, " y : ", pos_y)
|
|
elif key == GLUT_KEY_DOWN:
|
|
pos_y -= 5
|
|
print("Tombol Bawah ditekan
", "x : ", pos_x, " y : ", pos_y)
|
|
elif key == GLUT_KEY_RIGHT:
|
|
pos_x += 5
|
|
print("Tombol Kanan ditekan
", "x : ", pos_x, " y : ", pos_y)
|
|
elif key == GLUT_KEY_LEFT:
|
|
pos_x -= 5
|
|
print("Tombol Kiri ditekan
", "x : ", pos_x, " y : ", pos_y)
|
|
|
|
# Digunakan untuk mengubah warna backgorund di window
|
|
|
|
#Pada background kiri atas berubah warna
menjadi merah
|
|
if pos_x < 0 and pos_y > 0:
|
|
glClearColor(1.0, 0.0, 0.0, 1.0)
|
|
warna_background = "Merah"
|
|
|
|
teks_merah = 0
|
|
teks_hijau = 0
|
|
teks_biru = 0
|
|
|
|
#Pada background kanan atas berubah warna
menjadi warna hijau
|
|
if pos_x > 0 and pos_y > 0:
|
|
glClearColor(0.0, 1.0, 0.0, 1.0)
|
|
warna_background = "Hijau"
|
|
|
|
teks_merah = 0
|
|
teks_hijau = 0
|
|
teks_biru = 0
|
|
|
|
# Pada background kanan bawah berubah warna
menjadi warna biru
|
|
if pos_x > 0 and pos_y < 0:
|
|
glClearColor(0.0,0.0,1.0,1.0)
|
|
warna_background = "Biru"
|
|
|
|
teks_merah = 1
|
|
teks_hijau = 1
|
|
teks_biru = 1
|
|
|
|
# Pada background kiri bawah berubah warna
menjadi warna hitam
|
|
if pos_x < 0 and pos_y < 0:
|
|
glClearColor(0.0,0.0,0.0,1.0)
|
|
warna_background = "Hitam"
|
|
|
|
teks_merah = 1
|
|
teks_hijau = 1
|
|
teks_biru = 1
|
|
|
|
|
|
|
|
|
|
def
update(value):
|
|
glutPostRedisplay() #Digunakan
|
|
glutTimerFunc(10,update,0)
|
|
|
|
def
main():
|
|
glutInit(sys.argv)
|
|
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB) #
|
|
glutInitWindowSize(500,500) #
|
|
glutInitWindowPosition(100,100) #
|
|
glutCreateWindow("Event handling
Mouse & Keyboard Font & Text") #
|
|
|
|
glutDisplayFunc(display) #
|
|
|
|
|
|
glutSpecialFunc(input_keyboard)
|
|
glutMouseFunc(input_mouse)
|
|
|
|
glutTimerFunc(50, update, 0) #
|
|
|
|
|
|
|
|
init()
|
|
glutMainLoop() #
|
|
|
|
main()
|
Terimakasih teman-teman semoga bermanfaat bagi kita semua.
Komentar
Posting Komentar