使用QT4.6.2的windows版本开发一个图形程序,其中在用gluTess函数绘制任意多边形的时候,一旦多边形轮廓点中出现相同点时,程序便出错,相同代码在QT4.6.2的linux版本和vs2008下都可以绘制成功。哪位知道问题的原因或解决方案请赐教。
源码如下:
void COpenGL::my_error(GLenum err)
{
string str = (char*)(gluErrorString(err));
cout << str <<endl;
}
void COpenGL::combineCallback(GLdouble coords[3],
GLdouble *vertex_data[4],
GLfloat weight[4], GLdouble **dataOut)
{
int* ptr = (int*) malloc(3 * sizeof(int));
memList.push_back(ptr);
ptr[0] = (GLint) coords[0];
ptr[1] = (GLint) coords[1];
ptr[2] = (GLint) coords[2];
*dataOut = (GLdouble*)ptr;
}
typedef void (__stdcall *fn)(void);
void COpenGL::drawTess()const
{
static GLUtriangulatorObj *tobj = NULL;
if (tobj == NULL)
{
tobj = gluNewTess();
}
if (NULL != tobj)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.7, 0.5, 0.0);
gluTessCallback(tobj, GLU_TESS_BEGIN, (fn)glBegin);
gluTessCallback(tobj, GLU_TESS_END, (fn)glEnd);
gluTessCallback(tobj, GLU_TESS_ERROR, (fn) my_error);
gluTessCallback(tobj, GLU_TESS_VERTEX, (fn) glVertex2iv);
gluTessCallback(tobj, GLU_TESS_COMBINE, (fn) combineCallback);
}
GLdouble data[3];
gluBeginPolygon(tobj);
for (int j=0; j<=contours_cnt; ++j)
{
int point_cnt = contours[j].point_cnt;
gluNextContour(tobj,GLU_UNKNOWN);
for (int i=0; i<point_cnt; ++i)
{
data[0] = contours[j].p[0];
data[1] = contours[j].p[1];
data[2] = 0;
gluTessVertex(tobj,data,(void*)contours[j].p);
}
}
gluEndPolygon(tobj);
for (size_t i=0; i<memList.size(); ++i)
{
free(memList);
}
memList.clear();
}