2019年8月21日水曜日

opengl pyopengl glLogicOpの使い方




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()
~                                                                                         
~                                                                                         
~                                                                                         
~                                                                                         
~                                                                                         
~                                                                                         
~                                                                                         
~                                                                                         
~                                                                                         
~                                                                                         
~                                                                                         
~                                                                                         
~                                                                                         
~                                                                                         
~                                                                                         
~                                                                                         
~                                                                                         
~                                                                                         
~                                                                                         
~                                                                                         
~                                                                                         
~                                                                                         
~                                                        

0 件のコメント:

コメントを投稿

About

参加ユーザー

連絡フォーム

名前

メール *

メッセージ *

ブログ アーカイブ

ページ

Featured Posts