所以我正在尝试编写一个简单的 3d 应用程序(仅供学习)。
我想使用 Phong 进行着色。所以我正在阅读这篇文章,看看
由于这可能很慢,如果您不介意失去一点自由,有多种方法可以加快速度。如果假设光源与相机位于同一位置,则可以完全忽略 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());
}
只是不知道在这种情况下我该怎么办......