Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在墙后绘制黑色区域_C#_Opengl_Math_Algebra_Cg - Fatal编程技术网

C# 在墙后绘制黑色区域

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用于我的测试点 通过对两个测试

在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),但当我旋转相机时,墙壁上的线条似乎以一种可控但有点不可预测的方式来回摆动。我的数学哪里出了问题?如果您需要代码,我可以提供,但这里的问题实际上只是数学问题。

看起来您是围绕原点旋转墙端点,然后按照玩家位置进行平移,而不是通过先平移然后旋转来围绕玩家位置旋转它们。试着这样做:

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


我也不确定为什么要从播放器位置减去墙端点,而不是从播放器位置减去墙端点,但这是否正确可能取决于代码中的其他内容(取决于您是希望从墙到播放器还是播放器到墙的向量)。

是的,就是这样。我有球员的分数,当他们应该参与旋转矩阵本身。谢谢桑加克。