C ++ OpenGL: вызов gluPerspective вызывает неопределенную ошибку ссылки?

Я использую 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 и все остальное работает, кроме этой строки. Я проверил документацию, и кажется, что я правильно ее использую. Я в растерянности.

2

Решение

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

OpenGL.org имеет Глуперспективный код на его сайте (представлен здесь для полноты):

//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;
}
2

Другие решения

Других решений пока нет …