Exemplo n.º 1
0
        //------顶点部分---------
        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);   //把面分割成两个三角形并且赋值相应的法向量
        }