コード例 #1
0
        public static BufferContainer FromRenderable(IRenderable renderable)
        {
            BufferContainer container = new BufferContainer();

            BufferUsageHint hint = BufferUsageHint.StaticDraw;

            if (renderable.IsDynamic())
            {
                hint = BufferUsageHint.DynamicDraw;
            }

            // IBO
            ushort[] iboData = renderable.GetIndices();
            if (iboData.Length > 0)
            {
                GL.GenBuffers(1, out container.ibo);
                GL.BindBuffer(BufferTarget.ElementArrayBuffer, container.ibo);
                GL.BufferData(BufferTarget.ElementArrayBuffer, iboData.Length * sizeof(ushort), iboData, hint);
            }

            // VBO
            float[] vboData = renderable.GetVertices();
            if (vboData.Length > 0)
            {
                GL.GenBuffers(1, out container.vbo);
                GL.BindBuffer(BufferTarget.ArrayBuffer, container.vbo);
                GL.BufferData(BufferTarget.ArrayBuffer, vboData.Length * sizeof(float), vboData, hint);
            }

            return(container);
        }
コード例 #2
0
        public static MobileMesh GenerateCollisionMesh(IRenderable r, float mass)
        {
            var Vertices = r.GetVertices();

            Vector3D[] verts = new Vector3D[Vertices.Length/3];

            for(int c = 0; c < verts.Length; c++)
            {
                verts[c] = new Vector3D(Vertices[c * 3], Vertices[c * 3 + 1], Vertices[c * 3 + 2]);
            }

            if(mass != 0)return new MobileMesh(verts, r.GetIndices(), new AffineTransform(new Vector3D(5,5,5),BEPUQuaternion.Identity, Vector3D.Zero), BEPUphysics.CollisionShapes.MobileMeshSolidity.DoubleSided, mass);
            else return new MobileMesh(verts, r.GetIndices(), new AffineTransform(new Vector3D(5,5,5), BEPUQuaternion.Identity, Vector3D.Zero),BEPUphysics.CollisionShapes.MobileMeshSolidity.DoubleSided);
        }
コード例 #3
0
        public RenderNode(IRenderable renderableObject)
        {
            Textures = new Texture2D[7];

            this.renderableObject = renderableObject;
            //Vertex			TexCoord			//Normals			 //Tangents
            vbuffer = new VertexBuffer (renderableObject.GetVertexCount () / 3, renderableObject.GetIndexCount (), VertexFormat.Float3, VertexFormat.Float2, VertexFormat.Float3, VertexFormat.Float3);
            vbuffer.SetVertices (0, renderableObject.GetVertices ());

            if (renderableObject.GetTexCoords () != null)
                vbuffer.SetVertices (1, renderableObject.GetTexCoords ());
            if (renderableObject.HasNormals ())
                vbuffer.SetVertices (2, renderableObject.GetNormals ());
            if (renderableObject.GetTangents () != null)
                vbuffer.SetVertices (3, renderableObject.GetTangents ());

            vbuffer.SetIndices (renderableObject.GetIndices ());
        }