猫史档案馆


论3D绘图于编程猫的实现--续篇

用户:IysthingraphicsIysthingraphics查看:1 回复:2 评论:1 创建时间:2021-12-04T12:10:44


(文接上篇)

首先,让单个点旋转起来(绕着xyz都等于0的原点旋转,且仅喵面旋转),你需要让X'=Xsin(θ)(水平旋转,看起来只是在做简谐运动)或Y'=Ysin(θ)(垂直旋转,同上)抑或是X'=Xsin(θ),Y'=Ycos(θ)(就是个圆)。啊?你不是说3D?怎么只有2D??别急,还早着呢。我们可以说这三种旋转都仅仅是二维平面上的旋转,但是我们要的是那种全方位三百六十度的三维旋转,有XYZ三个轴而不是两个轴。首先,一个点,他有XYZ三个空间维度,好了,开始表演。先从X开始下手(从这里开始连我自己都摸不着头脑了有错误请帮忙修正谢谢了)跟上次一样,X'=Xsin(θx)然后是第二个维度,喵,上百度百科公式原理会解释的,挖个坑,等我高三再见!百度百科上的投影步骤分两步,我们要用的是透视投影,很复杂就对了(我实在不懂呀QwQ)第一步,求出变换后的三维坐标,第二步,用平面投影的方式将三维点投影到二维空间

一:Ax,y,z即被投影三维空间中的一点,Cx,y,z为观测的位置,θx,y,z为观测点的旋转角度,Ex,y,z为“观测者相对显示平面的位置”(百度百科原文,看不懂,目测是类似于FOV的参数),Bx,y为该点在二维平面上的透视投影

这里有矩阵和非矩阵两种方法,矩阵表示过于的难所以上公式

Dx = cos(θy)(sin(θz)(Ay-Cy)+cos(θz)(Az-Cz))-sin(θy)(Az-Cz);Dy = sin(θx)(cos(θy)(Az-Cz)+sin(θy)(sin(θz)(Ay-Cy)+cos(θz)(Ax-Cx)))+cos(θx)(cos(θz)(Ay-Cy)-sin(θz)(Ax-Cx));Dz = cos(θx)(cos(θy)(Az-Cz)+sin(θy)(sin(θz)(Ay-Cy)+cos(θz)(Ax-Cx)))-sin(θx)(cos(θz)(Ay-Cy)-sin(θz)(Ax-Cx));Bx = (Dx-Ex)(Ez/Dz);By = (Dy-Ey)(Ez/Dz)

(QwQ真的是没办法才上公式了啦)


回复

上一页1 页 / 共 1下一页
IysthingraphicsIysthingraphics

透视投影实际上没有多少个人能在编程猫社区里真正构建出来,比如我在做的时候遇到了一点数值溢出的问题,会绕回然后产生奇奇怪怪的效果

 

点赞0


评论


ParseYPasyParseYPasy

https://shequ.codemao.cn/community/429563 可以帮忙查下有没有错,我很担心sin,cos,asin的取值会发生错误(尽管我采用的是单位圆)

点赞0


评论