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 ...
随机推荐
- JQuery监听页面滚动总结
1.当前滚动的地方的窗口顶端到整个页面顶端的距离: var winPos = $(window).scrollTop(); 2.获取指定元素的页面位置: $(val).offset().top; 3. ...
- 广商博客冲刺第六七天new
第四五天沖刺傳送門 第一版的網頁已經放到 云服務器(估計快到期了) 傳送門. (不怎么會玩服務器啊..求指教..目前問題如下: 1.我的電腦mysql密碼跟服務器的密碼不一樣..上傳的時候要把代碼里面 ...
- vue js 在组件中对数组使用splice() 遇到的坑。。。
遇到的问题: 用el-dialog写了个子组件 要实现在子组件中增删数据 点击确定后把值返回给父组件 父组件在每次点开子组件时都会把自己的值传进去. //父组件传值 this.$refs.transf ...
- Selenium IDE 宏 试用 一例
本质是宏(Macro)理念 Marco概念的广泛应用: 1.Office的Excel里的任何操作的 可以都可以用VBA编程记录下宏,然后把记录的宏,可以回放.当然也可以生成代码,比如给Excel设置单 ...
- [转帖]DevOps/TestOps概念
发现收藏不好用..还是转吧.. https://www.cnblogs.com/fnng/p/8232410.html DevOps/TestOps概念 2018-01-07 22:02 by 虫师, ...
- [读书笔记]SQLSERVER企业级平台管理实践读书笔记01
1. SQLSERVER信息收集 SQLDIAG 使用界面 C:\Users\Administrator>sqldiag2018/01/02 08:13:26.10 SQLDIAG Collec ...
- MyBatis是如何解决Sql注入的
转:[转]mybatis如何防止sql注入 java中预处理PrepareStatement为什么能起到防止SQL注入的作用??!! 一.SQL注入 sql注入大家都不陌生,是一种常见的攻击方式,攻击 ...
- 关于WrapPanel和RadioButton相互配合使用实WrapPanel现动态添加或删除项
最近在做一个项目的时候,有一个需求就是,通过RadioButton来控制一行内容的显示与不显示,当不显示的时候,下面的项能够占住相应的位置,当增加的时候,又会在原来的位置重新显示,如果使用一般的Gri ...
- Delphi编码规范
以下是在之前的公司与别人共同参与制定的Delphi开发规范(5年前了,那时用的还是Delphi7,部分规则可能有些过时,但不整理了,觉得有用的人,自己整理成适合自己的开发规范吧), 目 录一.序 ...
- PHP IF ELSE简化/三元一次式的使用
一般我们会这样写: <? if($_GET['time']==null) { $time = time(); } else { $time = $_GET['time']; } echo $ti ...