Surface添加纹理失败:

Surface添加纹理,首先计算纹理坐标:

long CKTEngModelFunc::CalSurfTexCoord(C3DSurface* surf)

{

//改纹理坐标

         for(i = 0; i < lSurfPntNum; i++)

         {

                   pntCollection.GetPoint(i, &curDot);

                   pTexcoords[i].x = (curDot.x - surfBox.xmin) * ex * 1.0f;

                   //此处的.0为缩放比,通过设置这个参数可以让拉伸的材质,重复贴纹理,但是通常                         xy的缩放比是不一样的,要各自计算

                   pTexcoords[i].y = (curDot.y - surfBox.ymin) * ey * 1.0f;

         }

lRes = surf->UpdatePointCollection(&pntCollection, &vertexDecorationObj);

}

 

然后添加材质:

terrainSur.SetMaterialName(TString("MineMaterial/MineTerrainMaterial"));

但是这样没有显示材质,主要是因为在 纹理指定材质是在surface更新之后,这样就没有把后面设置的材质就没有更新到surface中。

解决方法:

两者调换顺序:先制定材质,然后计算坐标

terrainSur.SetMaterialName(TString("MineMaterial/MineTerrainMaterial"));

long CKTEngModelFunc::CalSurfTexCoord(C3DSurface* surf)

按照以前的方法,

CalSurfTexCoord(C3DSurface* surf)

SetMaterialName

terrainSur.Save(NULL); 就可以了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"surface: igraphicbufferproducer::setbuffercount(4)返回的参数无效"是一个错误提示信息。该错误通常是由于在设置Surface的缓冲区数量时传入了无效的参数导致的。 Surface是Android系统中用于渲染图像的一个类,它可以通过设置缓冲区数量来控制图像的操作。而igraphicbufferproducer是一个与图形缓冲区相关的接口,用于管理和操作缓冲区。 当调用Surface的igraphicbufferproducer::setbuffercount(4)方法时,传入的参数为4,表示将缓冲区数量设置为4个。然而,由于某种原因,系统判断这个参数是无效的,所以返回了"invalid argument"错误。 要解决这个问题,可以尝试以下几个方法: 1. 检查参数的正确性:确保传入的参数是一个有效的整数,并且符合系统的限制要求。可能需要查阅相关文档或进行进一步调研。 2. 检查Surface的状态:在调用igraphicbufferproducer::setbuffercount方法之前,确认Surface对象已经创建成功,并且处于有效的状态。可以检查Surface是否已经初始化完成,并且没有被释放或销毁。 3. 检查其他相关设置:如果在设置缓冲区数量之前还有其他相关的操作,例如设置图像格式或显示大小等,也需要确保这些设置是正确的,不会影响到缓冲区数量的设置。 如果上述方法都无法解决问题,那可能需要进一步调试和排查,包括查看相关日志和错误信息,或者考虑联系系统开发者进行进一步的支持和排查。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值