1

所以我正在尝试编写一个简单的 3d 应用程序(仅供学习)。

我想使用 Phong 进行着色。所以我正在阅读这篇文章,看看

由于这可能很慢,如果您不介意失去一点自由,有多种方法可以加快速度。如果假设光源与相机位于同一位置,则可以完全忽略 V 和 H 向量。而是取法线向量的 X 和 Y 分量,乘以 128 并加上 127(假设是法线向量的大小为 1)。

好的,我可以做到,但是现在,我该怎么XY?我有三角形数组,每个都计算正常。我正在计算这个XY,但我该怎么办?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());
    }

只是不知道在这种情况下我该怎么办......

4

0 回答 0