hai saya seorang pemula yang lengkap di bidang computergraphics, mohon maaf jika ini jawaban yang bodoh. Saya mencoba membuat mesin 3d sederhana dari awal, lebih untuk tujuan pendidikan daripada untuk penggunaan nyata.
untuk saat ini saya hanya menghitung wajah normal. lewat sini:
saya punya objek Permukaan dengan di dalam daftar Segitiga. saya menghitung normals di dalam kelas Triangle, dengan cara ini:
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
}
dan saat membangun permukaan:
t = new Triangle(v1,v2,v3)
t.computeFaceNormals()
surface.addTriangle(t)
dan saya pikir ini adalah cara terbaik untuk melakukan itu .. bukan?
sekarang .. ini berhasil, ok. tapi cahaya itu tidak dihaluskan. Saya mencoba menghitung juga vertex normals. (Saya sedang menguji mesin saya dengan permukaan tubolar jadi saya memiliki hampir semua titik dibagi dengan lebih dari satu segitiga)
Saya telah menemukan algoritma sederhana ini: flipcode vertex normal tapi .. hei algoritma ini memiliki .. kompleksitas eksponensial? (Jika ingatan saya tidak gagal latar belakang ilmu komputer saya ..) (bytheway .. itu memiliki 3 loop bersarang .. saya tidak berpikir itu cara terbaik untuk melakukannya ..)
ada saran?
t
adalah hasilcomputeFaceNormals
(yang tidak mengembalikan apa-apa), bukan segitiga.