广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python OpenGL基本配置方式
  • 100
分享到

Python OpenGL基本配置方式

2024-04-02 19:04:59 100人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录OpenGL基本配置方式pip 安装 PyOpenGL测试代码python+OpenGL库理解及代码应用1.读取off文件OpenGL基本配置方式 参考:Http://pyope

OpenGL基本配置方式

参考:Http://pyopengl.sourceforge.net

pip 安装 PyOpenGL

pip install PyOpenGL PyOpenGL_accelerate

测试代码

from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
 
def init():
    glClearColor(1,1,1,1)
    gluOrtho2D(-1,1,-1,1)
 
def triangle():
    glClear(GL_COLOR_BUFFER_BIT)
    glColor3f(1,0,0)
    glBegin(GL_TRIANGLES)
 
    glColor3f(1,0,0)
    glVertex2f(-1, -1)
    
    glColor3f(0,1,0)
    glVertex2f(1, -1)
    
    glColor3f(0,0,1)
    glVertex2f(0, 1)
    
    glEnd()
    glFlush()
 
def main():
    glutInit(sys.argv)
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
    glutInitwindowsize(800,600)
    glutInitWindowPosition(50,50)
    glutCreateWindow("Triangle")
    glutDisplayFunc(triangle)
    init()
    glutMainLoop()
 
if __name__ == '__main__':
    main()

运行结果,绘制出一个彩色三角形:

Python+OpenGL库理解及代码应用

1.读取off文件

使用工具库(GLUT)创建 OpenGL 应用程序只需要四步:

(1)初始化glut库:glutInit()

(2)创建glut窗口:glutCreateWindow('Quidam Of OpenGL')

(3)注册绘图的回调函数: glutDisplayFunc(draw)

(4)进入glut主循环: glutMainLoop()

除了基本组成以外还可以:

(5)设置窗口初始显示模式:初始化 glut 库的时候,一般要用 glutInitDisplayMode() 来设置初始的显示模式。例如:

glutInitDisplayMode( GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH)

 (6)初始化画布

glClearColor(0.0, 0.0, 0.0, 1.0) # 设置画布背景色。注意:这里必须是4个参数	
glEnable(GL_DEPTH_TEST)          # 开启深度测试,实现遮挡关系	
glDepthFunc(GL_LEQUAL)           # 设置深度测试函数

关于draw()函数的基本组成:

(1)清除屏幕及深度缓存

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) 

(2)设置投影

投影设置也是每次重绘都需要的步骤之一。glOrtho() 用来设置平行投影,glFrustum() 用来设置透视投影。这两个函数的参数相同,都是视景体的 left / right / bottom / top / near / far 六个面。视景体的 left / right / bottom / top 四个面围成的矩形,就是视口。near 就是投影面,其值是投影面距离视点的距离,far 是视景体的后截面,其值是后截面距离视点的距离。far 和 near 的差值,就是视景体的深度。视点和视景体的相对位置关系是固定的,视点移动时,视景体也随之移动。假设 view 是视景体,width 和 height 是窗口的宽度和高度,在投影变换之前,需要先声明是对投影矩阵的操作,并将投影矩阵单位化:

glMatrixMode(GL_PROJECTION)   ,含义为选定矩阵为模型-观察变换 矩阵

OpenGL中的变换命令都是对当前矩阵(当前矩阵为以后图形变换所要使用的矩阵)进行操作,因此在选定可修#改矩阵后,应首先用glLoadIdentity()命令设置当前操作矩阵为单位矩阵

glMatrixMode(GL_PROJECTION)	
glLoadIdentity()	
if width > height:	
  k = width / height	
  glFrustum(view [0]*k, view [1]*k, view [2], view [3], view [4], view [5])	
else:	
  k = height / width	
  glFrustum(view [0], view [1], view [2]*k, view [3]*k, view [4], view [5])

 (3)设置视点

视点是和视景体关联的概念。设置视点需要考虑眼睛在哪儿、看哪儿、头顶朝哪儿,分别对应着eye, lookat 和 eye_up 三个向量.

gluLookAt(	
       #设置相机在世界坐标系中的位置
       eye[0], eye[1], eye[2], 	
       #相机镜头对准的物体在世界坐标系中的位置
       look_at[0], look_at[1], look_at[2],
	   #相机向上的方向在世界坐标系中的方向
       eye_up[0], eye_up[1], eye_up[2]	
   )

(4)设置视口 

视口的大小和尺寸是在窗口坐标系中进行度量的, 默认状 态下其坐标原点位于窗口的左下角,其尺寸与窗口的大小 相同

#glViewport(GLint x, Glint y, Glsizei width, Glsizei height)
glViewport(0, 0, width, height)

