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 ...
随机推荐
- 线段树 Mayor's posters
甚至DFS也能过吧 Mayor's posters POJ - 2528 The citizens of Bytetown, AB, could not stand that the candidat ...
- java面向抽象编程样例
import java.util.*; abstract class Geometry{ public abstract double getArea(); } class Pillar ...
- 【2018.10.15】WZJ笔记(数论)
1. 证明:对于任意质数$p\gt 3$,$p^2-1$能被$24$整除. 证:平方差公式,$p^2-1 = (p-1)(p+1)$. 再把$24$分解质因数$2^3*3$. 三个相邻的自然数中至少有 ...
- Iptables入门教程
转自:http://drops.wooyun.org/tips/1424 linux的包过滤功能,即linux防火墙,它由netfilter 和 iptables 两个组件组成. netfilter ...
- ElasticSearch API 之 GET
GET API是Elasticsearch中常用的操作,一般用于验证文档是否存在:或者执行CURD中的文档查询.与检索不同的是,GET查询是实时查询,可以实时查询到索引结果.而检索则是需要经过处理才能 ...
- 济南学习 Day 5 T1 am
炮(cannon)[题目描述]众所周知,双炮叠叠将是中国象棋中很厉害的一招必杀技.炮吃子时必须隔一个棋子跳吃,即俗称“炮打隔子”. 炮跟炮显然不能在一起打起来,于是rly一天借来了许多许多的炮在棋盘上 ...
- ORACLE的impdp和expdp命令【登录、创建用户、授权、导入导出】
使用EXPDP和IMPDP时应该注意的事项: EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用, ...
- C/C++怎样传递二维数组,转载自CSDN
用二维数组作为参数传递(用二维数组处理矩阵),但是希望接受传递二维数组参数的函数可以处理任意维度的数组(希望矩阵的行数和列数都是不固定的). [以下转帖] ---------------------- ...
- 转载 gdb调试程序
转载自csdn,作者haoel,链接http://blog.csdn.net/haoel/article/details/2879 用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一 ...
- Python中%r与%s的区别
%r是rper()方法处理的对象 %s是str()方法处理的对象 其实有些情况下,两者处理的结果是一样的,比如说处理数据类型为int型对象: 例如1: print ('I am %d year old ...