Skip to content

Instantly share code, notes, and snippets.

@dallinbeutler
Created May 17, 2019 23:42
Show Gist options
  • Save dallinbeutler/6f88e9cb1d20b7bd858679f5bc598cd5 to your computer and use it in GitHub Desktop.
Save dallinbeutler/6f88e9cb1d20b7bd858679f5bc598cd5 to your computer and use it in GitHub Desktop.
3 ways to map a 3d cube buffer based on the type of draw call (C# and OpenGL ( via Veldrid))
//Triangle Strip (no index, fastest)
new VertexPositionTexture(new Vector3(-0.5f, 0.5f, 0.5f), new Vector2(0, 0)), //ftl front top left
new VertexPositionTexture(new Vector3( 0.5f, 0.5f, 0.5f), new Vector2(1, 0)), //ftr
new VertexPositionTexture(new Vector3(-0.5f, -0.5f, 0.5f), new Vector2(0, 1)), //fbl
new VertexPositionTexture(new Vector3( 0.5f, -0.5f, 0.5f), new Vector2(1, 1)), //fbr front bottom right
new VertexPositionTexture(new Vector3( 0.5f, -0.5f, -0.5f), new Vector2(1, 0)), //bbr
new VertexPositionTexture(new Vector3( 0.5f, 0.5f, 0.5f), new Vector2(0, 1)), //ftr
new VertexPositionTexture(new Vector3( 0.5f, 0.5f, -0.5f), new Vector2(0, 0)), //btr
new VertexPositionTexture(new Vector3(-0.5f, 0.5f, 0.5f), new Vector2(1, 1)), //ftl
new VertexPositionTexture(new Vector3(-0.5f, 0.5f, -0.5f), new Vector2(1, 0)), //btl
new VertexPositionTexture(new Vector3(-0.5f, -0.5f, 0.5f), new Vector2(0, 1)), //fbl
new VertexPositionTexture(new Vector3(-0.5f, -0.5f, -0.5f), new Vector2(0, 0)), //bbl
new VertexPositionTexture(new Vector3( 0.5f, -0.5f, -0.5f), new Vector2(1, 0)), //bbr
new VertexPositionTexture(new Vector3(-0.5f, 0.5f, -0.5f), new Vector2(0, 1)), //btl
new VertexPositionTexture(new Vector3( 0.5f, 0.5f, -0.5f), new Vector2(1, 1)), //btr
// Individual triangles (no index buffer and correct UVs. Medium speed?)
//Top
new VertexPositionTexture(new Vector3(-0.5f, +0.5f, -0.5f), new Vector2(0, 0)),
new VertexPositionTexture(new Vector3(+0.5f, +0.5f, -0.5f), new Vector2(1, 0)),
new VertexPositionTexture(new Vector3(+0.5f, +0.5f, +0.5f), new Vector2(1, 1)),
new VertexPositionTexture(new Vector3(+0.5f, +0.5f, +0.5f), new Vector2(1, 1)),
new VertexPositionTexture(new Vector3(-0.5f, +0.5f, +0.5f), new Vector2(0, 1)),
new VertexPositionTexture(new Vector3(-0.5f, +0.5f, -0.5f), new Vector2(0, 0)),
// Bottom
new VertexPositionTexture(new Vector3(-0.5f,-0.5f, +0.5f), new Vector2(0, 0)),
new VertexPositionTexture(new Vector3(+0.5f,-0.5f, +0.5f), new Vector2(1, 0)),
new VertexPositionTexture(new Vector3(+0.5f,-0.5f, -0.5f), new Vector2(1, 1)),
new VertexPositionTexture(new Vector3(+0.5f,-0.5f, -0.5f), new Vector2(1, 1)),
new VertexPositionTexture(new Vector3(-0.5f,-0.5f, -0.5f), new Vector2(0, 1)),
new VertexPositionTexture(new Vector3(-0.5f,-0.5f, +0.5f), new Vector2(0, 0)),
// Left
new VertexPositionTexture(new Vector3(-0.5f, +0.5f, -0.5f), new Vector2(0, 0)),
new VertexPositionTexture(new Vector3(-0.5f, +0.5f, +0.5f), new Vector2(1, 0)),
new VertexPositionTexture(new Vector3(-0.5f, -0.5f, +0.5f), new Vector2(1, 1)),
new VertexPositionTexture(new Vector3(-0.5f, -0.5f, +0.5f), new Vector2(1, 1)),
new VertexPositionTexture(new Vector3(-0.5f, -0.5f, -0.5f), new Vector2(0, 1)),
new VertexPositionTexture(new Vector3(-0.5f, +0.5f, -0.5f), new Vector2(0, 0)),
// Right
new VertexPositionTexture(new Vector3(+0.5f, +0.5f, +0.5f), new Vector2(0, 0)),
new VertexPositionTexture(new Vector3(+0.5f, +0.5f, -0.5f), new Vector2(1, 0)),
new VertexPositionTexture(new Vector3(+0.5f, -0.5f, -0.5f), new Vector2(1, 1)),
new VertexPositionTexture(new Vector3(+0.5f, -0.5f, -0.5f), new Vector2(1, 1)),
new VertexPositionTexture(new Vector3(+0.5f, -0.5f, +0.5f), new Vector2(0, 1)),
new VertexPositionTexture(new Vector3(+0.5f, +0.5f, +0.5f), new Vector2(0, 0)),
// Back
new VertexPositionTexture(new Vector3(+0.5f, +0.5f, -0.5f), new Vector2(0, 0)),
new VertexPositionTexture(new Vector3(-0.5f, +0.5f, -0.5f), new Vector2(1, 0)),
new VertexPositionTexture(new Vector3(-0.5f, -0.5f, -0.5f), new Vector2(1, 1)),
new VertexPositionTexture(new Vector3(-0.5f, -0.5f, -0.5f), new Vector2(1, 1)),
new VertexPositionTexture(new Vector3(+0.5f, -0.5f, -0.5f), new Vector2(0, 1)),
new VertexPositionTexture(new Vector3(+0.5f, +0.5f, -0.5f), new Vector2(0, 0)),
// Front
new VertexPositionTexture(new Vector3(-0.5f, +0.5f, +0.5f), new Vector2(0, 0)),
new VertexPositionTexture(new Vector3(+0.5f, +0.5f, +0.5f), new Vector2(1, 0)),
new VertexPositionTexture(new Vector3(+0.5f, -0.5f, +0.5f), new Vector2(1, 1)),
new VertexPositionTexture(new Vector3(+0.5f, -0.5f, +0.5f), new Vector2(1, 1)),
new VertexPositionTexture(new Vector3(-0.5f, -0.5f, +0.5f), new Vector2(0, 1)),
new VertexPositionTexture(new Vector3(-0.5f, +0.5f, +0.5f), new Vector2(0, 0)),
// Standard indexed buffer method. slowest, but the only way to be able
// to specify up direction and part of UV map to use
// Top
new VertexPositionTexture(new Vector3(-0.5f, +0.5f, -0.5f), new Vector2(0, 0)),
new VertexPositionTexture(new Vector3(+0.5f, +0.5f, -0.5f), new Vector2(1, 0)),
new VertexPositionTexture(new Vector3(+0.5f, +0.5f, +0.5f), new Vector2(1, 1)),
new VertexPositionTexture(new Vector3(-0.5f, +0.5f, +0.5f), new Vector2(0, 1)),
// Bottom
new VertexPositionTexture(new Vector3(-0.5f,-0.5f, +0.5f), new Vector2(0, 0)),
new VertexPositionTexture(new Vector3(+0.5f,-0.5f, +0.5f), new Vector2(1, 0)),
new VertexPositionTexture(new Vector3(+0.5f,-0.5f, -0.5f), new Vector2(1, 1)),
new VertexPositionTexture(new Vector3(-0.5f,-0.5f, -0.5f), new Vector2(0, 1)),
// Left
new VertexPositionTexture(new Vector3(-0.5f, +0.5f, -0.5f), new Vector2(0, 0)),
new VertexPositionTexture(new Vector3(-0.5f, +0.5f, +0.5f), new Vector2(1, 0)),
new VertexPositionTexture(new Vector3(-0.5f, -0.5f, +0.5f), new Vector2(1, 1)),
new VertexPositionTexture(new Vector3(-0.5f, -0.5f, -0.5f), new Vector2(0, 1)),
// Right
new VertexPositionTexture(new Vector3(+0.5f, +0.5f, +0.5f), new Vector2(0, 0)),
new VertexPositionTexture(new Vector3(+0.5f, +0.5f, -0.5f), new Vector2(1, 0)),
new VertexPositionTexture(new Vector3(+0.5f, -0.5f, -0.5f), new Vector2(1, 1)),
new VertexPositionTexture(new Vector3(+0.5f, -0.5f, +0.5f), new Vector2(0, 1)),
// Back
new VertexPositionTexture(new Vector3(+0.5f, +0.5f, -0.5f), new Vector2(0, 0)),
new VertexPositionTexture(new Vector3(-0.5f, +0.5f, -0.5f), new Vector2(1, 0)),
new VertexPositionTexture(new Vector3(-0.5f, -0.5f, -0.5f), new Vector2(1, 1)),
new VertexPositionTexture(new Vector3(+0.5f, -0.5f, -0.5f), new Vector2(0, 1)),
// Front
new VertexPositionTexture(new Vector3(-0.5f, +0.5f, +0.5f), new Vector2(0, 0)),
new VertexPositionTexture(new Vector3(+0.5f, +0.5f, +0.5f), new Vector2(1, 0)),
new VertexPositionTexture(new Vector3(+0.5f, -0.5f, +0.5f), new Vector2(1, 1)),
new VertexPositionTexture(new Vector3(-0.5f, -0.5f, +0.5f), new Vector2(0, 1)),
//indices buffer
ushort[] indices =
{
0,1,2, 0,2,3,
4,5,6, 4,6,7,
8,9,10, 8,10,11,
12,13,14, 12,14,15,
16,17,18, 16,18,19,
20,21,22, 20,22,23,
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment