2009-03-08 12 views
1

私は単純な2D OpenGLアプリケーションを作成していますが、カメラの問題が発生しているようです。 (20,20)に矩形を描くと、(25,20)程度で描画されます。私が(100、20)に描くとき、​​それは125程度で描かれます。何らかの理由ですべてが数%だけ右にシフトしています。OpenGLの座標問題

私はGLUTを設定しています方法と間違って何かがあり、ここでトリムダウンバージョン http://pastebin.com/m56491c4c

を貼り付けていますか?私はそれらを無効にしたときに同じことが起こるので、それは私のオブジェクトが変なことをするのではないことを知っています。

ありがとうございます。

答えて

3

マトリクス方式は、モデル・ビューである:あなたのコードで

void draw() 
{ 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    ... 
} 

その他の問題:

  • draw()の末尾にglutPostRedisplay()と呼んではいけません。これはあなたのCPUを100%稼働させることになります。代わりにglutTimerFunc()を使用して、数ミリ秒ごとに更新されます。 processMouse()
  • 、あなたはcharの配列にwsprintf()を使用している:wsprintf()はワイド文字(wchar_t)の配列を受け取り、あなたはタイプwchar_t[]のローカル変数sをしなければならない、またはその代わりwsprintf()sprintf()MessageBoxA()を使用し、 MessageBoxW()(これには、あなたがやっていると仮定しているUnicodeアプリケーションをコンパイルするときにMessageBox()がマクロとして展開されます)。また、バッファオーバーフローの脆弱性もあります.1239文字以上のバッファを使用する必要があります。実際には、大量のx値は渡されません。最後に、sprintf()/wsprintf()の代わりにsnprintf()/wsnprintf()を使用して、バッファオーバーフローから保護する必要があります。
+0

ありがとうございました!あなたの他の提案をありがとう。私はそれが乱雑なコードであることを知っている、私はちょうどすぐに作業サンプルを投稿したい。再度、感謝します! – Alexander

0

あなたのModelViewマトリックスであなたのglOrtho2Dを呼び出すようです。私はそれが問題だと思っています(この場合、あなたのProjectionはアイデンティティーでなければなりません)。しかしあなたはProjection matrixでそれを呼び出すべきです。

あなたのウィンドウサイズが実際にあなたが思っているものであることを確認するためだけに、あなたのサイズ変更呼び出しでwとhを出力するべきです(glutがどのように動作するのか分かりませんが、glutInitWindowSize()それは物事を混乱させるだろう)。ことを確認してください、あなたのドロー機能で

void resize(int w, int h) 
{ 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluOrtho2D(0, w, h, 0); 
} 

そして:あなたはまた、自動的にウィンドウのサイズを変更するユーザーの問題を解決した、関数reshape(resize())内の射影行列を設定する必要が

+0

私はすでにあなたが運がないと示唆した順序でそれを設定しようとしました。私はアウトプットを混乱させてしまい、ウィンドウのサイズが正しいとかなり確信しています。すべてのアイデアがありません。 – Alexander

0

これは作業しているシステムによって異なりますが、通常、ほとんどのウィンドウ座標系は左下隅から始まり、右上に数えられます。この場合、gluOrth02D呼び出しが間違っています。

あなたが持っている:

下、副詩に窓マッピングの上部を持って
gluOrtho2D(0, appWidth, appHeight, 0); 

それはですほとんどの時間:

gluOrtho2D(0, appWidth, 0, appHeight); 

私はそれが持つプラットフォーム作業を、システムに依存して言ったように。 ほとんどのLinux実装でしか話すことができません。他

だけの何かが、それはあなたのバグに影響を与える場合にだけチェックアウトします。

関連する問題