GLUTによる「手抜き」OpenGL入門
7.2 マウスをドラッグする
https://tokoik.github.io/opengl/libglut.html
のglLogicOpの使いかたがわからなかったのでテストコードを書く
#coding:utf-8
#2010/04/24 07:09〜
#参考サイト
#線を引く
# http://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html#4
#ファイル名glLogicOp_test.py
#@@@ glLogicOpの使い方を調べる
#glLogicOp(GLenum opcode)
#以下いろんなサイトからの引用
#\\\\\\\\
#引数 opcode にはウィンドウに描かれている内容と, これから描こうとする内
#容との間で行う論理演算のタイプを指定します. GL_COPY はこれから描こうと
#する内容をそのままウィンドウ内に描きます. GL_INVERT はウィンドウに描か
#れている内容の, これから描こうとする図形の領域を反転します
#ポリゴンが偶数回描かれたところ最初の色 (背景色) が描かれ, 奇数回描か
#れたところでは反転した色が表示されます.
#\\\\\\\\
#実験結果 #displayのforのループを偶数回にすると線が描かれず、奇数回で描かれる。
# for i in range(1):
# glEnable(GL_COLOR_LOGIC_OP)
# glLogicOp(GL_INVERT)
#
# glBegin(GL_LINES)
# 描画コード
# glEnd()
# glFlush()
#
# glLogicOp(GL_COPY)
# glDisable(GL_COLOR_LOGIC_OP)
#display自体を繰り返しても普通に描かれる。
#設定した色で線がえがかれない
#背景色青時 線白色
#背景色白時 線黒色
#ウィンドウを各台縮小しても変化しません. これはウィンドウの
#x 軸と y 軸の範囲が, ともに [-1, 1] に固定されているからです.
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
import sys
#def display():
# for i in range(3):
# display2()
def display():
print "display"
#実際に色を塗る関数
glClear(GL_COLOR_BUFFER_BIT)
#これから描画する物の色を設定する 赤
glColor3d(1.0, 0.0, 0.0)
for i in range(1):
glEnable(GL_COLOR_LOGIC_OP)
glLogicOp(GL_INVERT)
glBegin(GL_LINES)
glVertex2d(-0.9, -0.9)
glVertex2d(0.9, -0.9)
glVertex2d(0.9, 0.9)
glVertex2d(-0.9, 0.9)
glEnd()
glFlush()
glLogicOp(GL_COPY)
glDisable(GL_COLOR_LOGIC_OP)
def init():
#背景色の指定
glClearColor(1.0, 1.0, 1.0, 1.0)
#glClearColor(0.0, 0.0, 1.0, 1.0)
def keyboard(key, x, y):
if key == 'q' or key == 'Q':
sys.exit()
if key == 'r':
glutPostRedisplay()
def main():
glutInit(sys.argv)
glutInitDisplayMode(GLUT_RGBA)
glutCreateWindow("aka")
glutDisplayFunc(display)
glutKeyboardFunc(keyboard)
init()
#glClearColor() は, プログラムの実行中に背景色を変更する
#ことがなければ, 最初に一度だけ設定すれば十分です. そこ
#でこのような初期化処理を行う関数は, glMainLoop() の前に
#実行する関数 init() にまとめて置くことにします
glutMainLoop()
if __name__ == "__main__":
main()
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
#coding:utf-8
#2010/04/24 07:09〜
#参考サイト
#線を引く
# http://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html#4
#ファイル名glLogicOp_test.py
#@@@ glLogicOpの使い方を調べる
#glLogicOp(GLenum opcode)
#以下いろんなサイトからの引用
#\\\\\\\\
#引数 opcode にはウィンドウに描かれている内容と, これから描こうとする内
#容との間で行う論理演算のタイプを指定します. GL_COPY はこれから描こうと
#する内容をそのままウィンドウ内に描きます. GL_INVERT はウィンドウに描か
#れている内容の, これから描こうとする図形の領域を反転します
#ポリゴンが偶数回描かれたところ最初の色 (背景色) が描かれ, 奇数回描か
#れたところでは反転した色が表示されます.
#\\\\\\\\
#実験結果 #displayのforのループを偶数回にすると線が描かれず、奇数回で描かれる。
# for i in range(1):
# glEnable(GL_COLOR_LOGIC_OP)
# glLogicOp(GL_INVERT)
#
# glBegin(GL_LINES)
# 描画コード
# glEnd()
# glFlush()
#
# glLogicOp(GL_COPY)
# glDisable(GL_COLOR_LOGIC_OP)
#display自体を繰り返しても普通に描かれる。
#設定した色で線がえがかれない
#背景色青時 線白色
#背景色白時 線黒色
#ウィンドウを各台縮小しても変化しません. これはウィンドウの
#x 軸と y 軸の範囲が, ともに [-1, 1] に固定されているからです.
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
import sys
#def display():
# for i in range(3):
# display2()
def display():
print "display"
#実際に色を塗る関数
glClear(GL_COLOR_BUFFER_BIT)
#これから描画する物の色を設定する 赤
glColor3d(1.0, 0.0, 0.0)
for i in range(1):
glEnable(GL_COLOR_LOGIC_OP)
glLogicOp(GL_INVERT)
glBegin(GL_LINES)
glVertex2d(-0.9, -0.9)
glVertex2d(0.9, -0.9)
glVertex2d(0.9, 0.9)
glVertex2d(-0.9, 0.9)
glEnd()
glFlush()
glLogicOp(GL_COPY)
glDisable(GL_COLOR_LOGIC_OP)
def init():
#背景色の指定
glClearColor(1.0, 1.0, 1.0, 1.0)
#glClearColor(0.0, 0.0, 1.0, 1.0)
def keyboard(key, x, y):
if key == 'q' or key == 'Q':
sys.exit()
if key == 'r':
glutPostRedisplay()
def main():
glutInit(sys.argv)
glutInitDisplayMode(GLUT_RGBA)
glutCreateWindow("aka")
glutDisplayFunc(display)
glutKeyboardFunc(keyboard)
init()
#glClearColor() は, プログラムの実行中に背景色を変更する
#ことがなければ, 最初に一度だけ設定すれば十分です. そこ
#でこのような初期化処理を行う関数は, glMainLoop() の前に
#実行する関数 init() にまとめて置くことにします
glutMainLoop()
if __name__ == "__main__":
main()
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
0 件のコメント:
コメントを投稿