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

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

第二次图形学作业,使用Python的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()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值