0

gluLookAt()のサポートが必要です。glOrtho()を呼び出した後(これは正しいと思います)、y軸のわずかに高いビューからz軸のビューを作成するために使用しようとしています。gluLookAt()について私が理解していることから、最初の3つのパラメーターはビューの元または「目」であり、次の3つは目が見ている場所であり、最後の3つは画角ですか。

私は多くの異なる設定を試しましたが、画面に何もレンダリングできず、すべての試行で空白の黒い画面が表示されました。私はその使用法の実際の例全体をウェブで検索しましたが、関数の説明しか見つかりませんでした(私は理解していると思いますが、動作することはできません)。

試した方法が多すぎるため、試したコードを投稿するつもりはありません。今ではコードがめちゃくちゃになっていて、率直に言って誰も作りたくないのです。目が出血します。

私の質問は、誰かがgluLookAt()を使用する小さなプログラムの例を投稿または説明することができますか?

これが私が現在持っているひどいコードです(それはテスト用です):

#include <SDL/SDL.h>
#include <SDL/SDL_opengl.h>
#include <GL/glu.h>
#include <windows.h>

void init_ortho(int width, int height)

{

SDL_Init(SDL_INIT_EVERYTHING);
SDL_SetVideoMode(width,height,32,SDL_OPENGL);
SDL_WM_SetCaption( "OpenGL Test", NULL );

glClearColor( 0, 0, 0, 0 );
glViewport(0, 0, 640, 480);
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho( 0, width , height , 0, 0, 20 );
glMatrixMode( GL_MODELVIEW );
gluLookAt(0,0,0, 300,300, 5, 0,1,0);
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT);

}

int Check(int keystroke, int x)

{

if (keystroke == 65)
x += 10;

return x;

}

int main(int argc, char **argv)
{
init_ortho(640, 480);

glLoadIdentity();

int x = 300;
bool quit = false;

while (quit == false)

{

for (int i = 0; i < 300; i++)
{



if (GetAsyncKeyState(i) == -32767)
{

    x = Check(i, x);
if (x > 400)
quit = true;
    glTranslatef(x,300,10);
glColor4f(1.0,1.0,1.0,1.0);

glBegin(GL_QUADS);
glVertex3f(0,  0,0);
glVertex3f(100, 0,0);
glVertex3f(100,100,0);
glVertex3f(0, 100,0);
glEnd();

glLoadIdentity();

SDL_GL_SwapBuffers();

glClear( GL_COLOR_BUFFER_BIT );

}
}

}



SDL_Quit();

return 0;
}
4

1 に答える 1

0

最後の3つは画角ですか?

間違い。最後のパラメータは、カメラが「直立」する方向を定義します。その上にスティックを置くカメラを想像してみてください。その上にあるスティックがアップベクトルです。


申し訳ありませんが、これをすべて行う方法はひどく間違っています。

まず、適切なイベント処理ループがありません。あなたはどこかSDL_WaitEventに電話する必要があります。また、一部のアニメーションのプログラムのメインループ内にループSDL_PollEventを設けることはまったく意味がありません。for 0...300

次に、gluLookAtは、レンダリングされた三角形のエッジを表示するビュー変換を作成します。

コードを修正する方法はありません。私は最初から始めて、適切なチュートリアルを受講すると言います。

于 2011-12-17T10:09:54.353 に答える