PyOpenGL下GlutBitmapCharacter的替代
虽然pyinstaller支持pyopengl,但是调用GLUT之后,在其它电脑上面运行就会出现错误,索性按照之前C#上面的办法,把字体数据和函数用python重写
fontData.py
#! /usr/bin/env python
#coding=utf-8 '''
Copy from freeglut_font.c and freeglut_font_data.c
* Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
* Written by Pawel W. Olszta, <olszta@sourceforge.net>
* Creation date: Thu Dec 16 1999
* Modified by T.Q., <pasuka(at)foxmail(dot)com>, 25-10-2013
'''
from OpenGL import GL from fontData import fgGetFontById
fontDict = {"GLUT_BITMAP_8_BY_13":1,
"GLUT_BITMAP_9_BY_15":2,
"GLUT_BITMAP_HELVETICA_10":3,
"GLUT_BITMAP_HELVETICA_12":4,
"GLUT_BITMAP_HELVETICA_18":5,
"GLUT_BITMAP_TIMES_ROMAN_10":6,
"GLUT_BITMAP_TIMES_ROMAN_24":7} def BitmapCharacter(slt,cc):
'''
Draw a bitmap character
'''
if not cc:return -3
if not 0<=ord(cc)<=255:return -1
if not fontDict.has_key(slt): return -2
GL.glPushClientAttrib(GL.GL_CLIENT_PIXEL_STORE_BIT)
GL.glPixelStorei(GL.GL_UNPACK_SWAP_BYTES,GL.GL_FALSE)
GL.glPixelStorei(GL.GL_UNPACK_LSB_FIRST,GL.GL_FALSE)
GL.glPixelStorei(GL.GL_UNPACK_ROW_LENGTH,0)
GL.glPixelStorei(GL.GL_UNPACK_SKIP_ROWS,0)
GL.glPixelStorei(GL.GL_UNPACK_SKIP_PIXELS,0)
GL.glPixelStorei(GL.GL_UNPACK_ALIGNMENT,1)
font = fgGetFontById(fontDict[slt])
face = font['Characters'][ord(cc)]
GL.glBitmap(face[0], font['Height'], # The bitmap's width and height
font['xorig'], font['yorig'], # The origin in the font glyph
float(face[0]),0.0, #The raster advance -- inc. x,y
face[1:]) # The packed bitmap data...
GL.glPopClientAttrib()
return 0 def BitmapString(slt,s):
'''
Draw a bitmap string
'''
if not s:return -3
for k in s:
if not 0<=ord(k)<=255:
return -1
if not fontDict.has_key(slt):return -2
font = fgGetFontById(fontDict[slt])
GL.glPushClientAttrib(GL.GL_CLIENT_PIXEL_STORE_BIT)
GL.glPixelStorei(GL.GL_UNPACK_SWAP_BYTES,GL.GL_FALSE)
GL.glPixelStorei(GL.GL_UNPACK_LSB_FIRST,GL.GL_FALSE)
GL.glPixelStorei(GL.GL_UNPACK_ROW_LENGTH,0)
GL.glPixelStorei(GL.GL_UNPACK_SKIP_ROWS,0)
GL.glPixelStorei(GL.GL_UNPACK_SKIP_PIXELS,0)
GL.glPixelStorei(GL.GL_UNPACK_ALIGNMENT,1)
x = 0.0
for k in s:
face = font['Characters'][ord(k)]
if k=='\n':
'''
Step through the string, drawing each character.
A newline will simply translate the next character's insertion
point back to the start of the line and down one line.
''' GL.glBitmap(0,0,0.0,0.0,-x,-float(font['Height']),0)
x = 0.0
else:
GL.glBitmap(face[0],font['Height'],font['xorig'],font['yorig'],float(face[0]),0.0,face[1:])
x += float(face[0])
GL.glPopClientAttrib()
return 0
fontData.py
下略,因为行数实在太多
PyOpenGL下GlutBitmapCharacter的替代的更多相关文章
- OpenTK的glutBitmapCharacter的替代方法
由于openTK并没有打包集成GLUT,字体显示就成了一个问题. 办法1:采用QuickFont 优点:可以使用系统自带的字体 缺点:代码尚未成熟.只能2D显示,无法随物体旋转.平移 办法2:同时调用 ...
- windows 下使用Nginx替代apache作为服务器
说实话, 在windows下使用Nginx 着实有点不太方便, 但因项目需求, 又不想换系统(虽然可以搞个虚拟机玩), 只能用Nginx了 好了, 不多说了. 开始... 首先我用的是xampp包(A ...
- Windows下cmd的替代软件——PowerCmd
Powercmd 是一款运行在windows下的cmd增强软件(A Better Command Prompt Replacement Tool),当前最新的版本为2.2. 官方提供试用版,貌似没有功 ...
- 使用mac下Fiddler的替代工具Charles进行手机抓包
对手机的抓包有两种方式,各有优劣且互补,一般第一种即可,对于不走代理的 App 选择第二种方式 第一种 Fiddler: 利用 Fiddler 抓包,适合大多数走代理的应用, 优点 (1) 无需 ro ...
- 在orangepi-PC下使用pyopengl
在OrangePi-PC下安装显卡驱动以及opengl: http://www.orangepi.org/orangepibbsen/forum.php?mod=viewthread&tid= ...
- NoSql之MongoDB--Windows下数据库配置及初步使用
1.NoSql简介 NoSql(Not Only Sql)指的是非关系型的数据库.下一代数据库主要解决几个要点:非关系型的.分布式的.开源的.水平可扩展的.原始的目的是为了大规模web应用,这场 运动 ...
- ubuntu下tomcat启动巨慢分析
在一个ubuntu14新环境部署tomcat,通过CI启动一个应用时,启动耗时达到15分钟之久.仔细看tomcat输出的耗时统计日志发现如下日志: Creation of SecureRandom i ...
- MongoDB 介绍及Windows下安装
一.MongoDB简介 MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值存储方式.Mongo使用C++ ...
- Ubuntu 16.04安装Notepadqq编辑器替代Notepad++
Notepad++只有Windows平台产品,对于Linux下有其替代的产品Notepadqq. 安装: sudo add-apt-repository ppa:notepadqq-team/note ...
随机推荐
- xtu数据结构 D. Necklace
D. Necklace Time Limit: 5000ms Memory Limit: 32768KB 64-bit integer IO format: %I64d Java class ...
- Leetcode 378.有序矩阵中第k小的元素
有序矩阵中第k小的元素 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素.请注意,它是排序后的第k小元素,而不是第k个元素. 示例: matrix = [ [ 1, ...
- Leetcode 324.摆动排序II
摆动排序II 给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序. 示例 1: 输入: nums ...
- [android开发篇]权限列表
http://www.open-open.com/lib/view/open1425868811607.html
- Spring Data Redis 的坑
用 Spring data redis 的redisTemplate存储数据的时候发现,它的键值前多出现了字符串:\xac\xed\x00\x05t\x00\x03 如本来key=name,会变成&q ...
- pmm metrics 数据采集来源
handler状态参数 mysql> show global status like '%handler%'; +----------------------------+----------- ...
- iOS学习笔记08-Quartz2D绘图
一.Quartz2D简单介绍 在iOS中常用的绘图框架就是Quartz2D,Quartz2D是Core Graphics框架的一部分,我们日常开发使用的所有UIKit组件都是由Core Graphic ...
- [BZOJ2342] [Shoi2011]双倍回文(manacher)
传送门 manacher...... 先跑一边manacher是必须的 然后枚举双倍回文串的对称轴x 把这个双倍回文串分成4段,w wR w wR 发现,只有当 y <= x + p[x] / ...
- Java 线程池的原理与实现学习(二)
java类库中提供的线程池简介: java提供的线程池更加强大,相信理解线程池的工作原理,看类库中的线程池就不会感到陌生了. execute(Runnable command):履行Ruannable ...
- [USACO08DEC]Trick or Treat on the Farm (拓扑排序,DP)
题目描述 每年万圣节,威斯康星的奶牛们都要打扮一番,出门在农场的N个牛棚里转 悠,来采集糖果.她们每走到一个未曾经过的牛棚,就会采集这个棚里的1颗糖果. 农场不大,所以约翰要想尽法子让奶牛们得到快乐. ...