スポンサーサイト

--年--月--日 --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

シザー領域とビューポート領域

2006年06月27日 23:14

GL のことでちょっとはまったので..._〆(゚▽゚*) メモメモ代わりに残しておきやす。


シザーは Viewport 変換した後のどの部分を持ってくるか?の設定です。
Viewport 変換後のピクセルの位置がシザー領域外だった場合、そこは書き込まれないわけです。
当然、レンダーバッファ(描画領域)以上の設定をしても無意味です。
それに対して Viewport はレンダーバッファのどの領域に書き込むのか?の設定です。
別にレンダーバッファ以上の設定にしてもOKですけど、領域外のピクセルはどうせシザーテストで落ちるので書き込まれません。


わかりにくいので汚いですけど図にたとえます。


Viewport 0, 0, 640, 480
Scissor 0, 0, 640, 480

なら

test1.jpg


こんな感じに絵が出てるとすると、、、




Viewport 0, 0, 640, 480
Scissor 0, 0, 320, 240

に変更すると

test2.jpg


こんな感じに絵が出るわけです。



逆に

Viewport 0, 0, 320, 240
Scissor 0, 0, 640, 480

に変更すると

test3.jpg


こんな感じに絵が出ます。



glScissor で設定する「領域」はカレントのレンダーバッファのどの部分は書き込んでいいのか?の設定、glViewport は描画領域を特定するための処理ということはお分かりいただいたと思います。
これを踏まえて話をします。


それじゃ何が問題なの?ってことですよね。
実はハマった場所はテクスチャに描画した後、そのテクスチャを使う時はまりました。

glBindFramebufferEXT、glFramebufferTexture2DEXT などでテクスチャに書き込む設定をした場合、当たり前ですけど上記のルールが厳密に適応されます。
あるけ は Scissor は何故か一番最後(SwapBuffers 時)に適応されるもんだと思ってました orz
なので、シザーの設定をテクスチャに書き込むときには設定してなかったんですね。
ですから、ウィンドウズのサイズで設定されていたシザーがそのまま適応されてしまい、おかしな具合になってたわけです(´・ω・`)





blog_rank
スポンサーサイト


コメント

    コメントの投稿

    (コメント編集・削除に必要)
    (管理者にだけ表示を許可する)

    トラックバック

    この記事のトラックバックURL
    http://angra.blog31.fc2.com/tb.php/52-b083ebe4
    この記事へのトラックバック


    最近の記事


    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。