2

FreeGLUT を使用して、C++ で OpenGL を使用して最初のキューブを作成しようとしています。「gluPerspective」を呼び出すたびに、コンパイラが次のエラーをスローするという問題があります。

build/Debug/MinGW-Windows/main.o: In function `main':
C:\Users\User\Dropbox\NetBeans Workspace\Testing/main.cpp:47: undefined reference to `gluPerspective@32'

誰かがこの問題を抱えていて、何も見つからないかどうかを確認するために周りを見回しました. だから、私はまた何かを忘れていると思います。関数を呼び出す場所は次のとおりです。

......
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

gluPerspective(45, 1.333, 1, 1000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
......

私はfreeGLUTを含め、その行を除いて他のすべてが機能します. ドキュメントを確認しましたが、正しく使用しているようです。私は途方に暮れています。

4

1 に答える 1

3

gluPerspectiveバージョン 3.1 で GLU (OpenGL ヘルパー ライブラリ) から削除されました。まだ定義されている正しいライブラリに対してコンパイルしていますか? そうでない場合は、独自のバージョンを作成し、マトリックスを直接 OpenGL に渡す必要があります。

OpenGL.orgの Web サイトにgluPerspective コードがあります (完全を期すためにここに示します)。

//matrix will receive the calculated perspective matrix.
//You would have to upload to your shader
// or use glLoadMatrixf if you aren't using shaders.
void glhPerspectivef2(float *matrix, float fovyInDegrees, float aspectRatio,
                      float znear, float zfar)
{
    float ymax, xmax;
    float temp, temp2, temp3, temp4;
    ymax = znear * tanf(fovyInDegrees * M_PI / 360.0);
    //ymin = -ymax;
    //xmin = -ymax * aspectRatio;
    xmax = ymax * aspectRatio;
    glhFrustumf2(matrix, -xmax, xmax, -ymax, ymax, znear, zfar);
}
void glhFrustumf2(float *matrix, float left, float right, float bottom, float top,
                  float znear, float zfar)
{
    float temp, temp2, temp3, temp4;
    temp = 2.0 * znear;
    temp2 = right - left;
    temp3 = top - bottom;
    temp4 = zfar - znear;
    matrix[0] = temp / temp2;
    matrix[1] = 0.0;
    matrix[2] = 0.0;
    matrix[3] = 0.0;
    matrix[4] = 0.0;
    matrix[5] = temp / temp3;
    matrix[6] = 0.0;
    matrix[7] = 0.0;
    matrix[8] = (right + left) / temp2;
    matrix[9] = (top + bottom) / temp3;
    matrix[10] = (-zfar - znear) / temp4;
    matrix[11] = -1.0;
    matrix[12] = 0.0;
    matrix[13] = 0.0;
    matrix[14] = (-temp * zfar) / temp4;
    matrix[15] = 0.0;
}
于 2013-02-10T01:02:22.760 に答える