我试图从对象空间获取一个对象,并使用这些中间矩阵将其映射到投影空间中:
第一个矩阵(I)是从目标空间转换为惯性空间的矩阵,但由于我的对象在目标空间内没有以任何方式旋转或转换,所以这个矩阵是4x4恒等矩阵。
第二矩阵(W)是将惯性空间转化为世界空间的矩阵,在所有坐标上都是因子a= 14.1的尺度变换矩阵,因为惯性空间原点与世界空间原点重合。
/a 0 0 0\
W = |0 a 0 0|
|0 0 a 0|
\0 0 0 1/
第三个矩阵(C)是从世界空间转化为相机空间的矩阵。这个矩阵是一个平移矩阵,它的平移值为(0,0,10),因为我希望相机位于物体的后面,所以物体必须定位到z轴上的10个单元。
/1 0 0 0\
C = |0 1 0 0|
|0 0 1 10|
\0 0 0 1/
最后,第四个矩阵是投影矩阵(P)。考虑到眼睛位于世界空间的原点,投影平面由z= 1定义,投影矩阵为:
/1 0 0 0\
P = |0 1 0 0|
|0 0 1 0|
\0 0 1/d 0/
其中d是眼睛到投影平面的距离,所以d= 1。
我把它们相乘如下:(P)x)x)x,其中V是列矢量形式的顶点坐标:
/x\
V = |y|
|z|
\1/
得到结果后,将x和y坐标除以w,得到实际屏幕坐标。
显然,我在这里做错了什么或者完全遗漏了一些东西,因为它没有正确的渲染。下面是斯坦福龙的底端的图片:
此外,我应该补充说,这是一个软件渲染器,所以这里没有DirectX或OpenGL的东西。
发布于 2012-12-04 15:42:58
好的,我已经修好了。按照内森·里德的建议,我用了一个更简单的造型。结果发现眼睛离投影平面太近了。我已经设置了1,000个单位,现在它似乎是正确的渲染。
https://gamedev.stackexchange.com/questions/44960
复制相似问题