计算机图形学作业

来源:互联网 发布:云计算企业投融资政策 编辑:程序博客网 时间:2024/05/29 16:18

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 #Timesimport syssys.setrecursionlimit(1000000) #Crack recursion limitdef 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 0
原创粉丝点击