zoukankan      html  css  js  c++  java
  • pyglet and opengl -- 纹理映射以及动画

      1 #-*- coding:gbk -*-
      2 #from pyglet.gl import *
      3 from OpenGL.GL import *
      4 import pyglet
      5 from pyglet import clock
      6 from PIL import Image
      7 from ctypes import *
      8 
      9 def draw_rect(x, y,z,width, height,ang):
     10     """
     11     实际矩形代码
     12     """
     13     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
     14     glPushMatrix()
     15     glLoadIdentity()
     16     glTranslatef(x+width/2,y+height/2,0.0)
     17     glRotatef(ang,0.0,1.0,0.0)
     18     glBegin(GL_QUADS)
     19     glTexCoord2f(0.0,0.0)  #纹理坐标
     20     glVertex3f(x-width/2, y-height/2,z)
     21     glTexCoord2f(1.0,0.0)
     22     glVertex3f(x + width/2, y-height/2,z)
     23     glTexCoord2f(1.0,1.0)
     24     glVertex3f(x + width/2, y + height/2,z)
     25     glTexCoord2f(0.0,1.0)
     26     glVertex3f(x-width/2, y + height/2,z)
     27     glEnd()
     28     glPopMatrix()
     29     
     30 
     31 class Button():
     32     x=y=z=0
     33     width=height=10.0
     34     ang=0
     35     TEXTUREWIDTH=100
     36     TEXTUREHEIGHT=100
     37     image_data=[] #保存纹理数据
     38     def draw(self):
     39         """
     40         画矩形
     41         """
     42         draw_rect(self.x,self.y,self.z,self.width,self.height,self.ang)
     43 
     44     def loadTexture(self):
     45         """
     46         载入纹理
     47         """
     48         #创建纹理对象
     49         texid=glGenTextures(1)        #绑定纹理
     50         glBindTexture(GL_TEXTURE_2D,texid)
     51         glPixelStorei(GL_UNPACK_ALIGNMENT,1)
     52         #开启纹理功能
     53         glEnable(GL_TEXTURE_2D)
     54         #说明映射方式
     55         glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL)
     56         #设置滤波方式
     57         glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST)
     58         glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST)
     59         #纹理图
     60         glTexImage2D(GL_TEXTURE_2D,0,3,self.TEXTUREWIDTH,self.TEXTUREHEIGHT,0,GL_RGBA,GL_UNSIGNED_BYTE,self.image_data)
     61 
     62 
     63     def load_image(self,imagePath):
     64         """
     65         读取图像的数据
     66         """
     67         imageData=Image.open(imagePath)
     68         try:
     69             imageData=imageData.convert('RGB')
     70             self.TEXTUREWIDTH,self.TEXTUREHEIGHT,self.image_data=imageData.size[0],imageData.size[1],imageData.tostring('raw','RGBA',0,-1)
     71         except SystemError:
     72             self.TEXTUREWIDTH,self.TEXTUREHEIGHT,self.image_data=imageData.size[0],imageData.size[1],imageData.tostring('raw','RGBX',0,-1)
     73         assert self.TEXTUREWIDTH*self.TEXTUREHEIGHT*4 == len(self.image_data)
     74 
     75 
     76 
     77         
     78 class MyWindow(pyglet.window.Window):
     79     def __init__(self):
     80         super(MyWindow,self).__init__()
     81         #按钮
     82         self.button=Button()
     83         self.button.x=10
     84         self.button.y=10
     85         self.button.z=0
     86         self.button.width=self.width/2
     87         self.button.height=self.height/2
     88         self.button.ang=0
     89 
     90         #所有要画的图元
     91         self.need_draw=[
     92                 self.button,
     93                             ]
     94     def on_draw(self):
     95         """
     96         画图,刷新
     97         """
     98         self.clear()
     99         for draw_object in self.need_draw:
    100             draw_object.draw()
    101     def value_change(self,dt):
    102         self.button.x+=10.0
    103         
    104 
    105     
    106         
    107 
    108 if __name__ == "__main__":
    109     wn=MyWindow()
    110     wn.button.load_image('tex.jpg')
    111     wn.button.loadTexture()
    112     clock.schedule_interval(wn.value_change,0.5)
    113 pyglet.app.run()
  • 相关阅读:
    第一次用NUnitAsp
    IT能够解决所有的商业问题吗?
    在这种东西里面,你会自在吗?
    看了段.net show之后的感想
    获取当前数据库中所有表的记录数
    对瀑布模型各阶段的解释
    Linux内核中的slab/slob/slub 在搞晕前先记下来
    分布式事务AT、TCC、Saga、XA 模式分析对比
    读懂Windows的“虚拟内存”为你量身定制
    示范NTFS 卷上的硬链接
  • 原文地址:https://www.cnblogs.com/yinwei-space/p/4605438.html
Copyright © 2011-2022 走看看