python OpenGL绘制正八面体代码

学习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()  # 调用主函数,启动程序

最后附上结果;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值