2013-02-10 2 views
2

Я использую FreeGLUT, чтобы попытаться создать мой первый куб на C++ с OpenGL. У меня есть вопрос, что всякий раз, когда я называю «gluPerspective», компилятор выдает эту ошибку: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 `[email protected]' 

Я смотрел вокруг, чтобы увидеть, если кто-то имел эту проблему и ничего не нашли. Итак, я думаю, что я снова забываю о чем-то. Здесь я называю функцию:

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

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

Включает в себя freeGLUT и все остальное работает, кроме этой строки. Я проверил документацию, и кажется, что я правильно ее использую. Я в недоумении.

+0

Прежде чем я ответить на этот вопрос, который вы получили: Зачем использовать фиксированную функцию pipline? FFP устарел. –

+0

Я просто пытаюсь получить базовый рабочий тест перед прыжком в шейдеры и еще много чего. – CoderTheTyler

ответ

2

gluPerspective был удален из GLU (библиотеки поддержки OpenGL) версии 3.1. Вы компилируете против правильной библиотеки, которая все еще определена? Если нет, вам нужно будет написать свою собственную версию и передать матрицу прямо в OpenGL.

OpenGL.org имеет the gluPerspective code на это веб-сайт (представлен здесь для полноты):

//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; 
} 
+0

Это может быть первый. Последнее не помогает вообще. Но я компилирую последнюю версию FreeGLUT и OpenGL 3.3.0. Как мне обойти это? – CoderTheTyler

+0

@MrDoctorProfessorTyler - я искал и нашел пример, но не могу найти его снова. (Я также удалил неверную часть ответа). – ChrisF

+0

Полагаю, я просто буду искать. У OpenGL все еще есть класс матрицы или я должен буду сделать свой собственный? – CoderTheTyler