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); }
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); }
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 ()); }