mieki256's diary



2024/05/28(火) [n年前の日記]

#1 [prog] OpenGLのglBitmap()関係を再勉強中

_以前作ったスクリーンセーバ を、サブPC上で動かしてみたところ、FPSやテキストメッセージが表示されなくて悩んでしまった。OpenGLを利用しているスクリーンセーバで、文字描画には glBitmap() を利用しているのだけど…。不具合を解決できないか色々調べていた。

ちなみに、メインPC(GeForce GTX 1060 6GB)上では文字描画ができている。サブPCは AMD製オンボードGPU(Radeon R3, GCN世代)だからダメなのだろうか…?

z値関連を修正してみた :

glOrtho() に指定している zNear と zFar の範囲が広すぎて、z値の分解能?に問題が出ているのだろうか。そのあたりをギリギリ狭くするように修正してみた。

また、フェードイン、フェードアウト用のポリゴンを描画する際のz値や、glBitmap() を呼ぶ際のz値を、0.001単位ではなく、1.0単位でずらすように修正してみた。

そもそも、デプステストで問題が起きているのであれば、デプステストを止めてしまえばいいのではないか…。glBitmap() を使う時だけ、glDisable(GL_DEPTH_TEST) を呼んで無効化してみた。

色々試してたら、文字描画がされるようになった。どこが効いてくれたのかよく分かってないけど…。

glBitmap()の色が反映されない :

一応文字描画はされるようになったけれど、文字の色が何故か黒になってしまう。白で描画するように指定しているはずなのに…。

改めて調べたところ、OpenGL には描画色とラスター色という2つの概念があるそうで。一般的なポリゴンは描画色で描画されるけど、glBitmap() はラスター色で描画されるらしい。

そのラスター色は何を使って指定するのかというと…。glColor() 等の描画色指定関数を呼んでおいた状態で、glRasterPos*() 系を呼ぶことで、描画色がラスター色として設定されて、その色でロックされる、ということらしい。

_Coloring a bitmap - OpenGL Wiki
_glColor not being used by glBitmap - OpenGL / OpenGL: Basic Coding - Khronos Forums

つまり、glColor4f() を呼んでから glRasterPos3f() を呼ぶ、といった順番なら問題ないはず。逆の順番では反映されない。

ただ、今回、順番はあっているのだよな…。

他にも調べてみたところ、「照明を無効化せよ」という話も見かけた。となると、マテリアルの利用も無効化しておいたほうがいいだろうか…。そのあたりごっそり無効化してみた。
    glDisable(GL_LIGHTING);
    glDisable(GL_LIGHT0);
    glDisable(GL_COLOR_MATERIAL);
    glDisable(GL_DEPTH_TEST);
    glDisable(GL_TEXTURE_2D);

この状態で、ようやく指定した色で文字描画されるようになった。

白線の高さも修正 :

道路の上に置いて描画している白線のポリゴンも、サブPC上ではチラチラしてしまっている。道路のポリゴンと距離が近すぎるのではないか…。

これも、+0.01 ほどずらしてたところを、+1.0 でずらしてみた。これならチラつかない描画になった。見た目が不自然になるかなと思ったけれど、特に気にならない感じなので、これでいいかな…。

以上です。

過去ログ表示

Prev - 2024/05 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project