Пример #1
0
        public void UpdateGeometry()
        {
            if (VertexArray == null)
            {
                return;
            }
            int updateThreadID = GlobalEnvironment.UpdateThreadID;
            int curThreadID    = System.Threading.Thread.CurrentThread.ManagedThreadId;

            if (updateThreadID != curThreadID)
            {
                return;
            }
            VdsVec3d[] vArray = VertexArray.ToArray();
            VdsVec3d[] nArray = null;
            if (NormalArray != null)
            {
                nArray = NormalArray.ToArray();
            }
            else
            {
                nArray = new VdsVec3d[0];
            }
            VdsVec4d[] cArray = null;
            if (ColorArray != null)
            {
                cArray = ColorArray.ToArray();
            }
            else
            {
                cArray = new VdsVec4d[0];
            }
            VdsVec2d[] tArray = null;
            if (TexCoordArray != null)
            {
                tArray = TexCoordArray.ToArray();
            }
            else
            {
                tArray = new VdsVec2d[0];
            }

            VdsVec4d[] maturalArray = null;
            if (AmbientMatural == null && DiffuseMatural == null && SpecularMatural == null && EmissionMatural == null)
            {
                maturalArray = new VdsVec4d[0];
            }
            else
            {
                maturalArray = new VdsVec4d[4];
                if (AmbientMatural == null)
                {
                    maturalArray[0] = new VdsVec4d(0.8, 0.8, 0.8, 1.0);
                }
                else
                {
                    maturalArray[0] = AmbientMatural;
                }
                if (DiffuseMatural == null)
                {
                    maturalArray[1] = new VdsVec4d(0.9, 0.9, 0.9, 1.0);
                }
                else
                {
                    maturalArray[1] = DiffuseMatural;
                }
                if (SpecularMatural == null)
                {
                    maturalArray[2] = new VdsVec4d(0.95, 0.95, 0.95, 1.0);
                }
                else
                {
                    maturalArray[2] = SpecularMatural;
                }
                if (EmissionMatural == null)
                {
                    maturalArray[3] = new VdsVec4d(0.1, 0.1, 0.1, 1.0);
                }
                else
                {
                    maturalArray[3] = EmissionMatural;
                }
            }
            string tFileName = "";

            if (TextureFileName != null)
            {
                tFileName = TextureFileName;
            }
            int drawMode = 0;

            switch (DrawMode)
            {
            case GeometryDrawModel.POINTS:
                drawMode = 0;
                break;

            case GeometryDrawModel.LINES:
                drawMode = 1;
                break;

            case GeometryDrawModel.LINE_STRIP:
                drawMode = 3;
                break;

            case GeometryDrawModel.LINE_LOOP:
                drawMode = 2;
                break;

            case GeometryDrawModel.TRIANGLES:
                drawMode = 4;
                break;

            case GeometryDrawModel.TRIANGLE_STRIP:
                drawMode = 5;
                break;

            case GeometryDrawModel.TRIANGLE_FAN:
                drawMode = 6;
                break;

            case GeometryDrawModel.QUADS:
                drawMode = 7;
                break;

            case GeometryDrawModel.QUAD_STRIP:
                drawMode = 8;
                break;
            }
            IUpdateGeometry(this.NativeHandle, vArray, nArray, cArray, tArray, drawMode, (int)CullFaceMode, tFileName, maturalArray);
        }