2019年8月11日日曜日
pyopengl opengl 四角形にチェッカー模様のテクスチャを貼り付ける
#!/usr/bin/env python
#coding:utf-8
# [2019-08-02]
#参考サイト
#グラフィックス科学演習 #テクスチャ
#http://web.wakayama-u.ac.jp/~wuhy/GSS/07.html#8.1
#PyOpenGL 6 テクスチャ
#http://www.not-enough.org/abe/manual/api-aa09/pyopengl6.html
#テクスチャマッピング
# http://www.oit.ac.jp/is/L231/~whashimo/Article/OpenGL/Chapter7/index.html
#テクスチャマッピング(Texture Mapping)
#http://www.oit.ac.jp/is/L231/~whashimo/Article/OpenGL/Chapter7/index.html
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
import sys
TEX_HEIGHT = 16
TEX_WIDTH = 16
#テクスチャサイズの16×16とその一つ一つの画素にRGBAの4バイトを割り当て
#ている
image = [[[0 for i in range(4)] for j in range(TEX_WIDTH)]
for k in range(TEX_HEIGHT)]
#テクスチャの準備
#テクスチャのサイズは縦横とも2の累乗になっていなければならない
def initTexture():
for i in range(TEX_HEIGHT):
for j in range(TEX_WIDTH):
#2で割り切れる場合1そうでない場合0
#以下ビット演算だからi=1,2,3,4,....
#i&0x01 は 1,0,1,0..... ^排他的論理和 1^1=0 0^0=1
#故に i=1 ならc=0,1,0,1....
#故に i=0 ならc=1,0,1,0....
c = ( ((i&0x01)==0)^((j&0x01)==0) )
#RGBには0か255の値、Aには255を入れる
image[i][j][0]= image[i][j][1]= image[i][j][2]=c*255
image[i][j][3]=255
def displayTexPolygon():
glEnable(GL_TEXTURE_2D)
glBegin(GL_QUADS)
glTexCoord2f(0.0, 0.0)
glVertex3f(-5.0,-5.0, 0.0)
glTexCoord2f(0.0, 1.0)
glVertex3f(-5.0, 5.0, 0.0)
glTexCoord2f(1.0, 1.0)
glVertex3f( 5.0, 5.0, 0.0)
glTexCoord2f(1.0, 0.0)
glVertex3f( 5.0,-5.0, 0.0)
glEnd()
glDisable(GL_TEXTURE_2D)
def display():
spin=0.0
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
glPushMatrix()
glTranslatef(0.0, 0.0,-20.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)
initTexture()
#以下一行コメントアウトしても問題なかった
#glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
#imageのリストの設定では画素はRGBAで表しているので
#引数は4ではないか 4でもなんら問題なかった。
#glPixelStorei(GL_UNPACK_ALIGNMENT, 4)
#glPixelStorei(GL_UNPACK_ALIGNMENT, 4)
#別のコードでも1でも4でもglPixelStoreiがなかろうが関係なしだっ#た。
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 ("テクスチャ")
init()
glutIdleFunc(display)
glutDisplayFunc(display)
glutReshapeFunc(reshape)
glutMainLoop()
if __name__ == "__main__":
main()
~
~
~
~
~
~
~
~
~
~
~
~
~
~
登録:
コメントの投稿 (Atom)
About
リンク
連絡フォーム
ブログ アーカイブ
-
▼
2019
(66)
-
▼
8月
(11)
- pyopengl pyopengl ウォークスルー 視点の移動 動き回る
- opengl pyopengl glLogicOpの使い方
- opengl pyopengl jpg画像ファイルをテクスチャとして貼る
- opengl pyopengl tga画像ファイルをテクスチャで貼り付ける
- OpenGLのtgaファイルをテクスチャとして貼る
- g++コンパイルでエラー 文字列定数から「char *」への非推奨の変換
- opengl コンパイラオプション
- pyopengl opengl 四角形にチェッカー模様のテクスチャを貼り付ける2
- pyopengl opengl 四角形にチェッカー模様のテクスチャを貼り付ける
- pyopengl 立方体が2つマウス操作で回転、 チェス盤のテクスチャを立方体に貼る
- pyopenglでロボットアーム作成 opengl
-
▼
8月
(11)
0 件のコメント:
コメントを投稿