Begin OpenGL with Python-1st Day,draw a simple sample.

某个老板忽然有一天想到要画3D图,于是作者遭殃了……

OK,首先需要Python和pyopengl……

然后需要一块支持OpenGL的显卡,我不是开玩笑,我第一个程序夭折就是因为显卡不支持。

《OpenGL编程指南》这本书很值得参考。

  1. 初始化glut
  2. 设置显示模式
  3. 创建窗口
  4. 要做的事情
  5. 主循环

首先画一个点:

drawFunc里面显示的是画图的函数。

from OpenGL.GL import *
from OpenGL.GLUT import *

def drawFunc():

glBegin(GL_POINTS)

glVertex2d(0,0)

glEnd()

glFlush()

glutInit()
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA)
glutCreateWindow("second")
glutDisplayFunc(drawFunc)
glClearColor(0.0,0.0,0.0,1.0)
glutMainLoop()



 以下代码用手工画了球上的所有点:

  1. 两个函数drawFunc是用来画图
  2. get_param是用来抓行为并进行重绘的。
  3. 我知道用全局变量不大好。这只是试验品。

事实上代码还没完成,但是我要睡觉了。嘿嘿。

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

position=[]
def init():
    glClearColor(0.0,0.0,0.0,1.0)

def drawFunc(theta_ref=0,phi_ref=0):
    number=0
    glClear(GL_COLOR_BUFFER_BIT)
    glBegin(GL_POINTS)
    r=[1]*1000
    for theta in [x/180*math.pi-theta_ref/180*math.pi for x in range(0,360,15)]:
        z=r[number]*math.cos(theta)
        for phi in [x/180*math.pi-phi_ref/180*math.pi for x in range(0,360,15)]:
            x=r[number]*math.sin(theta)*math.cos(phi)
            y=r[number]*math.sin(theta)*math.sin(phi)
            glVertex3f(x,y,z)
            number+=1
    glEnd()
    glFlush()


def get_param(*arg,**args):
    print(globals()['position'])
    if len(arg)==4:
        if arg[1]==0 and globals()['position']==[]:
            globals()['position']=[arg[2],arg[3],arg[2],arg[3]]
        else:
            globals()['position'][2:]=[arg[2],arg[3]]
    if len(arg)==2:
        globals()['position'][0]=globals()['position'][0]+arg[0]-globals()['position'][2]
        globals()['position'][1]=globals()['position'][1]+arg[1]-globals()['position'][3]
        globals()['position'][2]=arg[0]
        globals()['position'][3]=arg[1]
        drawFunc(globals()['position'][0],globals()['position'][1])

glutInit()
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA)
glutInitWindowSize(400,400)
glutCreateWindow("second")
glutMouseFunc(get_param)
glutMotionFunc(get_param)
glutDisplayFunc(drawFunc)
init()
glutMainLoop()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值