0

OpenGL ES 2.0を使い始めたばかりですが、256x256の画像を描画し、ビューポート全体(320x460のサイズ)を塗りつぶすことができました。以下のスクリーンショットのように画像が拡大縮小されますが、これは望ましくありません。指定した2D座標から、たとえば座標(10、10)から座標(266、266)に、元のサイズで画像を描画する必要があります。 、ある種のプロジェクションが必要なようですが、プロジェクションについてはよくわからず、どのように始めればよいのかわかりません。

アドバイスをいただければ幸いです。

編集

これを見つけたところですが、指定した頂点がビューポート全体を埋めているためだとわかりました今私の質問は、どのように画像をテクスチャ座標系にマッピングするかということです。X4つの頂点のそれぞれの座標とY座標を計算して、画像を拡大縮小せずにテクスチャサーフェスにぴったりと合わせるにはどうすればよいですか?

EDIT2

どうもありがとうございました、@ Slartibartfast、それはとても簡単です、私はとても愚かで、そもそもそれを正しく理解できませんでした。

他の誰かがこれを必要とする場合に備えて、左上隅からその小さなかわいいロバを描くために指定した頂点は次のとおりです。

typedef struct {
    float position[2];
    float textureCoor[2];
} Vertex;

const Vertex vertices[] = {
    {{-1, 1}, {0, 0}},
    {{0.6, 1}, {1, 0}},
    {{0.6, -0.113}, {1, 1}},
    {{-1, -0.113}, {0, 1}},
};

const GLubyte indices[] = {
    0, 1, 2,
    2, 3, 0
};

ここに画像の説明を入力してください

4

1 に答える 1

1

私が見る限り。画像を画面に正確にマッピングする場合は、指定する必要がある頂点をそれに応じてスケーリングする必要があります。

X 次元と Y 次元の両方で -1 から 1 までの範囲の座標を使用しました。これで、ビューポートを指定するときにアクセスできる画面全体の寸法が指定されます。画面の寸法を sw と sh、画像の寸法を tw と th とします。

画面の幅(sw)は頂点座標で 2(-1 ~ 1)なので、画像が占める幅は 2*tw/sw となります。同様に高さは 2*th/sh です。

頂点を (-1,-1) から (-1 + 2*tw/sw, -1 + 2*th/sh) の範囲で指定できるようになりました。これにより、画像のスケーリングが維持され、左上隅に描画されます。 .

于 2012-09-12T04:45:44.683 に答える