【发布时间】:2013-08-31 17:20:07
【问题描述】:
以下是绘制矩形的代码,但在 glutdisplayFunc() 中出现错误。 我该如何解决?
#include <iostream>
#include <glut.h>
using namespace std;
class GUI
{
public:
int W,H;
GUI()
{
W = 800;
H = 600;
glClearColor(0, 0, 0, 0);
gluOrtho2D(-W, W, -H, H);
glMatrixMode(GL_PROJECTION);
}
void display()
{
glBegin(GL_POLYGON);
glVertex2d(-500, 300);
glVertex2d(500, 300);
glVertex2d(500, -300);
glVertex2d(-500, -300);
glEnd();
glFlush();
}
};
int main(int argv, char **argc)
{
GUI ob;
glutInit(&argv, argc);
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
glutInitWindowSize(ob.W, ob.H);
glutInitWindowPosition(100, 100);
glutCreateWindow("Queen Problem");
glutDisplayFunc(ob.display); //Error
glutMainLoop();
return 0;
}
我正在使用Visual Studio 2010。我在OpenGL 中创建了一些程序,但没有任何类。这是我在 OpenGL 中使用类的第一次体验。
错误是:
错误 1 错误 C3867: 'GUI::display': 函数调用缺少参数列表;使用 '&GUI::display' 创建指向成员的指针。
我尝试使用&GUI::display,但也导致错误。
【问题讨论】:
-
您的成员函数甚至不使用该类。使其成为免费功能。
-
只是为了完全清楚这是一个 GLUT 和 C++ 问题而不是 C++ 和 OpenGL 问题。 OpenGL 本身在其 API 中没有任何回调。还有其他像 glfw 这样的 OpenGL 辅助 API 没有这个问题
-
您正在处理的是 C 和 C++ 之间的低级互操作问题。这与 OpenGL 甚至 GLUT 无关。 GLUT 是用 C 编写的,需要一个 C 函数,但是您必须在 C++ 中解决这个问题才能提供它。如果您发现提供的答案难以理解,那么问题最终将回到对 C、C++ 缺乏了解。虽然我喜欢反复试验,但你在喷水和祈祷,这在 C/C++ 中是不容易容忍的。
-
@PeterT:“OpenGL 本身在其 API 中没有任何回调”glu 库有它们。见
gluTessCallback -
@SigTerm glu 不是 OpenGL 的一部分,它建立在 OpenGL 之上。鉴于规范的最后一次更新似乎是 1998 年,并且此后已被弃用,我认为可以肯定地说 glu 不应该在新项目中使用,尤其是对于 OpenGL 版本 >=3