C# 在墙后绘制黑色区域
在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)C# 在墙后绘制黑色区域,c#,opengl,math,algebra,cg,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用于我的测试点 通过对两个测试
虽然它似乎工作正常(ish),但当我旋转相机时,墙壁上的线条似乎以一种可控但有点不可预测的方式来回摆动。我的数学哪里出了问题?如果您需要代码,我可以提供,但这里的问题实际上只是数学问题。看起来您是围绕原点旋转墙端点,然后按照玩家位置进行平移,而不是通过先平移然后旋转来围绕玩家位置旋转它们。试着这样做: x=((px-wx)*cos(a)-(py-wy)*sin(a))和y=((px-wx)*sin(a)+(py-wy)*cos(a))
我也不确定为什么要从播放器位置减去墙端点,而不是从播放器位置减去墙端点,但这是否正确可能取决于代码中的其他内容(取决于您是希望从墙到播放器还是播放器到墙的向量)。是的,就是这样。我有球员的分数,当他们应该参与旋转矩阵本身。谢谢桑加克。