所以我正在尝试编写一个简单的3d应用程序(仅供研究使用)。
我想用Phong做阴影。所以我正在阅读this article并看到
由于这可能很慢,如果您不介意一点自由的损失,有各种方法可以加快速度。如果您假设光源与摄像机位于同一位置,则可以完全忽略V和H矢量。取而代之的是法线向量的X和Y分量,乘以128并加127(假设法线向量的大小为1)。
好吧,我可以做到,但是现在,我该怎么做X
和Y
?我有三角形数组,每个都计算正常。我正在计算此X
和Y
,但我该怎么做?此代码有效,但不正确,因为在这种情况下,当我假设它在相机点时,光源在0,0,0
。
此处的代码无效:
public override void Draw(Graphics graphics, VisualizableShape shape)
{
if (!shape.IsVisible)
return;
base.Draw(graphics, shape); // draw edge
int x = (int) (shape.Normal.X*128 + 127);
int y = (int) (shape.Normal.Y*128 + 127);
int z = x + y;
var color = Color.FromArgb(255, (Pen.Color.R*z)/511, ((Pen.Color.G*z)/511), (Pen.Color.B*z)/511);
graphics.FillPolygon(new SolidBrush(color), shape.Points.CastToPointF());
}
在这种情况下,我该怎么办...