OpenGL中的glGenLists()函数问题
DanaldHearn,M.PaulineBaker的计算机图形学(第三版,蔡士杰等译)P124执行OpenGL显示表的代码我加上头文件后编译无法通过。我发现后面P126...
Danald Hearn,M. Pauline Baker的计算机图形学(第三版,蔡士杰等译)P124执行OpenGL显示表的代码我加上头文件后编译无法通过。我发现后面P126的代码有可以执行,下面两段代码的唯一区别是glGenLists()是否在一个过程中,但前者编译有有错,后者没有,也不知道是C++语法的原因还是glGenLists()函数的使用有讲究。请行家指教。
代码一:
#include <GL/glut.h>
GLuint regHex;
regHex = glGenLists (1);
void init (void)
{
}
编译错误为:
:\documents and settings\administrator\×ÀÃæ\cpp1.cpp(5) : error C2501: 'regHex' : missing storage-class or type specifiers
c:\documents and settings\administrator\×ÀÃæ\cpp1.cpp(5) : error C2371: 'regHex' : redefinition; different basic types
c:\documents and settings\administrator\×ÀÃæ\cpp1.cpp(3) : see declaration of 'regHex'
Error executing cl.exe.
Cpp1.obj - 2 error(s), 0 warning(s)
代码二:
#include <GL/glut.h>
GLuint regHex;
void init (void)
{
regHex = glGenLists (1);
}
编译结果
--------------------Configuration: Cpp1 - Win32 Debug--------------------
Compiling...
Cpp1.cpp
Cpp1.obj - 0 error(s), 0 warning(s) 展开
代码一:
#include <GL/glut.h>
GLuint regHex;
regHex = glGenLists (1);
void init (void)
{
}
编译错误为:
:\documents and settings\administrator\×ÀÃæ\cpp1.cpp(5) : error C2501: 'regHex' : missing storage-class or type specifiers
c:\documents and settings\administrator\×ÀÃæ\cpp1.cpp(5) : error C2371: 'regHex' : redefinition; different basic types
c:\documents and settings\administrator\×ÀÃæ\cpp1.cpp(3) : see declaration of 'regHex'
Error executing cl.exe.
Cpp1.obj - 2 error(s), 0 warning(s)
代码二:
#include <GL/glut.h>
GLuint regHex;
void init (void)
{
regHex = glGenLists (1);
}
编译结果
--------------------Configuration: Cpp1 - Win32 Debug--------------------
Compiling...
Cpp1.cpp
Cpp1.obj - 0 error(s), 0 warning(s) 展开
1个回答
展开全部
那个不是glGenLists();这个函数的问题, 这个函数使用没有什么讲究,或者讲究不是你问题的原因
因为你没有把程序全部贴出来, 我就根据我的猜测来判断
你第一种写法... Gluint regHex 是静态声明变量,但是regHex = glGenLists(1); 是什么呢... 算是你用一个函数给一个返回值.如果你不写在main里, 只是在外卖像声明变量一样, 这个语句是不会被执行的.
而第二种写法 你写在 void init(void)里面, 你在main()里面肯定也有 init(); 被调用这个语句,所以 init里面 glGenLists这个函数也就会被执行.
所以... 我不知道你为什么非要把那个写在外面诶, 如果你非要写在任何一种render的函数外面, 你可以试下改成 Gluint regHex = glGenLists(1);
不然的话... 你要看嘛, 你这个display list 什么的, 是为了什么创建的就写在那些render() function 里面的一开始就好了吧.
因为你没有把程序全部贴出来, 我就根据我的猜测来判断
你第一种写法... Gluint regHex 是静态声明变量,但是regHex = glGenLists(1); 是什么呢... 算是你用一个函数给一个返回值.如果你不写在main里, 只是在外卖像声明变量一样, 这个语句是不会被执行的.
而第二种写法 你写在 void init(void)里面, 你在main()里面肯定也有 init(); 被调用这个语句,所以 init里面 glGenLists这个函数也就会被执行.
所以... 我不知道你为什么非要把那个写在外面诶, 如果你非要写在任何一种render的函数外面, 你可以试下改成 Gluint regHex = glGenLists(1);
不然的话... 你要看嘛, 你这个display list 什么的, 是为了什么创建的就写在那些render() function 里面的一开始就好了吧.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询