2013-07-18 56 views
0

我通過從編程的OpenGL的一些實例工作申報指南2.1版glFogCoordf並沒有在此範圍內

我知道我應該使用OpenGL版本4,因爲這是現在已經過時了,我將努力我到版本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(); 
} 

所有其他GL ...()函數都工作過,現在glFogCoord {} FD()和glFogCoord {} FD V()似乎並不存在.. 。我從來沒有這兩種工作方式中的任何一種,CodeBlocks內部的代碼完成工具無法識別'glFog'的完成。

任何人都知道這可能是什麼原因?

回答

1

glFogCoord()

注意

glFogCoord用如果GL版本是1.4或更高

檢查您的GL_VERSION。如果是1.1,你是,可能是使用Windows。 opengl32.dll只導出OpenGL 1.1 API。

使用類似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

編輯:不這樣做!查看原因評論。

您需要添加:

#define GL_GLEXT_PROTOTYPES 

包括GL/glut.h之前。

+0

不要那樣做。這只是告訴'glext.h'來聲明原型。但它不會神奇地使不同的GL庫存在那裏不需要導出的導出符號。獲得這些函數的唯一可靠方法是使用OpenGL的擴展機制,在運行時查詢指針。 – derhass

+0

@derhass:沒想到它。感謝您指出。 – smiszym