2019年7月3日水曜日

opengl ウィンドウのサイズが変更された時に、glViewport、glOrthoの動作












#coding:utf-8
#ウィンドウのサイズが変更された時に、glViewport、glOrthoの動作がわから
#なかったのでメモ。


#1. 流れ
#ウィンドウサイズ変更
#glutReshapeFunc(resize)
#resize()
#glViewport
#glLoadIdentity
#glOrtho


#2. 以下ファイルで検証
#window_viewport_2_.py

#coding:utf-8
#2010/04/24 09:51〜
#[2019-07-03]更新

#参考サイト
#GLUTによる「手抜き」OpenGL入門
#https://tokoik.github.io/opengl/libglut-old.html
# http://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html#4

#これまでのプログラムでは, ウィンドウのサイズを変更すると表示内容もそれにつれて
#拡大縮小していました. これを表示内容の大きさを変えずに表示領域のみを広げるように
#します

from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *

def display():
        glClear(GL_COLOR_BUFFER_BIT)
        #実際に色を塗る関数
        glColor3d(1.0, 0.0, 0.0)
        #これから描画する物の色を設定する
        #通常なら画面いっぱいに描画するようにする
        glBegin(GL_POLYGON)
        glVertex2d(-1.0, -1.0)
        glVertex2d(1.0, -1.0)
        glVertex2d(1.0, 1.0)
        glVertex2d(-1.0, 1.0)
        glEnd()
        glFlush()

def resize(w, h):
        #libglut4.gif
        #このコードではw,hはデフォルトで300,300
        print w,h

        #glViewportのデフォルトコード
        glViewport(0,0,w,h)


        #glOrthoを以下の四角形がギリギリ見える設定にして
        #glViewportを変化させてみる。------------------------
        #glViewport.png

        #glOrtho(-w/290.0, w/290.0, -h/290.0, h/290.0, -1.0, 1.0)
        #1. ウィンドウの左端下端よりw/2,h/2が描画領域とする。
        #   0,0が左下端を示す。
        #   glViewport00-半分.png
        #glViewport(0,0,w/2,h/2)

        #2. ウィンドウの左端上端よりw/2,h/2が描画領域とする。
        #   glViewport0高さ半分-半分.png
        #glViewport(0,h/2,w/2,h/2)

        #3  glViewport の幅高さをウィンドウより大きくした。
        #   glViewport00-ウィンドウより大きく.png
        glViewport(0,0,w+10,h+10)
        #glViewportを変化させてみる。end -------------------


        glLoadIdentity()


        #glOrthoのデフォルトコード
        #glOrtho_default.png
        #glOrtho(-w/200.0, w/200.0, -h/200.0, h/200.0, -1.0, 1.0)

        #以下glOrthoをなぶる。--------------------------------
        #glOrtho.png
        #1. 100として各数値を2倍にすると視野が2倍となる。
        #   つまり遠くから見た事になり図形が小さくなる
        #   glOrtho_2倍.png
        #glOrtho(-w/100.0, w/100.0, -h/100.0, h/100.0, -1.0, 1.0)

        #2. 各数値を1/2にすると視野が狭くなる。というより画面いっぱい
        #glOrtho(-w/400.0, w/40書いて0.0, -h/400.0, h/400.0, -1.0, 1.0)

        #3. 2で画面いっぱいになったのでもうそこし視野を広げてw,hの300
        #  と同じにしてみる。 -> 画面いっぱい
        #   glOrtho_ウィンドウと同じ.png
        #glOrtho(-w/300.0, w/300.0, -h/300.0, h/300.0, -1.0, 1.0)

        #glVertex2d(-1.0, -1.0)
        #....
        #....
        #と画面いっぱいに図形を書いて glViewport(0,0,w,h)とウィンドウ
        #全体を画像表示に使い glOrtho(-1.0, 1.0,-1.0, 1,0, -1.0, 1.0)
        #と視野をした時図形は画面いっぱいに表示される。

        #4. もう少し視野を広くして四角形が見られるようにする。
        #   glOrtho四角形見える.png
        glOrtho(-w/290.0, w/290.0, -h/290.0, h/290.0, -1.0, 1.0)

        #5. 左端の数値を大きく。-> 左側視野が広くなるがそれを
        #  -1.0, 1.0, -1.0, 1.0 の中に収めるため画像がx軸で縮んで見
        #   える。
        #   glOrtho左端の数値を大きく.png
        #glOrtho(-w/150.0, w/290.0, -h/290.0, h/290.0, -1.0, 1.0)
        #glOrthoをなぶる。 end -------------------------


検索キーワード
pyode

0 件のコメント:

コメントを投稿

About

参加ユーザー

連絡フォーム

名前

メール *

メッセージ *

ブログ アーカイブ

ページ

Featured Posts