2013-07-18 3 views
0

я работаю через некоторые примеры OpenGL из Руководства по программированию Версия 2.1glFogCoordf не был объявлен в этой области

Я знаю, что я должен использовать OpenGL версии 4, потому что это в настоящее время устарели, и я буду работать My до версии 4, поэтому не беспокойтесь об этом.

Проблема, которая у меня есть, - один из примеров использует «glFogCoordf», который является функцией, которая, по-видимому, не существует!

Код:

#include <GL/glut.h> 
#include <cstdlib> 
#include <iostream> 

static GLfloat f1, f2, f3; 

static void init() 
{ 
    GLfloat fogColor[4] = { 0.0, 0.25, 0.5, 1.0 }; 
    f1 = 1.0f; 
    f2 = 5.0f; 
    f3 = 10.0f; 

    glEnable(GL_FOG); 
    glFogi(GL_FOG_MODE, GL_EXP); 
    glFogfv(GL_FOG_COLOR, fogColor); 
    glFogf(GL_FOG_DENSITY, 0.25); 
    glHint(GL_FOG_HINT, GL_DONT_CARE); 
    glFogi(GL_FOG_COORD_SRC, GL_FOG_COORD); 

    glClearColor(0.0, 0.25, 0.25, 1.0); 
} 

void display() 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glColor3f(1.0f, 0.75f, 0.0f); 
    glBegin(GL_TRIANGLES); 
    glFogCoordf(f1); 
    glVertex3f(2.0f, -2.0f, 0.0f); 
    glFogCoordf(f2); 
    glVertex3f(-2.0f, 0.0f, -5.0f); 
    glFogCoordf(f3); 
    glVertex3f(0.0f, 2.0f, -10.0f); 
    glEnd(); 

    glutSwapBuffers(); 
} 

Все остальные гл ...() функции работали раньше, теперь glFogCoord {} FD() и glFogCoord {} FD V(), похоже, не существует .. У меня никогда не было ни одного из этих двух работающих, а функция завершения кода внутри CodeBlocks не признает никаких завершений для «glFog».

Кто-нибудь знает, в чем причина этого?

ответ

1

glFogCoord():

Примечания

glFogCoord только доступна, если версия GL 1.4 или выше.

Проверьте GL_VERSION. Если это 1.1, вы возможно с использованием Windows. opengl32.dll экспортирует только API OpenGL 1.1.

Используйте что-то вроде GLEW для загрузки «новых» точек входа API.

+0

* Linux: P - glGetString() дает мне: 3.0 Mesa 9.1.3 – user3728501

+0

Механизм расширения по-прежнему является необходимым способом для получения таких указателей на функции. Windows 'opengl32.dll' экспортирует только функции GL 1.1, в Linux существует полустандарт, требующий, чтобы он экспортировал GL1.2, но' glFogCoord' из GL 1.4 ... – derhass

0

EDIT: не делайте этого! См. Комментарий по причине.

Вам нужно добавить:

#define GL_GLEXT_PROTOTYPES 

перед включением GL/glut.h.

+0

Не делайте этого. Это просто говорит 'glext.h' объявлять прототипы. Но это не волшебным образом делает разные GL libs там экспортные символы, которые им не требуется экспортировать. Единственным надежным способом получить эти функции является запрос указателей _at runtime_ с использованием механизма расширения OpenGL. – derhass

+0

@derhass: Не думал об этом. Спасибо за указание. – smiszym

Смежные вопросы