(5)设置模型变换

模型平移、旋转、缩放等几何变换,需要切换到模型矩阵:

glMatrixMode(GL_MODELVIEW)	
glLoadIdentity()
#平移操作函数
glTanslate(x,y,z)
#平移,(x,y,z,1)乘以 N(4x4矩阵)进行矩阵变换
glMultMatrixf(N)
#旋转函数,绕矢量v=(x,y,z)T逆时针方向旋转angle指定的角度。  
glRotate(angle,x,y,z)
#缩放函数	
glScale(1.0, 1.0, 1.0)

同时使用视图变换和模型变换,需要先调用视图变换函数,后调用模型变换函数,以保证模型变换首先对物体起作用。

多种变换组合调用顺序 ,写函数的时候要注意顺序,否则可能不起作用

具体代码分析

from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
import numpy as np
 
def readOFF():
    file_path = '../off/m1.off'
    f = open(file_path, 'r', encoding='utf-8')
    lines = f.readlines()
    m = []
    n = []
    #把off文件中数据按行读取出来,存储到列表中,由于边数事先看了为0,所以没遍历边,如果边不为0,记得遍历,并在后文加上边的绘制
    for line in lines:
        m.append(line.split())
    for i in range(len(m)):
        #跳过第一行的OFF
        if m[i][0] == 'OFF':
            continue
        #记录定点数,面片数和边数
        elif i == 1:
            v_cout = int(m[i][0])
            f_count = int(m[i][1])
            e_count = int(m[i][2])
            continue
        #把字符型数据转化为数值型数据
        else:
            for j in range(len(m[i])):
                m[i][j] = float(m[i][j])
            n.append(m[i])
    return v_cout, f_count, e_count, n
 
 
#绘画模型
def draw():
    global angle
    #读取OFF文件包含的顶点,面片,边和off文件存储数据信息
    v_cout, f_count, e_count, n = readOFF()
    # 设置渲染背景
    glClearColor(0.0, 0.0, 0.0, 0.0)
    #清除缓存
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
    # 设置投影(透视投影)
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    # 投影变换
    gluPerspective(100, 1, 0.5, 100)
 
    angle += 0.05
    while angle > 360:
        angle -= 360
    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()
    # 视口变换
    glViewport(100, 100, 500, 500)
    #设置观察变换
    #设置视点
    gluLookAt(
        -5, 5, 0,
        0, 0, 0,
        0, 1, 0,
    )
    #设置模型变换
    #平移
    glTranslate(1, 1, 0)
    #旋转
    glRotatef(angle, -5, 5, 0)
    # 缩放
    glScalef(5, 5, 5)
 
    for i in range(f_count):
        #获取顶点个数,和顶点信息
        cout , a, b, c = n[v_cout + i]
        cout, a, b, c=int(cout) ,int(a) ,int(b) ,int(c)
        #得到顶点位置
        a1, a2, a3 = n[a]
        b1, b2, b3 = n[b]
        c1, c2, c3 = n[c]
        #绘制多面体
        glBegin(GL_POLYGoN)
        glVertex3f(a1, a2, a3)
        glVertex3f(b1, b2, b3)
        glVertex3f(c1, c2, c3)
        glEnd();
    # 刷新缓存
    glFlush()
 
#关闭窗口
def close(key,x,y):
    if key==b'\x1b':
        glutDestroyWindow(win_id)
 
if __name__ == "__main__":
    angle = 0
    # 初始化glut窗口
    glutInit()
    # 设置窗口显示模式:RGBA四通道|单缓存|深度
    glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE | GLUT_DEPTH)
    # 初始化窗口大小
    glutInitWindowSize(1000, 800)
    # 创建窗口
    win_id = glutCreateWindow("CUBE")
    # 设置渲染函数
    glutDisplayFunc(draw)
    # 设置窗口空闲时函数
    glutIdleFunc(draw)
    # 开启深度测试
    glEnable(GL_DEPTH_TEST)
    # 开启窗口主循环
    glutMainLoop()

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Python OpenGL基本配置方式

