三维的世界
因为是玩街机和FC长大的,对像素风的游戏有一些特殊的感情。所以学Unity时,无法理解为什么一定要有一个相机,为什么2D游戏依旧有相机的概念......
第一次开发游戏用的是系统自带的绘图API,所以我认为游戏的世界就只是一块画布,根据玩家的输入来画不同的东西。上个世纪的人应该都是带着这种思维来开发游戏的吧,然而3D游戏普及以后,这种想法就成为了历史的尘埃了。
当然,这种过时的想法并没有没什么大的影响。只是当我尝试理解3D的世界时,脑海里什么都没有。我在(0,0,0)的位置,一个方块在(0,0,1)的位置。只给出0,0,0和0,0,1两个坐标的话,脑海里完全没有印象。我拼命在脑海里构建出三维的世界,试图把自己和另一个物体放进去,但得到的依旧是一片空白。我渐渐明白,这是没有摄像机的缘故。
如果承认摄像机的存在,应该就能够看到眼前的方块了。
已经过去快10天了,我依旧没有理解世界坐标转换成屏幕坐标,也就是W2S的意义。
我以为是知识量不够,重新复习了三角函数,学了矩阵,向量......
理论上的步骤能理解,然而实际操作起来,究竟为什么可以把3D转成2D,背后的依据是什么依旧没有概念。还是书读的太少了,各种英文的资料看不懂,知乎上的大多讲不清楚......
总共两种方法,一种是乘矩阵,至于为什么乘矩阵就能转换,以及矩阵的意义,没人说清楚。
另一种容易理解,用反三角函数算出一个角度,这个角度能够反映在X轴和Y轴上,物体离屏幕中间的距离。最终得到一个[0,1]的值,直接乘屏幕宽高就可以得到物体位置。然而我失败了,atan和asin的返回值不对劲,想破脑袋也没找到原因。
W2S并不是很难理解的问题,我开始怀疑自己是一个弱智,但马上又告诉自己,只是缺乏了一些知识,把那些知识补上就能够理解W2S了。然而没有用,学了Opengl和DX依旧理解不了W2S的意义。
当然,其实没必要执着于这件事,游戏开发的话,游戏引擎会直接提供W2S函数,ESP的话,可以直接从游戏的dll里找到坐标转换的代码......有一万条路可以做到降维打击,可每条路最终还是通向现在正在尝试通过的路。某天那些路被封死,这条路也会存在。
可能,我真的活在二次元,理解不了高维生物的世界?没有这种道理,应该只是太笨而已。
即使真的是这样,总有一天我会抵达三维的世界,然后掌握降维打击的力量。