AboutCG教程地址



教程截图

前言

  说来惭愧,以前自己是学生党。
  因此所有的教程都是白嫖而来。
  我庆幸自己通过各种途径能够想方设法搞到自己想要的资源,从来不花一分钱。

  经历了一年的吃土实习,总算是上岸了
  趁着双十一这波降价,自己就剁手了,双十一折扣加新人优惠券只花了66元。
  虽然 Maya API 已经比较熟悉了,猫大的教程大概也没有太多有用的知识点了,而且教程是14年的了。
  不过,Maya API 其实也没有什么太大的更新。
  而且我对教程里面的加密算法非常好奇,领略过 2进制 的加密,只是不知道怎么实现的。


  由于这个是个付费教程,所以我不会那么详细讲解这个教程的细节,就大概提一提我觉得有意思的点吧。

加密方案

  教程一开始演示了最简单的加密方法
  就是通过字符偏移实现加密效果,其实我之前也研究过这种加密的方法 文章链接

  后面猫大结合 C++ 的 zlib 库,将文本转成 二进制 压缩的形式。
  进一步实现加密
  到这里,其实我是有一丢丢的失望,因为 zlib 的加密原理并没有被提及。
  虽然我也明白,大多数时候我们只管实现,而不会探究背后的原理。
  即便我使用 python 也不会探究 os 库的函数是在底层如何实现的(:з」∠)

  当然虽然加密算法用的是别人弄好的
  但是要通过 C++ 接入还是需要点技术操作的,毕竟C++的代码比较透明,处理起来也比较麻烦。
  首先需要将 zlib 的源代码通过 VS 编译成 lib 文件,提供给代码调用
  而且我们并不需要 zlib 的所有功能,还要有选择地进行编译减少大小
  后续还需要一些在工程的配置当中加上 lib 的调用路径。


  另外口令的处理上,其实是获取口令的字符长度,然后通过字符偏移对 2进制的压缩文件 进一步加密。
  我觉得这类获取字符长度是有BUG的,如果用户输入同样长度的不同口令,岂不是也同样解密了。

  带着这个疑问,我自己通过源码,重新编译出了 2017 版本的插件
  测试的时候,我发现输入空的口令会导致Maya崩溃,而且参数不足的时候也没有有效的报错提示,代码健壮性不足呀(:з」∠)

  回归到我要测试的问题,我发现仅仅是字符的数量相同时无法通过口令的
  我看了源码,是通过 C++ 的 strlen 获取口令的长度进行偏移的
  我总觉得这一步要用 md5 才能减少同样的不同的口令可以解密的问题。

  后来再仔细看了一下后面的源码,发现自己粗心了。
  原来解密是根据 token 的数组求模取出字符来进行偏移,的确是要知道正确口令才能解密。
  猫大强无敌。

C++ 学习

  虽然我自己有捣鼓过Maya C++ 的插件开发,而且学校也有 C++ 的课程。
  但是猫大的教程还是让我在 C++ 领域上受益匪浅。
  毕竟我之前写 C++ 基本上参考 Maya API C++ 文档里面的 example 为主
  并没有正统地学习过 C++ 的编写规范,算是野路子典型。
  幸好之前开发C++也比较简单,代码不超过 500 行,也不需要拆分文件了。
  这次看了猫大的骚操作以及指针的巧妙运用还是很有用的。


  当然这当中也涉及到了 C++ 蛋疼的地方。
  头文件 include 会互相影响的,这也很好解释了为什么 python import 之后要 reload 来重加载。
  这样可以避免文件多次 import 不断受到影响的问题。
  因此下次写脚本的时候,发布版本一定要将 python 的 reload 代码清掉。

  C++ 解决这个问题需要使用 宏
  通过 宏 的定义,判断宏是否存在来进行只有一次的初始化。


  头文件可以通过 extern 来进行外部定义
  从而实现 C++ 代码公共调用的目的


  另外教程中,猫大多次强调 warning 和 error 一样严重
  程序员对待 warning 要以 error 的标准进行逐一处理。
  这个idea我以前听过,没理解,这次看 C++ 懂了。

  其实 python 是基本不会报 warning 的。
  因为 python 没有变量类型声明,也就没有 C++ 这种静态类型的检测。
  要运行的时候才知道代码出错了。
  C++的检测可以有助于代码运行之前就排除大量的错误,这些优势和 typescript 的优势是一样的。
  在企业级开发中,庞大的代码维护通过这种方式就可以很好地减少 BUG 的出现。

总结

  这一次比较遗憾的地方是自己并没有怎么动手写代码。
  就只是拿着猫大的源码重新编译了一下而已。
  不过教程大体也就这些内容,基础的地方我都已经OK了。
  那些我觉得很亮点的东西已经卸载上面的文章里面。

  整体来说还是非常不错的,特别是对于有编程开发经验,但是 C++ 不太懂的新人。
  可惜指针的地方猫大讲得也比较少,当然这不是教程的重点,我理解。
  教程的文件里面也提供了说明文档,里面推荐了一下 C++ 的书籍来进行入门学习。

  另外教程也详细讲解了如何通过 C++ 来写一个 Mel 命令
  有这方面开发需求的同学可以学一学,当然 玩具蛇 前辈的视频教程也有讲。 链接
  另外还有一套非常经典的外国教程 链接

  说来惭愧,上面两套教程都很棒,可惜我都是只看了开头前面几集的部分,并没有完整看完。
  以后有机会补上,并且记录观看笔记的。
  外国那一套印象很深刻,记录了 CMake 文件的使用方法,强烈推荐。