Ejemplo n.º 1
0
 //============================================================
 // <T>序列化内部数据到输出流。</T>
 //
 // @param output 输出流
 //============================================================
 public void Serialize(IOutput output)
 {
     // 输出属性
     output.WriteString(_typeName);
     // 输出中心
     output.WriteFloat(_centerFront);
     output.WriteFloat(_centerBack);
     // 输出位置
     _position.Serialize(output);
     // 输出方向
     _direction.Serialize(output);
     // 输出焦平面
     output.WriteFloat(_focalNear);
     output.WriteFloat(_focalFar);
     // 输出视角
     _viewport.Serialize(output);
 }
Ejemplo n.º 2
0
        //============================================================
        public void Serialize(FDrGeometry submesh, int flags, IOutput output)
        {
            // 输出顶点
            if (0 != (EDrVertex.Position & flags))
            {
                _position.Serialize(output);
            }
            // 输出颜色
            if (0 != (EDrVertex.Color & flags))
            {
                _color.SerializeByteUnsigned4(output);
            }
            // 输出坐标
            if (0 != (EDrVertex.Coord & flags))
            {
                output.WriteFloat(_coord.X);
                output.WriteFloat(1 + _coord.Y);
                if (0 != (EDrVertex.CoordLight & flags))
                {
                    output.WriteFloat(_lightCoord.X);
                    output.WriteFloat(_lightCoord.Y);
                }
            }
            // 输出法线,副法线,切线
            if (0 != (EDrVertex.Normal & flags))
            {
                _normal.SerializeByteSigned3(output);
                output.WriteUint8(1);
                //output.WriteUint8((byte)Illum);
            }
            if (0 != (EDrVertex.Binormal & flags))
            {
                _binormal.SerializeByteSigned3(output);
                output.WriteUint8(1);
            }
            if (0 != (EDrVertex.Tangent & flags))
            {
                _tangent.SerializeByteSigned3(output);
                output.WriteUint8(1);
            }
            // 使用两条管道,每条管道4个数据,前管道为索引内容,后管道为权重
            int count = _weights.Count;

            if (0 != (EDrVertex.BoneIndex & flags))
            {
                for (int n = 0; n < _maxWeightCount; n++)
                {
                    int value = 0;
                    if (n < count)
                    {
                        value = submesh.FindAdjustBoneIndex(_weights[n].BoneId);
                    }
                    output.WriteUint8((byte)value);
                }
            }
            if (0 != (EDrVertex.BoneWeight & flags))
            {
                for (int n = 0; n < _maxWeightCount; n++)
                {
                    float value = 0;
                    if (n < count)
                    {
                        value = _weights[n].Weight;
                    }
                    output.WriteUint8((byte)(value * 255));
                }
            }
        }
Ejemplo n.º 3
0
 //============================================================
 public void Serialize(IOutput output)
 {
     _translation.Serialize(output);
     _euler.Serialize(output);
     _scale.Serialize(output);
 }