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 ...
随机推荐
- 去掉WordPress顶部工具条
WordPress为了方便管理员,或者登陆用户快速的从前台进入后台来管理网站,在WordPress网站顶部强制加入了一个工具条(admin bar),而且默认是对所有登陆用户都显示的,有时候看着挺烦心 ...
- NYOJ 722 数独
数独 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 数独是一种运用纸.笔进行演算的逻辑游戏.玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一 ...
- redis介绍和安装和主从介绍(二)
redis正式安装过程 安装依赖,下载解压,编译安装 yum install gcc-c++ tcl wget http://download.redis.io/releases/redis-4.0. ...
- iOS视频录制,裁剪(输出指定大小)
弄了几天,终于搞懂一点了,博客后面再写,先附上demo,等研究清楚再写 demo地址:http://pan.baidu.com/s/1o6w2CMu
- (转)新ITC提交APP常见问题与解决方法(Icon Alpha,Build version,AppIcon120x120)(2014-11-17)
1)ICON无法上传,提示图片透明(有Alpha通道) 苹果现在不接受png里的Alpha了,提交的图标带有Alpha通道就提示: 简单处理:用自带的预览打开,导出时不勾选Alpha,仍保存为png格 ...
- NOIP一系列模拟赛小结
NOIP越发接近了,于是自己也跟着机房的几位师兄一起做了几次NOIP模拟赛,收获颇多. #1-T1:求点集中的点能否只用三条与坐标轴平行的直线就能全部被经过,其实只要将横纵坐标排序后逐个点检查下就行. ...
- Web Services 教程
Web Services 可使您的应用程序成为 Web 应用程序. Web Services 通过 Web 进行发布.查找和使用. Web Services 是应用程序组件 Web Services ...
- 【数位DP】bnuoj 52813 J. Deciphering Oracles
http://acm.bnu.edu.cn/v3/contest_show.php?cid=9208#problem/J [AC] #include<bits/stdc++.h> usin ...
- 【2018.9.20】JOI 2017 Final T2「準急電車 / Semiexpress」
题目描述 JOI 铁路公司是 JOI 国唯一的铁路公司. 在某条铁路沿线共有 $N$ 座车站,依次编号为 $1...N$. 目前,正在服役的车次按照运行速度可分为两类:高速电车(简称快车)与普通电车( ...
- 16.1113 模拟考试T2
测试题 #4 括号括号[问题描述]有一个长度为?的括号序列,以及?种不同的括号.序列的每个位置上是哪种括号是随机的,并且已知每个位置上出现每种左右括号的概率.求整个序列是一个合法的括号序列的概率.我们 ...