主题:OPENGL中的glut函数
nansure
[专家分:0] 发布于 2010-10-11 09:38:00
我用MFC做openGL遇到个问题
void CMiddleView::display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
Object(GL_RENDER);
glFlush();
}
void CMiddleView::Draw()
{
glMatrixMode(GL_PROJECTION); //!!
glLoadIdentity();
gluPerspective(30,cxx/cyy,1,100000); //!!
glMatrixMode(GL_MODELVIEW);
glutDisplayFunc([color=FF0000]&CMiddleView::display[/color]);
glutMainLoop();
}
出现错误'glutDisplayFunc' : cannot convert parameter 1 from 'void (__thiscall CMiddleView::*)(void)' to 'void (__cdecl *)(void)'
There is no context in which this conversion is possible
红色部分应该怎么改?
回复列表 (共10个回复)
沙发
cgl_lgs [专家分:21040] 发布于 2010-10-11 10:46:00
將display改為全局函數。
板凳
nansure [专家分:0] 发布于 2010-10-11 12:21:00
但是display里面的object函数又是这个类里的
3 楼
强强 [专家分:4740] 发布于 2010-10-11 12:34:00
红字部分换成仅仅是DISPLAY不行吗?
4 楼
nansure [专家分:0] 发布于 2010-10-11 12:49:00
不行,也是这一类的错误
5 楼
cgl_lgs [专家分:21040] 发布于 2010-10-11 14:47:00
用全局對象做數據交換。
6 楼
nansure [专家分:0] 发布于 2010-10-11 15:38:00
啥意思?
7 楼
eastcowboy [专家分:25370] 发布于 2010-10-11 19:10:00
glutDisplayFunc要求的参数是一个C风格的函数指针,不能用C++风格的成员函数指针。因此编译出错了。
用MFC的话,也许根本就不应该使用GLUT。
GLUT只是一个工具包,用于管理和控制窗口,它本身不是OpenGL的一部分。
如果使用MFC的话,本身就可以管理和控制窗口,也就不再需要GLUT了。
提示:在GLUT的文档中说,glutMainLoop这个函数不会返回。但楼主的CMiddleView::Draw这个函数如果不返回的话,恐怕也会有问题吧。
楼主不妨百度一下“MFC OpenGL”,或许就能找到解决方案。
8 楼
nansure [专家分:0] 发布于 2010-10-12 08:41:00
恩似乎是这样,我用其他没返回值的glut函数运行的时候就内存溢出了,想用glut函数主要是我做选择和反馈的时候想实时监控鼠标的位置,鼠标滑过的物体变下颜色,左键点击之后彻底变色。
9 楼
cgl_lgs [专家分:21040] 发布于 2010-10-12 08:54:00
如果樓主只是為了學習GL,那可以用用GLUT,但如果是做實際開發,那還是放棄GLUT吧,效率太低下。
10 楼
nansure [专家分:0] 发布于 2010-10-12 09:50:00
现在老是hit=0,不知道是什么原因
我来回复