Beispiel #1
0
        //============================================================
        public void LoadResource()
        {
            // 创建数据
            FByteStream vertexs = new FByteStream();

            float[] vertexData = new float[] {
                -1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f,
                1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f,
                1.0f, -1.0f, 0.0f, 1.0f, 1.0f, 0.0f,
                -1.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f,
            };
            foreach (float value in vertexData)
            {
                vertexs.WriteFloat(value);
            }
            // 输出索引数据
            FByteStream faces = new FByteStream();

            int[] faceData = new int[] {
                0, 1, 2,
                0, 2, 3,
            };
            foreach (int value in faceData)
            {
                faces.WriteInt32(value);
            }
            // 创建顶点流
            _vertexBuffer        = new FDxVertexBuffer();
            _vertexBuffer.Device = _device;
            _vertexBuffer.UploadNormal(6, vertexs.Memory, 0, vertexs.Length);
            // 创建索引流
            _faceBuffer        = new FDxFaceBuffer();
            _faceBuffer.Device = _device;
            _faceBuffer.Upload32(faces.Memory, 0, faces.Length);
        }
Beispiel #2
0
        //============================================================
        public void Setup()
        {
            //------------------------------------------------------------
            float[] vertexData = new float[] {
                -1, 1, 0, 1, 0, 0,
                1, 1, 0, 1, 1, 0,
                1, -1, 0, 1, 1, 1,
                -1, -1, 0, 1, 0, 1
            };
            FByteStream vertexStream = new FByteStream();

            foreach (float value in vertexData)
            {
                vertexStream.WriteFloat(value);
            }
            // 创建顶点缓冲
            _vertexBuffer        = new FDxVertexBuffer();
            _vertexBuffer.Device = _device;
            _vertexBuffer.Upload5(6, vertexStream.Memory, 0, vertexStream.Length);
            //------------------------------------------------------------
            int[]       faceData   = new int[] { 0, 1, 2, 0, 2, 3 };
            FByteStream faceStream = new FByteStream();

            foreach (int value in faceData)
            {
                faceStream.WriteInt32(value);
            }
            // 创建面缓冲
            _faceBuffer        = new FDxFaceBuffer();
            _faceBuffer.Device = _device;
            _faceBuffer.Upload(faceStream.Memory, 0, faceStream.Length);
        }
Beispiel #3
0
 //============================================================
 public void LoadResource(FDxRsGeometry resource)
 {
     _name = resource.Name;
     // 创建顶点缓冲
     _vertexBuffer        = new FDxVertexBuffer();
     _vertexBuffer.Device = _device;
     _vertexBuffer.Upload(resource.VertexSize, resource.VertexBuffer.Memory, 0, resource.VertexBuffer.Length);
     // 创建面缓冲
     _faceBuffer        = new FDxFaceBuffer();
     _faceBuffer.Device = _device;
     _faceBuffer.Upload(resource.FaceBuffer.Memory, 0, resource.FaceBuffer.Length);
 }
Beispiel #4
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);
        }
Beispiel #5
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]];
                    FDrNormal normal = geometry.NormalList[face.NormalIndex[n]];
                    vertexs.WriteFloat(vertex.Position.X);
                    vertexs.WriteFloat(vertex.Position.Y);
                    vertexs.WriteFloat(vertex.Position.Z);
                    vertexs.WriteFloat(1.0f);
                    vertexs.WriteFloat(coord.Coord.X);
                    vertexs.WriteFloat(coord.Coord.Y + 1);
                    vertexs.WriteFloat(normal.Direction.X);
                    vertexs.WriteFloat(normal.Direction.Y);
                    vertexs.WriteFloat(normal.Direction.Z);
                    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);
        }