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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BigBoySunshine/article/details/80327757

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


代码如下:

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

猜你喜欢

转载自blog.csdn.net/BigBoySunshine/article/details/80327757
今日推荐