ウィンドウ名がちがってますね
X
#!/usr/bin/env python
#coding:utf-8
#ファイル名 texture_raw.py
#参考サイト
#OpenGl勉強会用資料のページ テクスチャマッピング
# http://www.oit.ac.jp/is/L231/~whashim^U/Article/OpenGL/Chapter7/index.html
#OpenGL de プログラミング
# https://seesaawiki.jp/w/mikk_ni3_92/d/TGA%B2%E8%C1%FC%C6%C9%A4%DF%B9%FE%A4%DF
#OpenCVで画像を読み込んでOpenGLで表示
# http://blog.livedoor.jp/tmako123-programming/archives/16882784.html
"""
@@@ rawファイルをテクスチャとして貼る
@@@ rawファイル作成しました
rawファイルにはそれ自身にはファイルの縦横のピクセル数、rgbかrgbaか
のデータがないので作成者が覚えていないとだめ
ウェブ上でjpgファイル等をrawファイルに変換したけれど、それではだめだっ
た。
rawファイル作成方法
床井研究室
http://marina.sys.wakayama-u.ac.jp/~tokoi/?date=20040913
Photoshop(Elements でも可)や GIMP などを使って,テクスチャに使う画像
を作ります.画像のモードは,ここでは「RGB モード」にします.また画像の
サイズは,縦横 256×256 とか 512×128 という風に,2n 画素にします.
OpenGL のテクスチャマッピングにおけるこの制限は,テクスチャを部分的に
置き換える glTexSubImage2D() を使うならあまり気にする必要はありません
.また OpenGL 2.0 では,この制限自体が撤廃されています.しかし,ここで
はこの OpenGL の伝統的なマナーに従うことにします.
と述べれているけれど素人には簡単すぎてわからない。
[GIMP] GIMPでRAWデータを作る
http://www.cho-design-lab.com/2015/05/21/gimp-raw-image/
でrawファイルのどんな画像なのかわかってよかった。
この方法でraw画像を作成した。
画像が上下反転してしまう。
https://nemumitakamaru.hatenablog.com/entry/2018/12/24/115151
ねむみ高まる
が参考になる。
面倒なのでopenCVで画像を反転さそうとしたらrawファイルは
受け付けないようだ。
ごく普通に座標の割当を上下逆にする。
"""
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
import sys
spin=0.0
#jpgファイルの場合texturesクラスを使わないでやろう
##画像ファイル管理用構造体もどき
##ダミーで数値を入れる
class textures:
imageData = [] #イメージデータ(32ビットまで)
width = 256 # 横幅
height = 256 # 高さ
bytesPerPixel = 3
texID = 0 #ID(複数使用時)
#rawファイル読み込み
def Loadim(texture, filename):
imagesize = texture.width * texture.height * texture.bytesPerPixel
tmp = 0
type = GL_RGB
flg_ferror = 0
#rgbaなら4 rgbなら1?
glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
try:
f = open(filename, 'rb')
except:
print "画像ファイル読み込めませんでした。"
flg_ferror = 1
sys.exit()
for size in range(imagesize):
byt = f.read(1)
#ファイルのeofにきた。
if byt == '':
flg_ferror = 1
break
acode = ord(byt)
texture.imageData.append(acode)
imagesize = len(texture.imageData) + 1
if flg_ferror == 1:
f.close()
f.close()
#テクスチャ作成 IDで分ける
glGenTextures(1, texture.texID)
#バインドなど
glBindTexture(GL_TEXTURE_2D, texture.texID)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
glTexImage2D(GL_TEXTURE_2D, 0, type,
texture.width, texture.height,
0, type, GL_UNSIGNED_BYTE, texture.imageData)
def displayTexPolygon():
#テクスチャマッピングを有効にしておきます
#左下が0,0 だがそうすると画像が上下反転してしまう
glEnable(GL_TEXTURE_2D)
glBegin(GL_QUADS)
glTexCoord2f(0.0, 1.0)
glVertex3f(-5.0,-5.0, 0.0)
glTexCoord2f(0.0, 0.0)
glVertex3f(-5.0, 5.0, 0.0)
glTexCoord2f(1.0, 0.0)
glVertex3f( 5.0, 5.0, 0.0)
glTexCoord2f(1.0, 1.0)
glVertex3f( 5.0,-5.0, 0.0)
glEnd()
glDisable(GL_TEXTURE_2D)
def display():
global spin
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
glPushMatrix()
glTranslatef(0.0, 0.0,-7.0)
glRotatef(spin, 0.0, 1.0, 0.0)
glColor3f(1.0, 1.0, 1.0)
displayTexPolygon()
spin+=1.0
glPopMatrix()
glFlush()
glutSwapBuffers()
def init() :
glClearColor(0.0, 0.0, 0.0, 0.0)
glDepthFunc(GL_LEQUAL)
glEnable(GL_DEPTH_TEST)
#サイコロの1から6までの画像 後で1だけ取り出す
#Loadim("dice.jpg")
#Loadim("test0_texture.jpg")
#Loadim(textures, "test0_22.raw")
Loadim(textures, "raw_make2.data")
#initTexture()
#glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
#glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT)
#glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT)
#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, GL_RGBA, TEX_WIDTH, TEX_HEIGHT,
# 0, GL_RGBA, GL_UNSIGNED_BYTE, image)
def reshape(w, h):
glViewport(0, 0, w, h)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glFrustum(-5.0, 5.0,-5.0, 5.0, 5.0, 500.0)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
def main():
glutInit(sys.argv)
glutInitDisplayMode (GLUT_DEPTH|GLUT_DOUBLE|GLUT_RGBA)
glutInitWindowSize (250, 250)
glutInitWindowPosition (100, 100)
glutCreateWindow ("tgaファイルテクスチャ")
init()
#glutIdleFunc(display)
glutDisplayFunc(display)
glutReshapeFunc(reshape)
glutMainLoop()
if __name__ == "__main__":
main()
187,2-5 末尾
0 件のコメント:
コメントを投稿