だから私は単純な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());
}
この場合どうすればいいのかわからない…