在墙后画出黑色区域

时间:2016-05-26 21:18:32

标签: c# opengl math algebra cg

在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)

虽然它似乎工作正常(ish),当我旋转相机时,墙壁上的线条似乎以受控但有些不可预测的方式连枷。我的数学在哪里错了?如果你需要代码我可以提供它,但这里的问题实际上只是数学。

1 个答案:

答案 0 :(得分:1)

看起来您正在围绕原点旋转墙端点,然后通过玩家位置进行平移,而不是通过首先平移然后旋转来围绕玩家的位置旋转它们。尝试这样的事情:

x =((px - wx)* cos(a) - (py - wy)* sin(a))和y =((px - wx)* sin(a)+(py - wy)* cos (a))的

我也不确定你为什么要从播放器位置减去墙端点而不是相反,但是这个的正确性可能取决于你的代码中的其他东西(取决于你是否希望从墙上的矢量到玩家或玩家到墙上。)