python OpenGL绘制正八面体代码

news2024/12/28 22:07:47

学习OpenGL过程中,先从绘制三角形开始逐渐对Opengl有一些了解,到现在进阶到绘制立方体。通过借鉴网友绘制六面体得到灵感,改了一下他的代码成功绘制出正八面体。不管是绘制三角形还是绘制立方体,对于空间坐标系要相当熟悉,因为每一个顶点都是基于空间坐标系建立的。其次对于glbegin函数要有一些了解,知道该怎么使用该函数。剩下的进一步需要了解的函数见代码。

OpenGL万字超详解笔记(适合新手小白)_opengl教程-CSDN博客

opengl新手教程(通俗易懂) - 知乎 (zhihu.com)

import pygame  # 导入 Pygame 库,用于创建游戏窗口和处理事件
from pygame.locals import *  # 导入 Pygame 的本地模块,包含常用的变量和函数
from OpenGL.GL import *  # 导入 OpenGL 的核心功能
from OpenGL.GLUT import *  # 导入 OpenGL 的实用工具库
from OpenGL.GLU import *  # 导入 OpenGL 的实用工具库

# 定义立方体的顶点坐标
vertices = (
    (0, 0, 1), (1, 0, 0),  # 前面的两个顶点
    (0, 1, 0), (-1, 0, 0),  # 左面的两个顶点
    (0, -1, 0), (0, 0, -1),  # 后面的两个顶点


)

# 定义立方体的面
faces = (
    (0, 1, 2),  # 前面的三个顶点
    (0, 2, 3),  # 左面的四个顶点
    (0, 3, 4),  # 后面的四个顶点
    (0, 4, 1),  # 右面的四个顶点
    (5, 1, 2),  # 上面的四个顶点
    (5, 2, 3),  # 下面的四个顶点
    (5, 3, 4),  # 下面的四个顶点
    (5, 4, 1),

)

# 定义面的颜色
colors = (
    (1, 0, 0),  # 红色
    (0, 1, 0),  # 绿色
    (0, 0, 1),  # 蓝色
    (1, 1, 0),  # 黄色
    (1, 0, 1),  # 紫色
    (0, 1, 1),  # 青色

)

def Cube():
    """
    绘制立方体
    """
    glBegin(GL_TRIANGLE_STRIP)  # 开始绘制三角形
    for face in faces:
        x = 0
        for vertex in face:
            x -= 1
            glColor3fv(colors[x])  # 设置顶点颜色
            glVertex3fv(vertices[vertex])  # 设置顶点坐标
    glEnd()  # 结束绘制三角形

def main():
    """
    主函数
    """
    pygame.init()  # 初始化 Pygame
    display = (800, 600)
    pygame.display.set_mode(display, DOUBLEBUF | OPENGL)  # 创建窗口
    gluPerspective(45, (display[0] / display[1]), 0.1, 50.0)  # 设置透视参数
    glTranslatef(0.0, 0.0, -6)  # 平移视图

    # Enable depth testing
    glEnable(GL_DEPTH_TEST)  # 启用深度测试

    while True:  # 主循环
        for event in pygame.event.get():  # 处理事件
            if event.type == pygame.QUIT:  # 如果是退出事件,则退出程序
                pygame.quit()
                quit()

        glRotatef(1, 3, 1, 1)  # 旋转立方体
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)  # 清除屏幕和深度缓冲
        Cube()  # 绘制立方体
        pygame.display.flip()  # 刷新屏幕
        pygame.time.wait(10)  # 稍微等待一下,减少 CPU 占用

main()  # 调用主函数,启动程序

最后附上结果;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2107635.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

苍穹外卖项目前端DAY03

前端DAY03 1、套餐管理 1.1、套餐分页查询 1.1.1、需求分析和接口设计 产品原型: 业务规则: 根据页码展示套餐信息每页展示10条数据分页查询时可以根据需要,输入套餐名称、套餐分类、售卖状态进行查询 接口设计: 套餐分页查…

如何使用电商API接口?(淘宝|京东商品详情数据接口)

一、了解电商API接口: 如今,在电商市场中,电商API接口的广泛应用极大地提高了电商行业的工作效率,使得商家能够灵活集成多种服务,高效优化业务流程。 当前,电商平台中的多种业务都可以通过使用API接口来做…

Tomato靶场渗透测试

1.扫描靶机地址 可以使用nmap进行扫描 由于我这已经知道靶机地址 这里就不扫描了 2.打开网站 3.进行目录扫描 dirb http://172.16.1.113 发现有一个antibot_image目录 4.访问这个目录 可以看到有一个info.php 5.查看页面源代码 可以发现可以进行get传参 6.…

脉脉高聘:大模型算法岗平均月薪近7万元,位居高薪榜第一

9月5日,脉脉高聘人才智库数据显示,大模型领域整体供需比1.76,整体供大于求。同时,高技术岗位人才稀缺,云计算人才供需比仅为0.33,相当于3个岗位争夺1个人才。大模型算法岗位平均月薪最高,超过6.…

【STM32+HAL库】---- 驱动MAX30102心率血氧传感器

