2016-12-21 5 views
-1

私はOpenGLとC++のプロジェクト(少しの2Dゲーム)に取り組んでいます。現在はフォントレンダリングを実装中です。私はFreeTypeを使ってフォントファイルとグリフを処理しています。グリフをスクリーンにレンダリングしました。しかし、グリフは上下逆さまに見え、スプライトは正しい方法です。スプライトのフリータイプのテキストを逆さまにして

テクスチャCOORDS(これらはVAOにその後VBOに入る)

vec2 uv_topLeft(0.0, 0.0); 
vec2 uv_topRight(1.0, 0.0); 
vec2 uv_bottomRight(1.0, 1.0); 
vec2 uv_bottomLeft(0.0, 1.0); 

uvs.push_back(uv_topLeft); 
uvs.push_back(uv_bottomLeft); 
uvs.push_back(uv_bottomRight); 
uvs.push_back(uv_bottomRight); 
uvs.push_back(uv_topRight); 
uvs.push_back(uv_topLeft); 

iはNDC座標に頂点位置を変換するために使用whcih私は射影行列を有します。

射影行列:(window_heightにより= 960、WINDOW_HEIGHT = 640)
GLM ::オルト(0.0、(二重)window_heightにより、0.0、(二重)WINDOW_HEIGHT)。

Picture of game with sprites and text

私はOpenGLとFreetypeのは、異なる座標系を使用することをどこかで見たことは本当ですか?

+0

[mcve]で編集します。 FreeTypeグリフをOpenGLにアップロードする方法、またはテクスチャの座標と行列の変換方法を設定していますか? – genpfault

答えて

0

これらのフォントは、実際には2つの三角形で構成される長方形に塗りつぶされたテクスチャです。行列の乗算によってそれらを回転させる必要があります。それはあなたが学習を始めなければならない基本的なOpenGLの仕事です。

+0

これを行うと、周りのジプスが反転しますが、スプライトをフリップさせるので、同じレンダリング/シェーダパイプラインを使用してスプライトをレンダリングすると何も成し遂げられません。幾何学的形状 – BinaryMatrix

+0

私はこれを行うことができましたが、それは私が望むものを達成するための非常にハッキーでエレガントな方法です。私は彼らが私(opengl、c +、freetype)と同じ技術を使用しているのを見ているビデオのように、この方法をやることには消極的であり、彼らのギプスは正しい方法でした。 (ビデオ:https://www.youtube.com/watch?v=Rsdc6I80aFQ&t=2168s) – BinaryMatrix

0

しかし、グリフは上下逆さまに見え、スプライトは正しい方法です。

これは、freetypeとは異なる表記法を使用しているためです。古典的なOpenGLはの底辺として(0,0)を使用します。テクスチャの原点は左上として使用しています。

同じコードを使用してフリータイプのグリフとスプライトの両方の頂点データを生成できるようにするには、1つの規約を決めなければなりません。

これらの表記法は何も意味しません。つまり、(0,0)はglTexImageに入力する最初のテクセルであり、上端または下端が完全にあなた次第であることに注意してください。

+0

私は0,0が左下で右上が1,1になるようにuvsに変更しました。私は頂点を追加する順序を知っているが、グリフは正しい方法であるが、スプライトは上下が逆であることを知っている。 2つの座標系/表記法が異なるため、グリフとスプライトは常に反対にフリップされません。 – BinaryMatrix

+0

慣例を反転させると、画像データを反転させることを意味します。グリフとスプライトの異なるデータを生成しない限り、頂点データを使って修正しようとすることは決してできません。 – derhass

+0

私は別の座標慣習を使用し、グリフのために異なるuvを生成したと答えたのを読んだら問題を修正しようとしましたが、問題は分かっていました。私はそれを解決することができるより良い、よりエレガントな方法があったかどうかを見たいと思った。とにかくありがとう! – BinaryMatrix

0

グリフのために異なるuvを生成したので、正しい方法でクワッドに適用されました。

関連する問題