//------顶点部分--------- private void UpdateMatrix() { Vector up = new Vector(0, 1, 0, 1); //垂直向上的法向量 this.View = MyStaticMethod.GetViewMatrix(this.MyCamera.eye, this.MyCamera.lookat, up); this.Projection = MyStaticMethod.GetPerspectiveMatrix(this.MyCamera.Fovy, this.MyCamera.Aspect, 1, 100); //this.Transform = View * Projection; //顺序不能乱 如果先去除隐藏面,然后根据显示的面来计算顶点法向量,这样有一些点的法向量会缺失,一些点法向量不完整 //比如0点 因为隐藏面全消除的关系,法向量为0,而1点的法向量,也因为只添加上1357面的法向量的缘故,法向量为1 0 0 应该是0.33 -0.33 -0.33 //所以必须先正确计算出顶点的法向量 再消除隐藏面 MyStaticMethod.GetNormalFromFaces(mesh); //获得每一个面的法向量 //MyStaticMethod.HidenFacesDemolish(mesh, at - eye); 移动至最后一行 MyStaticMethod.GetVerticesNormal(mesh); //每一个面法向量添加到相应的顶点 并归一化 MyStaticMethod.HidenFacesDemolish(mesh, this.MyCamera.lookat - this.MyCamera.eye); MyStaticMethod.PolygonToTriangle(mesh); //把面分割成两个三角形并且赋值相应的法向量 }