在學習紅寶書前五章時使用gl.h glut.h標頭檔即可,但是在本章很多書上原始碼通不過編譯,以點參數Pointp.c 為例,會出現如glPointParameterfEXT沒有定義,無法解析的錯誤,網上瞭解到必須使用OpengGL的拓展庫才行。
下載glew相關檔案後依次放到指定檔案下(如開篇所述)。
添加#include<gl/glew.h>過程中還有個地方要注意,它必須在gl.h glut.h等標頭檔之前。
添加完畢後仍有錯誤:
“ 3 error LNK2001: 無法解析的外部符號 __imp____glewPointParameterfEXT Pointp.obj Pointp”
通過一番糾結找到解決方案,是OpenGL擴充方面的問題,就點參數這個樣本來說:
先定義函數指標
PFNGLPOINTPARAMETERFARBPROC glPointParameterfEXT;//定義函數指標
PFNGLPOINTPARAMETERFVARBPROC glPointParameterfvEXT;
檢查顯卡是否支援GL_ARB_point_parameters擴充,其中isExtensionSupported是自訂的一個函數,就是在glGetString( GL_EXTENSIONS )返回的字串裡尋找是否存在指定的副檔名:
int hasPointParams = isExtensionSupported("GL_ARB_point_parameters");
如果支援,就可以用wglGetProcAddress函數擷取擴充函數的指標:
if (hasPointParams)
{
//用wglGetProcAddress函數擷取擴充函數的指標
glPointParameterfEXT = (PFNGLPOINTPARAMETERFARBPROC) wglGetProcAddress("glPointParameterfEXT");
glPointParameterfvEXT = (PFNGLPOINTPARAMETERFVARBPROC) wglGetProcAddress("glPointParameterfvEXT");
}
再使用glPointParameterfEXT和glPointParameterfvEXT就不會有錯了。
除了點參數這個樣本以外還有好多代碼也是因為這個問題,這裡就不一一列舉了。