在墙后绘制黑色区域
Draw black area behind walls
在 2D 游戏中,我想使用涂黑的区域(目前)模仿玩家的视觉。我认为最简单的方法是使用 cG 着色器。
这有两个主要组成部分,我有墙端点和玩家位置。首先,在 C# 代码中,我像这样围绕玩家位置旋转墙端点(方程式,而不是代码):
x = px - (wx * cos(a) - wy * sin(a)) 和
y = py - (wx * sin(a) + wy * cos(a))
然后在着色器中,我使用基本代数求出墙产生的直线方程,并确定当前像素是否在墙后面:
y - y1 = m(x - x1) => 0 = m(x - x1) - y + y1 其中 x1 和 y1 是我的测试点。
通过对两个测试点(玩家位置和屏幕上的像素位置)使用该等式,我可以使用此测试测试像素是否在线的另一侧:
0 > (m * (x - x1) - y + y1)(m * (x - x2) - y + y2)
虽然它似乎工作正常(大概),但当我旋转相机时,墙上的线条似乎以一种受控但有点不可预测的方式四处乱窜。我的数学哪里出了问题?如果您需要代码,我可以提供,但这里的问题实际上只是数学问题。
您似乎是在围绕原点旋转墙端点,然后根据玩家位置进行平移,而不是通过先平移然后旋转来围绕玩家位置进行旋转。尝试这样的事情:
x = ((px - wx) * cos(a) - (py - wy) * sin(a)) 和 y = ((px - wx) * sin(a) + (py - wy) * cos(a))
我也不确定你为什么要从玩家位置中减去墙的端点而不是相反,但这的正确性可能取决于你代码中的其他内容(取决于你是否想要来自墙的矢量给玩家或玩家给墙)。
在 2D 游戏中,我想使用涂黑的区域(目前)模仿玩家的视觉。我认为最简单的方法是使用 cG 着色器。
这有两个主要组成部分,我有墙端点和玩家位置。首先,在 C# 代码中,我像这样围绕玩家位置旋转墙端点(方程式,而不是代码):
x = px - (wx * cos(a) - wy * sin(a)) 和 y = py - (wx * sin(a) + wy * cos(a))
然后在着色器中,我使用基本代数求出墙产生的直线方程,并确定当前像素是否在墙后面:
y - y1 = m(x - x1) => 0 = m(x - x1) - y + y1 其中 x1 和 y1 是我的测试点。
通过对两个测试点(玩家位置和屏幕上的像素位置)使用该等式,我可以使用此测试测试像素是否在线的另一侧:
0 > (m * (x - x1) - y + y1)(m * (x - x2) - y + y2)
虽然它似乎工作正常(大概),但当我旋转相机时,墙上的线条似乎以一种受控但有点不可预测的方式四处乱窜。我的数学哪里出了问题?如果您需要代码,我可以提供,但这里的问题实际上只是数学问题。
您似乎是在围绕原点旋转墙端点,然后根据玩家位置进行平移,而不是通过先平移然后旋转来围绕玩家位置进行旋转。尝试这样的事情:
x = ((px - wx) * cos(a) - (py - wy) * sin(a)) 和 y = ((px - wx) * sin(a) + (py - wy) * cos(a))
我也不确定你为什么要从玩家位置中减去墙的端点而不是相反,但这的正确性可能取决于你代码中的其他内容(取决于你是否想要来自墙的矢量给玩家或玩家给墙)。