[3D算法] 调试方案(画3D图形) - 基于MaxScript在3ds Max画出图形(用C++拼出MaxScript的代码)

引言

博主最近在从事3D算法的研发,遇到一个比较棘手的问题:如何便捷的查看3D算法的中间结果。
比如我想要看两个空间三角形是否相交,但中间结果无非是一堆数字而已,要想办法给它绘制出来。

编程确实能够解决问题,但3D绘制引擎,难免过于笨重。自己构造obj也是可以,但也过于麻烦。

在调研3D建模软件时,同事告知3dsMax有一个脚本语言Maxscript。查看其示例时,发现它的语法特别方便。例子:用MaxScript在3ds Max中绘制一条线

ss=SplineShape ()   --创建一个spline并赋值给ss。此时线条是空的,什么都没有
addNewSpline ss     --在ss中创建一条线,此时线条是空的,没有点
addKnot ss 1 #corner #line [0,0,0]  --添加点
    --1表示ss的第一个spline
    --#corner表示角点,有#smooth | #corner | #bezier | #bezierCorner可供选择
    --#line表直线,有#curve | #line供选择
addKnot ss 1 #corner #line [100,0,0]
updateshape ss --更新线条
调试方案

于是,把这种调试方案分享给大家,如果有其他调试方式,请阁下不吝赐教。

【解决方案】
在C++算法中,将新计算的中间结果拼成MaxScript的语句,并输出到日志
如果想查看哪些数据,直接从日志中复制MaxScript的代码,在3ds Max中运行即可。

示例:绘制一个3D线

(1)C++中拼接出MaxScript的语句

std::string Geometry3D::lineToMaxScript(double x1, double y1, double z1,
										double x2, double y2, double z2,
										std::string var_name /*= "line"*/)
{
	std::string script = "\n";
	script += var_name + " = SplineShape()\n";

	script += "addNewSpline " + var_name+"\n"; //添加一条线
	script += "addKnot " + var_name + " 1 #corner #line[" + std::to_string(x1) + ", " + std::to_string(y1) + ", " + std::to_string(z1) + "]\n";
	script += "addKnot " + var_name + " 1 #corner #line[" + std::to_string(x2) + ", " + std::to_string(y2) + ", " + std::to_string(z2) + "]\n";

	script += "updateshape " + var_name + "\n"; //更新
	return script;
}

(2)将结果输出到系统的日志中

LogUtil.Trace("- intersection line - %s", Geometry3D::lineToMaxScript(line_start, line_end).c_str());

日志中打印的效果:

line69 = SplineShape()
addNewSpline line69
addKnot line69 1 #corner #line[-1900.317627, -840.096091, 285.078657]
addKnot line69 1 #corner #line[-1899.095522, -839.386864, 285.078088]
updateshape line69

(3) 在3DMax中运行脚本
直接从日志中复制出数据的Maxscript的代码,在3dmax中运行。
在这里插入图片描述
在这里插入图片描述
如此,即可在3dmax中看到你想绘制的3D图形了。
在这里插入图片描述

总结

MaxScript语法挺简便的,看了几个示例就可以编写了。如果你也遇到同样的问题,可以用你使用的编程语言试试吧!
目前,我已经把算法中所有的输出数字都组织成了MaxScript代码了,想要看哪些数据,复制到3dmax即可,非常方便。

PS:博主的上一个解决方案是把数据拼接成C++的代码,复制到公司自主的GIS平台中运行,每次需要:复制、粘贴、编译、运行、打开工作空间、执行命令。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
### 回答1: 3ds Max 是一款广泛应用于建筑、室内设计、游戏、影视制作等领域的三维建模和渲染软件。它提供了丰富的工具和功能,能够帮助用户创建高质量的三维模型和动效果。 在3ds Max的开发过程中,C语言发挥了重要作用。C语言是一种高级语言,具有高效、灵活和可移植的特点,被广泛用于软件开发领域。在3ds Max的开发中,C语言被用于编写核心算法、优化性能和处理底层系统交互。 通过使用C语言,开发人员能够实现3ds Max的各种功能,如模型编辑、材质渲染、动制作等。他们可以编写自定义插件和脚本,扩展软件的功能和性能,满足用户的特定需求。同时,C语言的高效性能也确保了3ds Max在处理大量复杂数据时的稳定性和响应能力。 在3ds Max的开发中,C语言还与其他编程语言和技术进行交互。例如,与Python的结合使开发人员能够编写更高级的脚本,自动化重复性任务。与OpenGL等图形库的结合可以实现更高级的图形渲染效果。 总而言之,C语言在3ds Max的开发中起到了至关重要的作用。它使开发人员能够构建强大、高效的软件,提供卓越的三维建模和渲染体验。 ### 回答2: 3D Max是一款由Autodesk公司开发的三维建模、渲染和动软件。它是当今全球广泛应用于电影、游戏、建筑、广告等领域的行业标准软件之一。 3D Max的C开发扩展能够为用户提供高度的自定义和控制能力。通过C语言开发插件或脚本,用户可以实现各种功能的定制和拓展,以满足具体项目的需求。 在3D Max的C开发中,用户可以利用C语言编写自己的插件,例如自定义的渲染器、模型导入导出器、工具脚本等。通过编写插件,用户可以扩展3D Max的功能,从而提高工作效率和实现特定的功能需求。 C开发还可以用于实现自定义的动特效和动作控制。用户可以通过编写C脚本来实现精确的动控制,例如角色的运动、物体的变形等。这种定制化的动效果可以使用户在制作电影、游戏等方面具备更加灵活的创作能力。 此外,C开发还可以进行性能优化,提高3D Max的运行效率。通过使用C语言的高效性能,用户可以对3D Max进行定制化的优化,例如加速渲染速度、减少内存占用等,从而提高用户的工作效率和艺术创作的质量。 在3D Max的C开发中,对于有一定编程基础的用户来说,可以进一步发挥软件的潜力,提升工作效率和创作能力。无论是对于专业的数字艺术家、建筑师、游戏开发者还是动制作人员来说,3D Max的C开发都是一个非常有价值的工具,可以满足其具体项目的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

geodoer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值