gluTessCallback出错【转】

原来例子中的代码是这样的:

void CALLBACK vertexCallback(GLvoid *vertex)
{
   const GLdouble *pointer;

   pointer = (GLdouble *) vertex;
   glColor3dv(pointer+3);
   glVertex3dv(vertex);/*这行出错*/
}

 

但在c++ 中运行会出错,错误代码为error C2664: 'glVertex3dv' : cannot convert parameter 1 from 'void *' to 'const double *'也就是说由glVertex3dv来看括号内的变量应为double类型,而vertex却是'void *类型,修改如下就可运行通过了:]

void CALLBACK vertexCallback(GLvoid *vertex)
{
   const GLdouble *pointer;

   pointer = (GLdouble *) vertex;
   glColor3dv(pointer+3);
   glVertex3dv((GLdouble *)vertex);
}

还有下面也有一个类似的错误情况:

本来代码是这样的:

tobj = gluNewTess();
   gluTessCallback(tobj, GLU_TESS_VERTEX, glVertex3dv);

/*这行出错*/错误编码为

error C2664: 'gluTessCallback' : cannot convert parameter 3 from 'void (const double *)' to 'void (__stdcall *)(void)'其中const double *对应的为glVertex3dv,不能转化为(__stdcall *)(void)格式,那么

就强制转换了,给glVertex3dv加上((__stdcall *)(void))前缀即可:
       

gluTessCallback(tobj, GLU_TESS_VERTEX,
                   (void (__stdcall *)())glVertex3dv);

搞定了

 

摘自:http://hi.baidu.com/198572/blog/item/d2e08ccb5c6259fe52664f93.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
void IntersectionInfoCache::makePolygonDrawData(std::vector<GeoLocation>& vecPoints, std::vector<uint16>& triangleIndexList, uint8 drawelement, //多边形描画数据 vector<IntersectionImageData>& imageData) { std::vector<PolygonTessVertex> points; uint32 pointcount = vecPoints.size(); points.reserve(pointcount); for(int32 i = 0;i < pointcount;++i) { PolygonTessVertex m_point; m_point.vertex.x = vecPoints[i].longitude; m_point.vertex.y = vecPoints[i].latitude; points.emplace_back(m_point); } TessPolygon(points, triangleIndexList); std::vector<GeoLocation> vecTessPoints; uint32 pointcountTess = points.size(); vecTessPoints.reserve(pointcountTess); for(int32 i = 0;i < pointcountTess;++i) { GeoLocation m_point; m_point.longitude = points[i].vertex.x; m_point.latitude = points[i].vertex.y; vecTessPoints.emplace_back(m_point); } IntersectionImageData tempimagedata; tempimagedata.drawelement = drawelement; tempimagedata.vertex.assign(vecTessPoints.begin(), vecTessPoints.end()); tempimagedata.index.assign(triangleIndexList.begin(), triangleIndexList.end()); imageData.emplace_back(tempimagedata); } void TessPolygon(std::vector<PolygonTessVertex> &points, std::vector<uint16> &triangleIndexList) { auto uiPointCount = points.size(); GLUtesselator* tobj = gluNewTess(); gluTessCallback(tobj, GLU_TESS_VERTEX_DATA, (_GLUfuncptr)PolygonVertexCallback); gluTessCallback(tobj, GLU_TESS_BEGIN_DATA, (_GLUfuncptr)PolygonBeginCallback); gluTessCallback(tobj, GLU_TESS_END_DATA, (_GLUfuncptr)PolygonEndCallback); gluTessCallback(tobj, GLU_TESS_ERROR_DATA, (_GLUfuncptr)PolygonErrorCallback); gluTessCallback(tobj, GLU_TESS_COMBINE_DATA, (_GLUfuncptr)PolygonCombineCallback); gluTessProperty(tobj, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_NONZERO); PolygonData_t stPolygonData; gluTessBeginPolygon(tobj, &stPolygonData); gluTessBeginContour(tobj); /* for loop statement: the initial value of decltype(uiPointCount) Index is 0 / for(decltype(uiPointCount) Index = 0; Index < uiPointCount; ++Index) { stPolygonData.vecVertexArray.emplace_back(points[Index]); TessPolygonVertex tempTessVertex; tempTessVertex.location[0] = points[Index].vertex.x; tempTessVertex.location[1] = points[Index].vertex.y; gluTessNormal(tobj, 0.0, 0.0, 1.0); gluTessVertex(tobj, tempTessVertex.location, (GLvoid)Index); } gluTessEndContour(tobj); gluTessEndPolygon(tobj); gluDeleteTess(tobj); points.swap(stPolygonData.vecVertexArray); triangleIndexList.swap(stPolygonData.vecDrawIndices); }加上注释
最新发布
06-09

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值