こんにちは、私はコンピュータグラフィックスの完全な初心者です。愚かな答えだとすみません。シンプルな3Dエンジンをゼロから作ろうとしています。実際の使用よりも教育目的のためです。
今のところ私は顔の法線のみを計算します。この方法では:
Triangleのリストの中にあるSurfaceオブジェクトがあります。Triangleクラス内の法線を次のように計算します。
triangle.computeFaceNormals() {
Vec3D u = v1.sub(v3)
Vec3D v = v1.sub(v2)
Vec3D normal = Vec3D.cross(u,v)
normal.normalized()
this.n1 = this.n2 = this.n3 = normal
}
そして表面を構築するとき:
t = new Triangle(v1,v2,v3)
t.computeFaceNormals()
surface.addTriangle(t)
これが一番いい方法だと思います…。
さて、これでうまくいきます。軽いですが滑らかにはなりません。頂点法線も計算しようとしています。(私は自分のエンジンを細管表面でテストしているので、ほぼすべての頂点が複数の三角形と共有されています)
私はこの単純なアルゴリズムを見つけました:フリップコード頂点法線 ですが.. heiこのアルゴリズムは..指数関数的な複雑さですか?(私の記憶が私のコンピュータサイエンスの背景に失敗しない場合)
なにか提案を?
t
結果であるように見えcomputeFaceNormals
ます。