PyOpengl学习(四):画心形线以及glOrtho()方法分析

本文介绍使用OpenGL绘制心形线的方法,通过Python代码实现,并详细解析了glOrtho()函数的作用及其参数设置,帮助读者掌握OpenGL中视景体的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        上篇文章我们已经学习了如何画线,这里我们就来画个心形线吧。


代码如下:

import math
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *


def drawHeart():
    glColor3f(0.0, 1.0, 0.0)
    glLineWidth(2)
    glBegin(GL_LINE_STRIP)
    for i in range(180, 361 + 180):
        sit = i * 2 * math.pi / 360
        x = 16 * math.pow(math.sin(sit), 3)
        y = (13 * math.cos(sit) - 5 * math.cos(2 * sit) - 2 * math.cos(3 * sit) - math.cos(4 * sit))
        glVertex3f(x,y,0)
    glEnd()


def drawFunc():
    glClearColor(0.0, 0.0, 0.0, 0.0)
    glClear(GL_COLOR_BUFFER_BIT)
    # 改变投影矩阵
    glOrtho(-17.0, 17.0, -18.0, 17.0, -1.0, 1.0)
    drawHeart()
    glFlush()


if __name__ == '__main__':
    glutInit()
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA)
    glutInitWindowSize(400, 400)
    # 参数为b类型而不是string。我查资料时,很多网上代码未指出导致报错。
    glutCreateWindow(b"i love u")
    glutDisplayFunc(drawFunc)
    # glutIdleFunc(drawFunc)
    glutMainLoop()

        学习了前面章节的童鞋肯定能看懂这些代码。至于坐标的产生是根据心形线公式


        这里我重点讲解一下glOrtho()方法。

        glOrtho是创建一个正交平行的视景体。 一般用于物体不会因为离屏幕的远近而产生大小的变换的情况。比如,常用的工程中的制图等。需要比较精确的显示。 而作为它的对立情况, glFrustum则产生一个透视投影。这是一种模拟真是生活中,人们视野观测物体的真实情况。例如:观察两条平行的火车到,在过了很远之后,这两条铁轨是会相交于一处的。还有,离眼睛近的物体看起来大一些,远的物体看起来小一些。


        glOrtho(left, right, bottom, top, near, far), left表示视景体左面的坐标,right表示右面的坐标,bottom表示下面的,top表示上面的。这个函数简单理解起来,就是一个物体摆在那里,你怎么去截取他。这里,我们先抛开glViewport函数不看。先单独理解glOrtho的功能。 假设有一个球体,半径为1,圆心在(0, 0, 0),那么,我们设定glOrtho(-1.5, 1.5, -1.5, 1.5, -10, 10);就表示用一个宽高都是3的框框把这个球体整个都装了进来。  如果设定glOrtho(0.0, 1.5, -1.5, 1.5, -10, 10);就表示用一个宽是1.5, 高是3的框框把整个球体的右面装进来;如果设定glOrtho(0.0, 1.5, 0.0, 1.5, -10, 10);就表示用一个宽和高都是1.5的框框把球体的右上角装了进来。


参考:http://www.cnblogs.com/yxnchinahlj/archive/2010/10/30/1865298.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值