一种基于DirectX 9.0 API的G代码逆向渲染方法

本文介绍了一种使用DirectX 9.0 API逆向G代码的方法,将G代码转换为包含形状、材质、光照和纹理的三维模型,适用于游戏编程。通过解析、编译G代码,利用有限状态机处理模态指令,借助D3D绘制线架、进行圆弧插补,并附加纹理和光照,实现G代码在游戏场景中的应用。
摘要由CSDN通过智能技术生成

          

           G代码是一种工业加工描述语言,现在也广泛的运用于3D打印中。但G代码是一种单向的描述语言,很难逆向回三维模型。但近日,日本出现了一款名为MakePaintable的软件,它可以将G代码逆向回三维模型。下图所示的就是这一软件的效果图:

 

图0-1 原始三维模型

 

图0-2 逆向出的三维模型

可以看到,逆向出的模型除了与原模型形状相同,还有光照与材质。但是国内还没有这样的软件。

    另一方面,现在游戏编程中的图形渲染一般基于多边形网络(主要是三角形),绝大多数图形格式诸如STL等都是如此。G代码可以从这些三角形网络获得,但G代码却很难对游戏编程有什么帮助。

本文就提出了一种方法来逆向G代码,并且逆向出的模型包含完整形状、材质、光照、贴图等等。除了可以单纯的逆向G代码,成为一款G代码逆向器,还可以应用于游戏编程,成为一种新的图形描述办法。

该方法思路如下:


本文也就由此展开

1.G代码的解析

G代码本身只是一段文本,可以使用fstream流读入。读入之后必须将其编制成为符合要求的数据结构。

才能从中高效率的提取有关信息。G代码的语法结构与汇编语言颇有些相似,都是功能字+操作数。而一个标准的功能字又可以拆分为一个字母(比如G01的G)和一个数字(比如G01的01)。我们可以定义一个GSentence的类来表示一条完整的G指令。并用一个GProgram来表示所有G指令类GSentence的集合。在GSentence中定义一个名为GFuncition的简单数据结构来描述一条功能字:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值