Your code for `SetupVertices` is not taking into account the position of each cube in the chunk. The vertex buffer is for the *whole* chunk - and individual vertices must be stored in "chunk" space (relative to to the position of the chunk). Right now you're just creating a bunch of cubes at the origin. You need to translate them (just use `+`) to the correct position. Then your `SetupIndices` method is not taking into account the location in the vertex buffer where each cube starts. So, effectively, each time you're adding a cube, you're really telling the GPU to render the first cube in the buffer - and the later cubes are just being ignored. Here is a modified version of your code. I haven't tested it or checked your numbers. This is just to illustrate how you must do the offsetting for both vertices and indices. This code replaces `SetupVertices` and `SetupIndices` with a single method that takes the coordinates of each cube relative to the chunk. private void SetUpVerticesAndIndicies(int x, int y, int z) { short verticesStart = (short)vertices.Count; Vector3 cubePosition = new Vector3(x, y, z); // Create the appropriate vertices for the cube: //front left bottom corner ok vertices.Add(new VertexPositionTexture(cubePosition + new Vector3(0, 0, 0), new Vector2(1, 0))); //front left upper corner vertices.Add(new VertexPositionTexture(cubePosition + new Vector3(0, 1, 0), new Vector2(1, 1))); //front right upper corner ok vertices.Add(new VertexPositionTexture(cubePosition + new Vector3(1, 1, 0), new Vector2(0, 1))); // ... etc ... // Create the appropriate indices for the cube: // (these are indexes into the vertices list) indices.Add(verticesStart + 0); indices.Add(verticesStart + 2); indices.Add(verticesStart + 3); indices.Add(verticesStart + 0); indices.Add(verticesStart + 1); indices.Add(verticesStart + 2); // ... etc ... } Hopefully you can see how this would translate to a method to add individual faces, as we discussed in your previous questions.