#-*- 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 -- 纹理映射以及动画的更多相关文章

  1. 基于Opengl的太阳系动画实现

    #include <GL\glut.h> float fEarth = 2.0f;//地球绕太阳的旋转角度float fMoon = 24.0f;//月球绕地球的旋转角度 void Ini ...

  2. opengl纹理映射总结

    大概步骤: 1.创建纹理对象,并为他指定一个纹理. 2.确定纹理如何应用到每个像素上. 3.启用纹理贴图 4.绘制场景,提供纹理和几何坐标 过滤:由于我们提供的纹理图像很少能和最终的屏幕坐标形成对应, ...

  3. OpenGL—Android 开机动画源码分析二

    引自http://blog.csdn.net/luoshengyang/article/details/7691321/ BootAnimation类的成员函数的实现比较长,我们分段来阅读: 第三个开 ...

  4. OpenGL—Android 开机动画源码分析一

    .1 Android开机动画实现方式目前实现Android开机动画的方式主要是逐帧动画和OpenGL动画. ?逐帧动画 逐帧动画是一种常见的动画形式(Frame By Frame),其原理是在“连续的 ...

  5. 第06课 OpenGL 纹理映射

    纹理映射: 在这一课里,我将教会你如何把纹理映射到立方体的六个面. 学习 texture map 纹理映射(贴图)有很多好处.比方说您想让一颗导弹飞过屏幕.根据前几课的知识,我们最可行的办法可能是很多 ...

  6. openGL纹理映射参数解析

    GLuinttexture[1]; AUX_RGBImageRec *TextureImage[1]; Status=TRUE; // Set The Status To TRUE glGenText ...

  7. [OpenGL]用OpenGL制作动画

    //在窗口内绘制一个移动的矩形 /*我们通常还可以用OpenGL程序创建动画效果,这里我们利用前面的例子,绘制正方形,并使这个正方形在窗口的边框反弹.这里需要创建一个循环,在每次调用显示回调函数之前改 ...

  8. opengl入门学习

    OpenGL入门学习 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640 ...

  9. OpenGL入门学习(转)

    OpenGL入门学习 http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html 说起编程作图,大概还有很多人想起TC的#includ ...

随机推荐

  1. 如何启动Intel VT-X及合理利用搜索

    昨天安装Vmware的时候不幸遇到了Vt-X被禁用的麻烦,上网百度了一下才知道要进入Bois进行设置.说起百度就不得不提到模糊搜索这个概念.这个特性的优点和缺点可谓同等突出,有了模糊搜索大家可以在信息 ...

  2. 网络:Session原理及存储

    一.Session的工作流程 二.会话保持 会话保持是负载均衡最常见的问题之一,会话保持是指在负载均衡器上实现的一种机制,可以识别客户端与服务器之间交互过程的关连性,在作负载均衡的同时还保证一系列相关 ...

  3. Java awt项目开发

    通过Java awt 界面上的知识编写的扫雷游戏 代码中有详细的注解 package com.langsin.saolei; import java.awt.Color;import java.awt ...

  4. 最新一课 老师指点用Listview适配器

    上课前 <?xml version="1.0" encoding="utf-8"?>    <ScrollView xmlns:android ...

  5. CI框架2.x的验证码中所遇问题解决

    用php版本是5.6,CI框架版本是2.x,在使用验证码(captcha)时,遇到一些问题. 首先,我查看框架手册,说必需的两个参数是"img_url",“img_path”,其他 ...

  6. Enterprise Integration Patterns

    https://camel.apache.org/enterprise-integration-patterns.html 企业集成模式,各种模式算法,挺棒的. https://camel.apach ...

  7. Vue 的语法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. [转帖]什么是安全散列算法SHA256?

    什么是安全散列算法SHA256? http://8btc.com/article-136-1.html 发布者: 无主之地 发表于: 2013-10-1 01:31 78152 2 分享   安全散列 ...

  9. Linux常用指令-ssh

    目录 ssh远程登陆 ssh免密码登陆 生成公钥和私钥 将公钥复制到其他从机 文件说明 id_rsa id_rsa.pub authorized_keys known_host SSH(远程连接工具) ...

  10. js數據類型

    js的數據類型有:字符串.數字.布爾型.數組.undfined.null: js擁有動態類型,同樣的變量可以賦值多個類型: 變量賦值可以聲明后賦值,或者聲明時賦值: 字符串: 字符串用單引號或者雙引號 ...