我正在用JavaScript滚动自己的3D引擎,并且仅使用画布绘图,而不使用WebGL。这是另一个Minecraft克隆版本;我喜欢盒子,不要判断我。
到目前为止,除一件事外,其他所有东西都运转良好:在3D模式下,当某些顶点在接近裁剪平面的后面时,它们在屏幕上的投影变得怪异(假定用于追踪平面的其他顶点在前面)。
我尝试剪切这些点,但是随后我可以看到使用这些顶点的曲面。在WebGL / OpenGL中,图形卡可以处理这些点,并且可以正确渲染平面,但是我无法使用硬件,因此我必须自己编写代码。
我不太确定该怎么做,目前我想到的最后一件事是反转玩家近裁剪平面后面的点的投影,这很合逻辑,因为我必须将一个点投影到前面的屏幕上顶点
这是我的想法:
以下是一些图像说明发生了什么:
从远处看,蓝色框呈现得很好。
当某些顶点在播放器的接近裁剪平面的后面时,我会进行反向投影,但看起来不正确:
focalLength *= -1;
2d.x = x*focalLength/z;
2d.y = y*focalLength/z;
请注意,由于用于绘制其面的所有顶点都在播放器后面,因此后面的灰色框已被完全删除。
这是在向上或向下查找时发生的情况。
我不知道该怎么做背后的数学运算,我希望有人已经遇到了同样的问题,可以为我提供帮助。
lineTo(x,y)
仍然可以调用该函数,只是我不知道它的行为方式。我同意,这是一个离奇的维度。