python opengl_从Python开始,学习OpenGL(一)

先回答几个问题:为什么不使用C++呢?C++是不可能使用C++的,这辈子都不可能使用C++的。裸指针满天飞,新标准又不会用,用Python调调库岂不是美滋滋。既然这么懒还写个P文章啊?用的库名字叫pyglet,中文资料很少,英文资料也只有官方文档而已。出于好心做好事,决定写一下我是如何一步一步,在完全没有学过图形学的情况下,一步一步撸出一个能动起来的东西的。

一、开始正题安装

最简单的方式

pip install pyglet

GitHub下载,安装

sudo python setup.py installHelloWorld

import pyglet

window = pyglet.window.Window()

label = pyglet.text.Label('Hello, world',

font_name='Times New Roman',

font_size=36,

x=window.width // 2, y=window.height // 2,

anchor_x='center', anchor_y='center')

@window.event

def on_draw():

window.clear()

label.draw()

pyglet.app.run()

效果如下,解释略

如果要画点什么的话,用下面的参数方程画个曲线

from math import sin, cos, sqrt

import pyglet

from pyglet.gl import *

def vec(*args):

return (GLfloat * len(args))(*args)

class GameEventHandler(object): # 这里用GameEventHandler把事件包装了一下

rx, ry = 0, 0

track = []

def on_draw(self):

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

# glLoadIdentity()

position = (sin(integral_drift[0] / 2) / sqrt(integral_drift[0]),

cos(integral_drift[1] / 2) / sqrt(integral_drift[1]))

self.track.append(position)

glColor3f(1, 1, 1)

glBegin(GL_LINE_STRIP)

for v in self.track:

glVertex3f(v[0], v[1], 0)

glEnd()

@staticmethod

def on_resize(width, height):

return pyglet.event.EVENT_HANDLED

def scene_init():

# One-time GL setup

glClearColor(0, 0, 0, 1)

glEnable(GL_DEPTH_TEST)

glEnable(GL_CULL_FACE)

glEnable(GL_BLEND) # 启用混合功能,将图形颜色同周围颜色相混合

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

glEnable(GL_POLYGON_SMOOTH) # 多边形抗锯齿

# glHint(GL_POLYGON_SMOOTH, GL_NICEST)

glEnable(GL_LINE_SMOOTH) # 线抗锯齿

# glHint(GL_LINE_SMOOTH_HINT, GL_NICEST)

glEnable(GL_POINT_SMOOTH) # 点抗锯齿

# glHint(GL_POINT_SMOOTH, GL_NICEST)

pass

def update(dt):

delta_x = 5 * dt

delta_y = 5 * dt

delta_z = 5 * dt

integral_drift[0] += delta_x

integral_drift[1] += delta_y

integral_drift[2] += delta_z

pass

window = pyglet.window.Window(resizable=True)

scene_init()

integral_drift = [0.1, 0.1, 0.1] # 位移的总和

window.push_handlers(GameEventHandler())

pyglet.app.event_loop.clock.schedule(update) # 单位时间触发update

pyglet.app.run()感觉没什么好解释的,它是会动起来的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值