基本上,我正在尝试使用深度模拟在2D画布上进行3D投影。作为一般规则,远离身体的身体比靠近观察者的身体更“阴影”更小。唯一缺少的就是身体越来越远,身体越来越近。
有时,更远的身体被拉到更近的身体后面,但是总是会有较小的身体被吸引到较大的身体前面,这意味着更远的身体有时会出现在身体的前面。近。
我尝试通过z位置对主体进行排序来解决它。 bodies数组是一个对象数组,其中0包含一个正文位置的数组,0是x,1是y,2是z。我首先根据x,y和z轴的旋转更新实体的位置,存储到主体对象的np值中,然后进行排序,并绘制实体。我已经尝试改变数组的排序方式,改变循环的顺序,但仍然没有雪茄。
只是想知道是否有人能指出我正确的方向让这个3D“引擎”表现正常。任何帮助表示赞赏。一些快速注意事项:使用Q / A,W / S和E / D键完成沿三个轴的旋转,使用R / F键完成z轴的放大和缩小,以及默认旋转z轴可以使用P键完成。我想要做的就是在这里:
答案 0 :(得分:2)
您正在对原始xyz值进行排序,而不是对已转换的np值进行排序。我通过切换来让它看起来正确......
bodies.sort(function(a,b) {return a[0][2]-b[0][2]});
to
bodies.sort(function(a,b) {return a.np[1]-b.np[1]});
有变更,请参阅http://home.comcast.net/~trochoid/mod5.html
我没有遵循您的所有代码,因此这可能不是一个完整的解决方案。具体来说,我认为它将在np [2]上对变换的z值进行排序,但是np [1]给出了正确的结果。我想也许你可以切换这些坐标。此外,看起来您正在转换和投影z值,并且上面的代码修复对此投影的z值进行排序。它似乎工作正常,但我从来没有预测z值本身,只需使用转换后的z来投影xy。无论如何,看起来不错!
答案 1 :(得分:0)
摆线。我不得不从另一台计算机访问,仍然没有注册,所以我必须添加这个作为答案而不是评论。
如果您注意到,旋转任何其他轴时旋转x和y的旋转轴(例如,如果按W旋转,然后旋转不同的轴,然后再次按W,您会注意到螺旋线在你的代码中以相同的方式旋转)。 Ť
他的z轴并非如此。无论您如何旋转x轴和y轴,z轴将始终“从右向左”旋转(例如,在默认配置中,螺旋沿z轴螺旋,或者使用E / D键旋转轴,但是如果沿任何其他轴旋转螺旋线,使用E / D键旋转不再螺旋螺旋线)。
我不知道为什么该轴的行为会有所不同,所以我希望得到您的帮助以使该轮换正常工作。谢谢。
答案 2 :(得分:0)
我知道这并没有回答原来的问题,但是根据你想要取得的成就,一般都要注意还有'视差滚动'(example)(特别是在CSS3中)({ {3}})。