这更像是一个数学问题,而不是编程问题。
我使用 Visual Basic .Net 创建了一个非常基本的 3D 引擎。它在屏幕上显示带有附加 z 轴的线条。引擎可以工作,但是当线条的一部分低于 0 时,它会变得困惑并开始再次绘制反转的线条。
这是计算分数的方式:
y = (point.y / z) + offset.y + camera.y
x = (point.x / z) + offset.x + camera.x
任何人都可以找到一种方法,只在与 z=0 轴相交时绘制线的一部分吗?
最佳答案
你想要绘制 z>0 的所有内容,因为零以下的所有内容都在相机后面,而 Z == 0 的地方,这会爆炸,因为你不能除以零。所以我会这样做:('scuse the c#,但这应该是相同的)
y = z > 0 ? (point.y / z) + offset.y + camera.y : 10000;
x = z > 0 ? (point.x / z) + offset.x + camera.x : 10000;
其中 10000 值足够大,不会出现在屏幕上。
如果您的 z 轴指向相反方向,您需要执行以下操作:
y = z < 0 ? -1*(point.y / z) + offset.y + camera.y : 10000;
x = z < 0 ? -1*(point.x / z) + offset.x + camera.x : 10000;
关于vb.net - Visual Basic .Net 3D 引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4344556/