本文链接: https://www.lsjlt.com/news/118240.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python OpenGL基本配置方式
    目录OpenGL基本配置方式pip 安装 PyOpenGL测试代码Python+OpenGL库理解及代码应用1.读取off文件OpenGL基本配置方式 参考:http://pyope...
    99+
    2022-11-11
  • Python OpenGL基本配置
    参考:http://pyopengl.sourceforge.net 一、pip 安装 PyOpenGL pip install PyOpenGL PyOpenGL_accelerate 二、测试代码 from OpenGL....
    99+
    2023-01-31
    基本配置 Python OpenGL
  • Python OpenGL如何配置
    这篇文章主要介绍“Python OpenGL如何配置”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python OpenGL如何配置”文章能帮助大家解决问题。OpenGL基本配置...
    99+
    2023-06-30
  • Echarts之图例legend基本配置方式
    目录Echarts图例legend基本配置Echarts图例位置-legend属性总结Echarts图例legend基本配置 <!DOCTYPE html> <h...
    99+
    2023-05-17
    Echarts图例legend legend基本配置 Echarts图例legend配置
  • Cacti中文版的基本安装及配置方式
    本篇内容介绍了“Cacti中文版的基本安装及配置方式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Cacti中文版是用php语言实现的一个软...
    99+
    2023-06-16
  • H3C基本配置
    一、基本配置pc1配置 <h3c>system-view[h3c]sysname pc1[h3c]int g0/0[pc1-GigabitEthernet0/0]ip add 192.168.2.100 255.255.25...
    99+
    2023-01-31
    基本配置 H3C
  • redis基本配置
    1.下载编译安装cd /usr/srcwget http://download.redis.io/releases/redis-3.2.3.tar.gztar -xf redis-3.2...
    99+
    2022-10-18
  • Linux系统下Git的基本配置和使用方式
    本篇内容主要讲解“Linux系统下Git的基本配置和使用方式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux系统下Git的基本配置和使用方式”吧!git config配置文件一.Git已...
    99+
    2023-06-12
  • hibernate5.2的基本配置方法(详解)
    目标:将Student实体对象加入数据库1、首先需要下载三个东西:hibernate,slf4j,mysql。2、分别取他们的包导入新建的项目中,我这里的版本是:hibernate-release-5.2.10里面lib目录下的requir...
    99+
    2023-05-31
    hibernate 5.2 配置
  • php-fpm基本配置
    php配置文件: php.ini: display_errors = Off #关闭错误提示 expose_php = Off #隐藏php版本 #禁用危险函数,禁用之后composer 会有问题,使用composer的请单独配置禁用函数...
    99+
    2023-09-23
    php 开发语言 服务器
  • ospfv3的基本配置
     R1     #ipv6 unicast-routing     #int s1/1     #ipv6 address 2002::1:1/122     #ipv6 ospf 1 area 0     #no shutdown    ...
    99+
    2023-01-31
    基本配置
  • MySQL的基本配置
    本篇内容介绍了“MySQL的基本配置”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!query_cache_...
    99+
    2022-10-18
  • BGP基本配置(H3C)
                               BGP基本实验 一.实验拓扑图 二 实验步骤 [R1]bgp 30[R1-bgp]router-id 1.1.1.1[R1-bgp]peer 10.0.1.6 as-nu[R1-bgp]...
    99+
    2023-01-31
    基本配置 BGP H3C
  • H3C PPPOE 基本配置
    实验TOP:     说明:两端都使用ppp的chap认证。 配置: server 端的配置: ================================ [H3C]local-user server [H3C-luser-...
    99+
    2023-01-31
    基本配置 H3C PPPOE
  • Python安装配置OpenGL环境的全过程记录
    最近学习计算机图形学,需要使用OpenGL,踩了很多雷,最后终于成功了,总结了一下教程和一些踩雷心得 环境:win10_64位系统、PyCharm(本人使用的是python3.8版本...
    99+
    2022-11-11
  • oracle的环境配置-基本配置
    宿主机IP地址:10.1.1.x  网关:10.1.1.1虚拟机节点IP地址(本地workstation上创建):10.1.1.101~253  网关:10.1.1.1教师机(VNC):...
    99+
    2022-10-18
  • dbcp基本配置和重连配置
    转自:http://agapple.iteye.com/blog/772507 最近在看一些dbcp的相关内容,顺便做一下记录,免得自己给忘记了。 ...
    99+
    2022-10-18
  • 基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)
    前言:  由于公司业务服务器大部分都在内网环境下运行,内网环境无法直接使用yum安装升级更新软件,所以需要自建Yum源来满足目前日常工作需要。 YUM 常用命令参数: yum makecache ...
    99+
    2023-10-25
    linux 运维 服务器 centos
  • Mongodb 基本安装配置
     下载软件,版本 mongodb-linux-x86_64-2.0.2.tgz 解压缩后的目录:mongodb-linux-x86_64-2.0.2...
    99+
    2022-10-18
  • gateway基本配置教程
    目录1、gateway简介2、gateway核心概念3、路由4、断言5、过滤器5.1、过滤器介绍5.2、内置局部过滤器与使用5.3、内置全局过滤器5.4、自定义全局过滤器5.4.1、...
    99+
    2023-05-20
    gateway基本配置 gateway配置
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作