예제 #1
0
 //============================================================
 public void DataUnserialize(IInput input)
 {
     // 读取顶点坐标
     for (int n = 0; n < 3; n++)
     {
         Indexs[n] = input.ReadInt32();
         Points[n] = new SFloatPoint3();
         Points[n].Unserialize(input);
     }
 }
예제 #2
0
        //============================================================
        public void LoadResource(FDrGeometry geometry)
        {
            // 创建数据
            int         faceCount = geometry.FaceList.Count;
            FByteStream vertexs   = new FByteStream(4 * 10 * 3 * faceCount);
            FByteStream faces     = new FByteStream(3 * faceCount);

            for (int f = 0; f < faceCount; f++)
            {
                FDrFace face = geometry.FaceList[f];
                for (int n = 0; n < 3; n++)
                {
                    // 输出顶点数据
                    FDrVertex vertex = geometry.VertexList[face.VertexIndex[n]];
                    FDrCoord  coord  = geometry.CoordList[face.CoordIndex[n]];
                    float     coordX = coord.Coord.X;
                    float     coordY = coord.Coord.Y + 1.0f;
                    if (geometry.Channels.Count > 1)
                    {
                        FDrChannelFace channelFace  = geometry.Channels[2].Indexs[face.Index];
                        SFloatPoint3   channelPoint = channelFace.Points[n];
                        coordX = channelPoint.X;
                        coordY = channelPoint.Y;
                    }
                    FDrColor color = geometry.ColorList[face.ColorIndex[n]];
                    vertexs.WriteFloat(vertex.Position.X);
                    vertexs.WriteFloat(vertex.Position.Y);
                    vertexs.WriteFloat(vertex.Position.Z);
                    vertexs.WriteFloat(1.0f);
                    vertexs.WriteFloat(coordX);
                    vertexs.WriteFloat(coordY);
                    vertexs.WriteFloat(color.Color.R);
                    vertexs.WriteFloat(color.Color.G);
                    vertexs.WriteFloat(color.Color.B);
                    vertexs.WriteFloat(1.0f);
                    // 输出索引数据
                    faces.WriteInt32(3 * f + n);
                }
            }
            // 创建顶点流
            _vertexBuffer        = new FDxVertexBuffer();
            _vertexBuffer.Device = _device;
            _vertexBuffer.UploadNormal(10, vertexs.Memory, 0, vertexs.Length);
            // 创建索引流
            _faceBuffer        = new FDxFaceBuffer();
            _faceBuffer.Device = _device;
            _faceBuffer.Upload32(faces.Memory, 0, faces.Length);
        }
예제 #3
0
 //============================================================
 // <T>加载配置信息。</T>
 //
 // @param xconfig 配置信息
 //============================================================
 public void LoadConfig(FXmlNode xconfig)
 {
     // 读取属性
     _typeName = xconfig.Get("type_name");
     // 读取节点集合
     foreach (FXmlNode xnode in xconfig.Nodes)
     {
         // 读取中心
         if (xnode.IsName("Center"))
         {
             _centerFront = xnode.GetFloat("front");
             _centerBack  = xnode.GetFloat("back");
         }
         // 读取位置
         if (xnode.IsName("Position"))
         {
             _position.LoadConfig(xnode);
         }
         // 读取方向
         if (xnode.IsName("Direction"))
         {
             _direction.LoadConfig(xnode);
         }
         // 读取目标
         if (xnode.IsName("Target"))
         {
             SFloatPoint3 target = new SFloatPoint3();
             target.LoadConfig(xnode);
             _direction.X = target.X - _position.X;
             _direction.Y = target.Y - _position.Y;
             _direction.Z = target.Z - _position.Z;
             _direction.Normalize();
         }
         // 读取焦平面
         if (xnode.IsName("Focal"))
         {
             _focalNear = xnode.GetFloat("near");
             _focalFar  = xnode.GetFloat("far");
         }
         // 读取视角
         if (xnode.IsName("Viewport"))
         {
             _viewport.LoadConfig(xnode);
         }
     }
 }