zoukankan      html  css  js  c++  java
  • 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=='
    ':
                '''
                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

    下略,因为行数实在太多

  • 相关阅读:
    SkyWalking链路追踪系统-告警篇
    在k8s中解决pod资源的正确识别
    SkyWalking链路追踪系统-接入篇
    Jenkins API+Pipeline深度实践之input的自动化
    SkyWalking链路追踪系统-部署篇
    DevOps建设之基于钉钉OA审批流的自动化上线
    使用kube-prometheus部署k8s监控(最新版)
    基于k8s手动部署rabbitmq集群
    ant desgin vue中table复选框根据状态disabled置灰
    ant design vue 中tree实现单选
  • 原文地址:https://www.cnblogs.com/pasuka/p/3388127.html
Copyright © 2011-2022 走看看