pyglet and opengl -- 纹理映射以及动画
#-*- coding:gbk -*-
#from pyglet.gl import *
from OpenGL.GL import *
import pyglet
from pyglet import clock
from PIL import Image
from ctypes import * def draw_rect(x, y,z,width, height,ang):
"""
实际矩形代码
"""
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glPushMatrix()
glLoadIdentity()
glTranslatef(x+width/2,y+height/2,0.0)
glRotatef(ang,0.0,1.0,0.0)
glBegin(GL_QUADS)
glTexCoord2f(0.0,0.0) #纹理坐标
glVertex3f(x-width/2, y-height/2,z)
glTexCoord2f(1.0,0.0)
glVertex3f(x + width/2, y-height/2,z)
glTexCoord2f(1.0,1.0)
glVertex3f(x + width/2, y + height/2,z)
glTexCoord2f(0.0,1.0)
glVertex3f(x-width/2, y + height/2,z)
glEnd()
glPopMatrix() class Button():
x=y=z=0
width=height=10.0
ang=0
TEXTUREWIDTH=100
TEXTUREHEIGHT=100
image_data=[] #保存纹理数据
def draw(self):
"""
画矩形
"""
draw_rect(self.x,self.y,self.z,self.width,self.height,self.ang) def loadTexture(self):
"""
载入纹理
"""
#创建纹理对象
texid=glGenTextures(1) #绑定纹理
glBindTexture(GL_TEXTURE_2D,texid)
glPixelStorei(GL_UNPACK_ALIGNMENT,1)
#开启纹理功能
glEnable(GL_TEXTURE_2D)
#说明映射方式
glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL)
#设置滤波方式
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST)
#纹理图
glTexImage2D(GL_TEXTURE_2D,0,3,self.TEXTUREWIDTH,self.TEXTUREHEIGHT,0,GL_RGBA,GL_UNSIGNED_BYTE,self.image_data) def load_image(self,imagePath):
"""
读取图像的数据
"""
imageData=Image.open(imagePath)
try:
imageData=imageData.convert('RGB')
self.TEXTUREWIDTH,self.TEXTUREHEIGHT,self.image_data=imageData.size[0],imageData.size[1],imageData.tostring('raw','RGBA',0,-1)
except SystemError:
self.TEXTUREWIDTH,self.TEXTUREHEIGHT,self.image_data=imageData.size[0],imageData.size[1],imageData.tostring('raw','RGBX',0,-1)
assert self.TEXTUREWIDTH*self.TEXTUREHEIGHT*4 == len(self.image_data) class MyWindow(pyglet.window.Window):
def __init__(self):
super(MyWindow,self).__init__()
#按钮
self.button=Button()
self.button.x=10
self.button.y=10
self.button.z=0
self.button.width=self.width/2
self.button.height=self.height/2
self.button.ang=0 #所有要画的图元
self.need_draw=[
self.button,
]
def on_draw(self):
"""
画图,刷新
"""
self.clear()
for draw_object in self.need_draw:
draw_object.draw()
def value_change(self,dt):
self.button.x+=10.0 if __name__ == "__main__":
wn=MyWindow()
wn.button.load_image('tex.jpg')
wn.button.loadTexture()
clock.schedule_interval(wn.value_change,0.5)
pyglet.app.run()
pyglet and opengl -- 纹理映射以及动画的更多相关文章
- 基于Opengl的太阳系动画实现
#include <GL\glut.h> float fEarth = 2.0f;//地球绕太阳的旋转角度float fMoon = 24.0f;//月球绕地球的旋转角度 void Ini ...
- opengl纹理映射总结
大概步骤: 1.创建纹理对象,并为他指定一个纹理. 2.确定纹理如何应用到每个像素上. 3.启用纹理贴图 4.绘制场景,提供纹理和几何坐标 过滤:由于我们提供的纹理图像很少能和最终的屏幕坐标形成对应, ...
- OpenGL—Android 开机动画源码分析二
引自http://blog.csdn.net/luoshengyang/article/details/7691321/ BootAnimation类的成员函数的实现比较长,我们分段来阅读: 第三个开 ...
- OpenGL—Android 开机动画源码分析一
.1 Android开机动画实现方式目前实现Android开机动画的方式主要是逐帧动画和OpenGL动画. ?逐帧动画 逐帧动画是一种常见的动画形式(Frame By Frame),其原理是在“连续的 ...
- 第06课 OpenGL 纹理映射
纹理映射: 在这一课里,我将教会你如何把纹理映射到立方体的六个面. 学习 texture map 纹理映射(贴图)有很多好处.比方说您想让一颗导弹飞过屏幕.根据前几课的知识,我们最可行的办法可能是很多 ...
- openGL纹理映射参数解析
GLuinttexture[1]; AUX_RGBImageRec *TextureImage[1]; Status=TRUE; // Set The Status To TRUE glGenText ...
- [OpenGL]用OpenGL制作动画
//在窗口内绘制一个移动的矩形 /*我们通常还可以用OpenGL程序创建动画效果,这里我们利用前面的例子,绘制正方形,并使这个正方形在窗口的边框反弹.这里需要创建一个循环,在每次调用显示回调函数之前改 ...
- opengl入门学习
OpenGL入门学习 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640 ...
- OpenGL入门学习(转)
OpenGL入门学习 http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html 说起编程作图,大概还有很多人想起TC的#includ ...
随机推荐
- 2016.3.30 OneZero站立会议
会议时间:2016年3月30日 13:00~13:20 会议成员:冉华,张敏,王巍,夏一鸣. 会议目的:汇报前一天工作,全体成员评论,确定会议内容或分配下一步任务. 会议内容: 1.汇报头一天工作情 ...
- 对我们最常用的软件QQ的看法
QQ聊天软件是我使用的第一款聊天软件,早在我上小学6年级的时候就开始接触这款软件了,可以说是陪伴我最久的一款软件. 相对于其他的聊天软件,QQ更加的方便,使用简单,界面也好操作,所以我爱上了这款软件. ...
- linux及安全第五周总结
给MenuOS增加time和time-asm命令 中间过程已省略了,我们所做的只是将menu更新 具体命令如下 rm menu -rf 强制删除 git clone http://github.com ...
- Linux实践二:模块
一.基本模块的实现: 1.进程遍历打印输出 2.简单地编写一个新的系统调用(替换空的系统调用号) 基本模块学到的知识点: 1.相关指令 make oldconfig 配置内核 make 编译内核 ma ...
- pom.xml mevan 的 配置文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- Undertow的InMemorySessionManager
https://github.com/undertow-io/undertow/blob/master/core/src/main/java/io/undertow/server/session/In ...
- Eclipse布局问题小记
当Eclipse的Debug,Console(简称工具条)页面被误操作到占据整行时,通过点击工具条的非选项卡部分,然后向代码区域拖动,即可得恢复非单独行模式.
- [学习笔记]Ubuntu下安装配置SQLSERVER2017
摘要自微软官网: https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-ubuntu 安装步骤: 1. 导入公共秘 ...
- input 的 oninput onkeypress onkeydown onchange 事件的区别
事件执行顺序: <input type="text" id="foo" onkeydown="console.log('down')" ...
- 【题解】Hanoi双塔问题
题目描述 给定A,B,C三根足够长的细柱,在A柱上放有2n个中间有空的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形).现要将这些圆盘移到C柱上, ...