本课程以编程代码为核心基础构建。
1、 演示时所用的工作目录为D:ogre_project。
2、 复制网页中的指定代码。
3、 将复制的代码粘贴至MFCTestView.cpp文件中void CMFCTestView::createScene()函数的后续位置,具体操作可参考下图所示示例。
4、 在MFCTestView.h文件中增加函数声明:void SaveImage();,以完成新功能的接口定义。
5、 在 MFCTestView.cpp 文件的 void CMFCTestView::createScene() 函数末尾,加入一行代码:SaveImage(DynamicTexture, test.png); 以实现图像保存功能。该语句将当前动态纹理内容保存为指定名称的 PNG 图像文件,便于后续查看或调试使用。
6、 编译运行时报错,具体提示见下图。
7、 将MFCTestView.cpp中的SaveImage(DynamicTexture,test.png);修改为新的语句,具体更改内容根据实际需求调整,确保功能正常并符合项目规范。
8、 更改原因为简化命名,提升代码可读性与维护效率。
9、 从函数声明 void SaveImage(TexturePtr TextureToSave, String filename) 可知,SaveImage 函数的第一个参数应为 TexturePtr 类型。然而,我在调用时传入的 DynamicTexture 实际上是一个字符串类型的数据,这与函数所要求的参数类型不符,会导致类型不匹配的问题,必须将参数转换为正确的纹理指针类型才能正常调用该函数。
10、 运行程序后,仍出现相同错误提示。
11、 在网上搜索function does not take 2 arguments的中文释义时,我发现take被译为接受,整句意思是函数不接受两个参数。这说明该错误通常源于函数定义或声明时参数数量不符,导致调用时传入的参数个数与预期不一致,从而引发编译或运行错误。
12、 在MFCTestView.h中新增函数声明:void SaveImage(); 并进行相应修改。
13、 此时执行调试,虽然仍有错误,但问题已与之前有所区别。
14、 只需在代码前添加Ogre::即可修复上述错误。由于MFCTestView.cpp文件开头包含using namespace Ogre;语句,表明该文件中的所有标识符默认位于Ogre命名空间内,因此需通过作用域操作符明确指定类或函数所属的命名空间,以避免歧义和编译错误。
15、 至此,程序运行正常,无任何问题。
