–Opengl 超级宝典我已经决定放弃不看了,太尼玛坑了,为了运行个Demo,去捣鼓作者的工具类库,但是这本书可是面向小白的,工具类库又是各种恶心的问题不能用,要有一定经验的人才能解决,简直本末倒置~
so~ 我决定看 Opengl 编程指南了, 目前看到第六章感觉良好~
Opengl的配置不打算开新贴了,直接挤在这里~
第六章的Demo blendeqn.c 是Opengl的混合模式,里面用到了glBlendEquation API 这是Opengl的API,因此要么使用 glutext 扩展,要么直接使用 glew 我选择后者。 可是在编译的时候,各种找不到 glew 的相关定义,造成这种问题的一般都是 dll 或者 lib 的位置问题。
于是我按照网上的教程放它们
.h文件放到 VS/VC/include 中
.lib 放到 VS/VC/lib 中
.dll 放到 system32 中
结果编译项目,还是符号错误。 之后我在 glew 的 binary 文件中有看到 x64的版本。 我估计可能我是 win7 x64系统,就必须用x64版本的glew. 于是 .dll 文件就丢到了 SYSWOW64 目录下,结果编译失败。一番寻找,让我在 VS/VC/lib 目录下居然找到了个 amd64 的目录(真坑) 把 .lib 丢到 这个目录下。 终于未知定义的错误没了。 但是给我弹出 找不到符号的错误,在各种系统相关的dll中, 搜索了一番,这个还算好解决 直接 VS菜单 调试 -> 选项和设置 -> 常规 -> 打勾源服务器支持 / 调试 -> 选项和设置 -> 符号 -> Microsoft符号服务器 。 之后编译项目,还是报错 0xc000007b 错误。 最后的最后,我考虑下只有一种可能性了。
glew 的包中提供了 win32 和 win64 的2个版本,之前是 win64 丢到 syswow64 , win32 丢到 system32 目录下。这一次, 我把 glew 的win32中的文件,也丢到 syswowo64 下, 终于编译成功了。。总之,好坑~~
这里是华丽的分割线———————
最近在从stage3D转向到opengl开发,于是入手了 Opengl超级宝典第五版。 结果SB5 工具库各种恶心的环境搭建,耗费了3个多小时,最终放弃。 于是转向用 第四版学习。
进度蛮顺利的,第一天就看到第四章 (跟stage3D大同小异,API的变种版本而已,很多都是跳着看的)
结果编译 transformGl 的时候出错了。
这2个API 报错
gltDrawTorus
m3dRotationMatrix44
error LNK2019: 无法解析的外部符号 “void __cdecl gltDrawTorus(float,float,int,int)” (?gltDrawTorus@@YAXMMHH@Z),该符号在函数 “void __cdecl RenderScene(void)” (?RenderScene@@YAXXZ) 中被引用
看到这个就知道是函数没有具体实现的问题,于是到 shared 里做文档内部搜索
最后发现 gltDrawTorus 的实现在 gltools.cpp 里,m3dRotationMatrix44 的实现在 math3d.cpp 里,果断将这2个cpp引入到项目中,之后继续编译出现新的错误
gltools.obj : error LNK2001: unresolved external symbol _pglCreateShaderObjectARB
gltools.obj : error LNK2001: unresolved external symbol _pglCreateProgramObjectARB
gltools.obj : error LNK2001: unresolved external symbol _pglLinkProgramARB
gltools.obj : error LNK2001: unresolved external symbol _pglShaderSourceARB
gltools.obj : error LNK2001: unresolved external symbol _pglGetObjectParameterivARB
gltools.obj : error LNK2001: unresolved external symbol _pglAttachObjectARB
gltools.obj : error LNK2001: unresolved external symbol _pglDeleteObjectARB
gltools.obj : error LNK2001: unresolved external symbol _pglCompileShaderARB
=。= 真是命运多舛
于是一口气全部在项目中定义掉,终于编译成功
like this
PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB;
PFNGLDELETEOBJECTARBPROC glDeleteObjectARB;
PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB;
PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB;
PFNGLSHADERSOURCEARBPROC glShaderSourceARB;
PFNGLCOMPILESHADERARBPROC glCompileShaderARB;
PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB;
PFNGLATTACHOBJECTARBPROC glAttachObjectARB;
PFNGLGETINFOLOGARBPROC glGetInfoLogARB;
PFNGLLINKPROGRAMARBPROC glLinkProgramARB;
PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB;
PFNGLUNIFORM4FARBPROC glUniform4fARB;
PFNGLUNIFORM1IARBPROC glUniform1iARB;
好了,先去爽下 “Watch Dog” !