硬件开发板:STM32F407VET6 软件平台:cubemaxkeilVScode1 MAX30102心率血氧传感器工作原理 MAX30102传感器是一种集成了红外光源、光电检测器和信号处理电路的高度集成传感器,主要用于心率和血氧饱和度的测量。以下是MAX30102传感器的主要特点…

草料二维码功能上新!可以跨分区移动或复制内容了!

支持将 分区 下的内容移动或复制到其他分区。适用于将原初始分区下的内容按业务划分,移动到其他分区。或者当物品流转或业务变更时,可以及时将码及数据移动到对应分区,移动后,二维码图案不会发生变化。 目前仅表单、活码、批量模…

在修改文件 /ect/hosts时无法保存 can‘t open file for writing

输入:q! 即可 情境: 在Master节点中执行如下命令打开并修改Master节点中的“/etc/hosts”文件: sudo vim /etc/hosts 可以在hosts文件中增加如下两条IP和主机名映射关系: 192.168.1.121 Master 192.168.1.122 Slave1

解决App推广痛点:一键获取下载数据的秘诀

在App推广的过程中,获取准确的下载数据一直是一个令人头疼的问题。你知道吗?无法精确追踪用户来源和下载量,就像是在黑暗中摸索,让推广效果大打折扣。今天,我们就来揭秘如何轻松获取App下载数据,优化你的推…

BaseThreadStart代码分析

BaseThreadStart代码分析 第一部分: ​​​​​​​ 在调用CreateThead创建线程的时候,操作系统会为新线程创建线程内核对想象, 线程内核对象包含了线程的上下文(是一个C O N T E X T结构)以及一些其他属性和统计信息&…

计算机毕业设计 | SSM停车场管理系统(附源码)

1, 概述 1.1 课题背景 随着社会的快速发展,计算机的影响是全面且深入的。人们的生活水平不断提高,日常生活中用户对停车场管理系统方面的要求也在不断提高,需要的人数更是不断增加,使得停车场管理系统的开发成为必需…

【HarmonyOS】安装包报错,code:9568282 error: install releaseType target not same.

【HarmonyOS】安装包报错,code:9568282 error: install releaseType target not same. 报错信息 Install Failed: error: failed to install bundle. code:9568282 error: install releaseType target not same. You can also uninstall and reinstall the module…

使用Python读取Excel数据

目录 使用Python读取Excel数据 安装必要的库 读取Excel文件 基本步骤 代码案例 解释 其他常用操作 选择特定列 筛选数据 数据清洗 总结 使用Python读取Excel数据 在日常的数据处理工作中,Excel文件是非常常见的一种数据格式。Python提供了多种库来读取和…

SprinBoot+Vue新生报到微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平…

java重点学习-mybatis

4.1 MyBatis执行流程 ① 读取MyBatis配置文件:mybatis-config.xml加载运行环境和映射文件② 构造会话工厂SqlSessionFactory③ 会话工厂创建SqlSession对象(包含了执行SQL语句的所有方法)④ 操作数据库的接口,Executor执行器,同时负责查询缓存的维护⑤E…

人、货、场巨变,5G人工智能时代新的创业机会在哪?

随着5G元年的开启,人工智能的潜力被进一步激发,"人工智能"广泛应用于教育、无人驾驶、金融、银行、医疗、工业等领域,成为中国新的经济增长引擎,促进中国经济火爆增长。不仅促进了中国消费者的购买力,更萌发…

亚马逊卖家测评为什么要自己养账号呢?不懂快进来看看

亚马逊上的卖家为啥要自己养账号呢?咱们来聊聊这个事儿。 亚马逊特别看重用户的体验,所以买家的评论和打分对店铺的排名影响很大。平台对评论的审核很严格,这些评论直接关系到商品在平台上的表现和销量。 在亚马逊上,买家的评分和…

汽车制造商设备运维案例

汽车产线有很多传动设备需要长期在线运行,会出现老化、疲劳、磨损等问题,为了避免意外停机造成损失,需要加装一些健康监测设备,监测设备运行状态。天津三石峰科技采用无线温振传感器汇聚网关方案,将现场设备数据数据上…

springboot项目实现分库

本文是根据仓库编码 和 仓库id进行按仓库进行分库处理,可以根据例子自行按照业务需要进行分库 1.核心是实现 Spring 的 AbstractRoutingDataSource 抽象类,重写 determineCurrentLookupKey 方法,实现动态数据源的目的 @Slf4j public class DynamicDataSource extends Abst…

佳明运动相机SD存储卡被格式化?教你有效恢复数据的方法

在日常使用佳明运动相机的过程中,‌我们可能会不小心将SD存储卡格式化,‌导致珍贵的照片和视频数据丢失。‌面对这种情况,‌很多用户都感到十分焦虑和无助。‌但幸运的是,‌通过一些有效的方法,‌我们仍然有可能恢复这…

如何在Centos7构建调试“Jmeter-InfluxDB-Grafana“?

一、数据源配置 1、在"Grafana"首页,添加数据源 2、点击添加 3、选择"InfluxDB" 4、填写主机 5、填写"Database:jmeter"和"HTTP Method:GET" 6、点击"Save & test" 7、查看 二、配置…