Пример #1
0
        public static Vec3[] ToVec3Array(Vector3[] v)
        {
            if (v == null)
            {
                return(null);
            }
            int count = v.Length;

            if (count == 0)
            {
                return(new Vec3[0]);
            }
            Vec3[] o = new Vec3[count];
            unsafe
            {
                fixed(Vector3 *v0 = &v[0])
                {
                    Vector3 *ps = v0;

                    fixed(Vec3 *v1 = &o[0])
                    {
                        Vec3 *pt = v1;

                        for (int i = 0; i < count; i++)
                        {
                            *pt = *( Vec3 * )ps;
                            ++ps;
                            ++pt;
                        }
                    }
                }
            }
            return(o);
        }
Пример #2
0
        VertexData CreateVertexData(Vec3[] vertices)
        {
            VertexData vertexData = new VertexData();

            VertexDeclaration declaration = vertexData.VertexDeclaration;

            declaration.AddElement(0, 0, VertexElementType.Float3, VertexElementSemantic.Position);

            VertexBufferBinding  bufferBinding = vertexData.VertexBufferBinding;
            HardwareVertexBuffer vertexBuffer  = HardwareBufferManager.Instance.CreateVertexBuffer(
                12, vertices.Length, HardwareBuffer.Usage.StaticWriteOnly);

            bufferBinding.SetBinding(0, vertexBuffer, true);
            vertexData.VertexCount = vertices.Length;

            unsafe
            {
                Vec3 *buffer = (Vec3 *)vertexBuffer.Lock(HardwareBuffer.LockOptions.Normal).ToPointer();
                foreach (Vec3 position in vertices)
                {
                    *buffer = position;
                    buffer++;
                }
                vertexBuffer.Unlock();
            }

            return(vertexData);
        }