1

OpenGLでアプリケーションを作成しています。このアプリケーションでは、glOrtho()左上隅を原点として使用しています。

glOrtho(0.0, width, height, 0.0, 0.0, 1.0);

逆さまに表示されるアウトラインフォントをレンダリングしようとするまで、それが間違っていることに気づきませんでした。それについての情報を検索した後、私は私の起源が左下隅から始まるべきであると読んだサイトに出くわしました。

OpenGLが左下隅の原点を使用していることは知っていましたが、左上の原点を使用する方が簡単であることがわかりました。すべてのテクスチャを水平方向に反転するだけで、すべて問題ありませんでした。しかし、はい、問題は逆さまに表示されているアウトラインフォントで発生しました。

ここで、元の場所を変更するには、一連のコードを変更する必要があるため、必要がない場合は、これを避けたいと思います。

だから私の質問は:左上の原点での私のアプローチは非常に間違っていますか?そうでない場合は、それらのアウトラインフォントを正しく表示する方法はありますか?

4

3 に答える 3

4

そのフォントをどこかにレンダリングしていますよね?どのようにレンダリングしますか?また、その時点で垂直ミラー変換行列を適用することを妨げているのは何ですか?

つまり、これを昔ながらの時代遅れの方法で行っている場合:

glScalef( 1, -1, 1 );
glCallList(font); // Or whatever you are doing to render the outline font

または、シェーダーを使用している場合は、頂点シェーダーに次のような動作をさせます。

  Vec4 position = aPosition;
  position.y = -1 * position.y;
  gl_Position = aMVPMatrix * position

もちろん、これはすべて擬似コードです。

于 2012-12-29T15:00:59.243 に答える
2

ここで、元の場所を変更するには、一連のコードを変更する必要があるため、必要がない場合は、これを避けたいと思います。

いつでもprojectioを変更できます。テキストには左下の原点を使用し、その他すべてには左上の原点を使用します。ただし、テキストの初期位置が反転するように調整する必要がありますが、それを考慮するのはそれほど難しくありません。

または、単にローカルスケール(1、-1,1)を適用することもできます。テキストを上下逆にミラーリングします(テキストライブラリによっては、内部変換の設定に干渉する場合があります)。

于 2012-12-29T15:51:14.970 に答える
1

通常、適切なテクスチャマトリックスを使用することで、データを変更せずにこれを修正できます。

于 2012-12-29T13:22:17.940 に答える