1

私は最近OpenGLを学ぶことに夢中になり、これまでのところかなり直感的に思えますが、これは私が立ち往生しています。OpenGLが現在使用しているものではなくピクセルベースの座標系を使用するように設定を変更するにはどうすればよいですか。たとえば、このコードは約10x20ピクセルの長方形を描画します。

glBegin(GL_QUADS); {
     glVertex3f(player.x, player.y, 0);
     glVertex3f(player.x+0.05, player.y, 0);
     glVertex3f(player.x+0.05, player.y+0.1, 0);
     glVertex3f(player.x, player.y+0.1, 0);
}

このコードを作成するにはどうすればよいですか?

glBegin(GL_QUADS); {
     glVertex3f(player.x, player.y, 0);
     glVertex3f(player.x+10.0, player.y, 0);
     glVertex3f(player.x+10.0, player.y+20.0, 0);
     glVertex3f(player.x, player.y+20.0, 0);
}

基本的に同じものを生成しますか?ありがとう。

編集:誰かがどこかでglOrtho()を使用することを提案しているのを見ましたが、彼らはそれを行う方法について何の情報も与えませんでした。これは機能しますか?もしそうなら、私はそれをどのように行いますか?

4

1 に答える 1

2

簡単に聞こえたらごめんなさい。iPadのSafariは、おそらくメモリ警告によって引き起こされたリロードの1つを実行すると、入力を破棄することがわかりました。

前提条件:質問にiPhoneのタグを付けたので、Cocoa Touchについて話します(左上の原点、y軸の正の値が下になっています)。同様に、ピクセルではなくポイントが必要になる可能性があります。つまり、Retinaディスプレイであるかどうかに関係なく、画面上にポイントが320x480あります。

glOrthoはまさにあなたが望むものです-http://www.khronos.org/opengles/documentation/opengles1_0/html/glOrtho.htmlのmanページを参照してください。したがって、おそらくこれをプロジェクションスタックに対して実行する必要があります。

    glOrthof(0、320、480、0、1、1000);

そして、modelviewでこれを1回実行します。

    glTranslatef(0、0、-500)

そして、azコンポーネントなしで将来のすべてのジオメトリを送信します。

つまり、画面の左端がx = 0、右端がx = 320、上部がy = 0で、遠近法のないビューポートを設定します(つまり、z位置はオブジェクトサイズに影響しません)。 y=480の下部。近くのクリップ平面を1の距離に、遠くのクリップ平面を1000の距離に任意に配置します。これは、それらがどこかにある必要があるためです。しかし、それは2つの中間(大丈夫、正確ではありません)に変換されるため、これ以上z座標を送信しないと、すべてのジオメトリが表示され、yまたはxを中心に回転するための余裕があります。それらが欲しい。

ただし、注意が必要です。glVertex呼び出しは、OpenGL ESの一部ではないため、iOSでは使用できません。また、最新のOpenGLでは非推奨になっています。短いバージョンは、それらが本当に非効率的であり、ドライバーが迅速に対処するのが難しいということです。glVertexPointerは、数値のC配列を渡すために使用するものです。

于 2010-12-11T03:24:59.123 に答える