//============================================================ public void DataUnserialize(IInput input) { // 读取顶点坐标 for (int n = 0; n < 3; n++) { Indexs[n] = input.ReadInt32(); Points[n] = new SFloatPoint3(); Points[n].Unserialize(input); } }
//============================================================ 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); }
//============================================================ // <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); } } }