计算机图形学作业 - 运用PyOpenGL使用区域填充的递归算法(种子填充)绘制“明”字

2017/04/18
惊奇的发现使用不同的显卡取色数值竟然不同……
请在Intel集显下运行这段代码。
使用GTX 870M运行该段代码则无法正常填色,原因是getpixel()得到的数值和使用Intel集显时的不同!

第二次图形学作业,使用Python的PyOpenGL库,运用区域填充的递归算法(种子填充)绘制“明”字
用了三个小时,踏遍无数坑终于搞定(PyOpenGL相关资料实在太少)

《计算机图形学作业 - 运用PyOpenGL使用区域填充的递归算法(种子填充)绘制“明”字》

from OpenGL.GL import *  
from OpenGL.GLU import *  
from OpenGL.GLUT import * 
a=0 #Times
import sys
sys.setrecursionlimit(1000000) #Crack recursion limit

def draw():
    glClear(GL_COLOR_BUFFER_BIT)
    glBegin(GL_LINE_LOOP)
    glColor3f(1.0,0.0,0.0)
    glVertex2i(-30,-20)
    glVertex2i(-30,30)
    glVertex2i(0,30)
    glVertex2i(0,-20)
    glEnd()

    glBegin(GL_LINE_LOOP)
    glColor3f(1.0, 0.0, 0.0)
    glVertex2i(-10,10)
    glVertex2i(-10,20)
    glVertex2i(-20,20)
    glVertex2i(-20,10)
    glEnd()

    glBegin(GL_LINE_LOOP)
    glColor3f(1.0, 0.0, 0.0)
    glVertex2i(-10, 0)
    glVertex2i(-20, 0)
    glVertex2i(-20, -10)
    glVertex2i(-10, -10)
    glEnd()

    glBegin(GL_LINE_LOOP)
    glColor3f(1.0, 0.0, 0.0)
    glVertex2i(10, 40)
    glVertex2i(40, 40)
    glVertex2i(40, -40)
    glVertex2i(30, -40)
    glVertex2i(30, -10)
    glVertex2i(20, -10)
    glVertex2i(20, -40)
    glVertex2i(10, -40)
    glEnd()

    glBegin(GL_LINE_LOOP)
    glColor3f(1.0, 0.0, 0.0)
    glVertex2i(20, 20)
    glVertex2i(20, 30)
    glVertex2i(30, 30)
    glVertex2i(30, 20)
    glEnd()

    glBegin(GL_LINE_LOOP)
    glColor3f(1.0, 0.0, 0.0)
    glVertex2i(20, 10)
    glVertex2i(30, 10)
    glVertex2i(30, 0)
    glVertex2i(20, 0)
    glEnd()

    fill(-5,20,255)
    fill(10,10,255)

def fill(x,y,boundaryvalue):
    global a
    a=a+1
    print a
    if getpixel(x,y)!=boundaryvalue:
        setpixel(x,y)
        fill(x,y-1,boundaryvalue)
        fill(x,y+1,boundaryvalue)
        fill(x-1,y,boundaryvalue)
        fill(x+1,y,boundaryvalue)

def setpixel(x,y):
    glBegin(GL_POINTS)
    glColor3f(1.0, 0.0, 0.0)
    glVertex2i(x,y)
    glEnd()
    glFlush()
def getpixel(x,y):
    a = (GLuint * 1)(0)
    glReadPixels(x+100, y+100, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, a)
    return int(a[0])

glutInit()
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB)
glutInitWindowSize(200,200)
glutCreateWindow("HiddenStrawberry")
glLoadIdentity()
gluOrtho2D(-100,100,-100,100)
glutDisplayFunc(draw)
glutMainLoop()
    原文作者:递归算法
    原文地址: https://blog.csdn.net/a1317171753/article/details/70229969
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