Take the 2-minute tour ×

I am making a simple test application in C that is supposed to generate three dimensional dice. I am going to use OpenGL to do the actual drawing, but I cannot figure out how to actually generate the vertices. Of course, the whole point of this test was to see if my algorithm worked, but I found a major logic error that I cannot fix. Can somebody please point me to an article, website, or something that explains the concept? If not, although I would prefer to do the actual implementation myself, the C code is acceptable.

Basically, this is what I did before I forgot what I was doing for the algorithm:

void calculateVertices(int sides) {
    BOOL isDone = FALSE;
    int vectorsPerSide = 3;
    VDVector3f *vertices = malloc((sizeof(VDVector3f) * (sides + 1)));
    VDVector3f *normals = malloc((sizeof(VDVector3f) * (sides + 1)));

    while (!isDone) {
        // Start by positioning the first vertex.
        vertices[0] = VDVector3fMake(0.0, 0.0, 1.0);

        for (int index = 1; index <= sides; index ++) {


        // Not a match, increase the number of vectors
        vectorsPerSide ++;

Basically, it loops until a match is found. This sounds inefficient to me, but I had no other idea as to how to do this. The first vertex will actually be removed from the array at the end; I was going to use it to create the first side, which would have been used to properly position the others.

My main goal here is to be able to pass number (like 30) to it, and have it set the vertices automatically. I will not have protections against making one sided and two sided dice, because I have something special in mind. I will have those vertices entered elsewhere.

Thanks in advance for the help!

By the way, I have an algorithm that can normalize the completed vertex array. You don't have to bother helping with that.

share|improve this question
add comment

1 Answer

up vote 2 down vote accepted

I don't think this is possible to generalize this. How, for example would you make a fair 5 or 9 sided die? I don't think I have ever seen such a thing. A quick search on wikipedia suggests platonic solids may be what you are after. http://en.wikipedia.org/wiki/Platonic_solid

share|improve this answer
That is a good point. I could just limit the number of loops or something, because I do want to be able to generate the more "difficult" dice, like the 27-sided dice. –  Justin Jul 5 '12 at 23:38
I just looked at the link, and it is a very good match to the question. I can honestly say that I have searched as intelligently as I could for hours, and I cannot believe you were able to find it so fast. Thanks for linking to that. –  Justin Jul 5 '12 at 23:42
add comment

Your Answer


