-
简介
显示一张笑脸的位图程序。
在OpenGL中,位图是两色图像,可以用来在屏幕上绘制字母或字符(比如图标)。
OpenGL提供了绘制位图的函数glBitmap.
程序中定义了16×16的像素位图,位图是64无符号字节的数组,在图像中每行有4个字节(每行的最后两个字节未用)。第一个字节的第7位与图标的左下角相对应(即与图像上下倒置)
调用函数glRasterPos2i指定当前光栅的位置。
函数glBitmap(宽度w,高度h,中心点x, 中心点y,xmove,ymove,数组bits)
xmove,ymove通常用于位图字体来移动到下一个字符单元格中。
-
代码
#coding:utf-8
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
import random
def Redraw():
#/* 16x16 smiley face */
smiley= [ 0x03, 0xc0, 0, 0,\
0x0f, 0xf0, 0, 0,\
0x1e, 0x78, 0, 0,\
0x39, 0x9c, 0, 0,\
0x77, 0xee, 0, 0,\
0x6f, 0xf6, 0, 0,\
0xff, 0xff, 0, 0,\
0xff, 0xff, 0, 0,\
0xff, 0xff, 0, 0,\
0xff, 0xff, 0, 0,\
0x73, 0xce, 0, 0, \
0x73, 0xce, 0, 0, \
0x3f, 0xfc, 0, 0, \
0x1f, 0xf8, 0, 0, \
0x0f, 0xf0, 0, 0, \
0x03, 0xc0, 0, 0 ]
glClearColor(0.0, 0.0, 0.0, 1.0)
glClear(GL_COLOR_BUFFER_BIT)
glColor3f(1.0, 1.0, 0.0)
for i in range(100):
glRasterPos2i(random.randint(0,1000) % width, random.randint(0,1000) % height)
glBitmap( 16, 16, 8, 8, 0, 0, smiley)
glFinish()
#改变窗口大小时调用
def Resize(w,h):
global width, height
width = w
height = h
glViewport(0, 0, w, h)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(0.0, w, 0.0, h, -1.0, 1.0)
glMatrixMode(GL_MODELVIEW)
#使用glut初始化OpenGL
glutInit()
#显示模式:GLUT_SINGLE无缓冲直接显示|GLUT_RGB采用RGB
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
glutCreateWindow("Bitmap Smiley Face Example")
#调用函数绘制图像
glutDisplayFunc(Redraw)
glutReshapeFunc(Resize)
#主循环
glutMainLoop()