Mathematica设计与制作六合独尊剑法
Background
过去也写了许多小文章,个人不是特别重视如何让文章怎么看起来好看,许多是面向我自己的写作,属于自hi型,这样的动力是不管有没有人看到,我都会写一些,之所以不重视写作细节,原因主要是因为本身没什么人看,其次我自己沉迷于玩更多有趣的东西。
现在嘛,主要是整理整理一些历史的小case,玩一玩,分享分享,当然时间受限,决定分两种类型:
一种是长周期的,比如一个月几个月弄一篇,可以达到各渠道投稿水平的,内容较丰富的,细节较完善,看起来比较好看。
一种是随便写写的,有缘人看到有兴趣可以先玩一玩,[内测]用户多了可以提些意见,我主要发到自己的专栏或博客或论坛啥的。
此文经提议,三文合一。
Part-1@剑从哪里来
1@网上下载一个剑的模型,比如obj或3ds
3@从游戏里截取模型+处理
3@本文对应的GitHub仓库
4@Mathematica生成一把剑的模型
5@Mathematica从图片生成一把剑的模型
剑模型的处理
从游戏里截取模型,要做FOV校正,转轴校正,可惜的是截取不是那么正当的事情,开发工具也不是那么官方,游戏里截取的模型并不nice,编辑器里截取受限,并且要花些时间成本。
坐标轴的校正,比如把剑弄成X轴对齐,剑向在XY平面等。
剑的贴图、颜色调整,Scale调整等等
Mathematica从图片生成剑模型
之前把六合独尊的小文章发布到群里,发现群友的关注点不一样。。。并不是动画,而是剑从哪里来,许多年前也有人这么问,因此我临时花了十几分钟弄了一个版本。
下载一张图片
随便从百度搜索[绝世好剑]一张图片,命名为image
image = Import["/Users/hypergroups/Documents/Wolfram Mathematica/知乎专栏/D13131ACA73E7F481E2364A9DCA95D94.jpg"];
获得剑身的图片模板
现在我们把他的剑身部分提取出来,获得一个模板图片,命名为mask
不喜欢用mma数字图像处理的,可以用PS/画图工具等等,因为针对不同的图片,下面的函数可能要做调节,比如是否ColorNegate等。
mask = FillingTransform@DeleteBorderComponents@DeleteSmallComponents@ColorNegate@Binarize@image
把剑身对齐到坐标轴
shape = Position[ImageData@mask, 1, {2}];
shapeNew = ColorNegate@ListPlot[PrincipalComponents[N@shape], AspectRatio -> 1./8, Axes -> False]