简体   繁体   中英

Rotating Vertex Array Object not working

I am using vertex arrays to store circle vertices and colors.

Here is the setup function:

void setup1(void) 
{
    glClearColor(1.0, 1.0, 1.0, 0.0);

    // Enable two vertex arrays: co-ordinates and color.
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);

    // Specify locations for the co-ordinates and color arrays.
    glVertexPointer(3, GL_FLOAT, 0, Vertices1);
    glColorPointer(3, GL_FLOAT, 0, Colors1);
}

The global declaration of the arrays is here:

static float Vertices1[500] = { 0 };
static float Colors1[500] = { 0 };

The arrays are all set up here (R is the radius, X and Y are the (X,Y) center, and t is the angle parameter of the circle)

void doGlobals1()
{
    for (int i = 0; i < numVertices1 * 3; i += 3)
    {
        Vertices1[i] = X + R * cos(t);
        Vertices1[i + 1] = Y + R * sin(t);
        Vertices1[i + 2] = 0.0;
        t += 2 * PI / numVertices1;
    }

    for (int j = 0; j < numVertices1 * 3; j += 3)
    {
        Colors1[j] = (float)rand() / (float)RAND_MAX;
        Colors1[j + 1] = (float)rand() / (float)RAND_MAX;
        Colors1[j + 2] = (float)rand() / (float)RAND_MAX;
    }
}

Finally, this is where the shape is drawn.

// Window 1 drawing routine.
void drawScene1(void)
{  
    glutSetWindow(win1);
    glLoadIdentity();

    doGlobals1();
    glClear(GL_COLOR_BUFFER_BIT);

    glRotatef(15, 1, 0, 0);
    glDrawArrays(GL_TRIANGLE_FAN, 0, numVertices1);

    glFlush();
}

Without the Rotation, the circle draws just fine. The circle also draws fine with any Scale/Translate function. I suspect there is some special protocol necessary to rotate an object drawn with vertex arrays.

Can anyone tell me where I have gone wrong, what I will need to do in order to rotate the object, or offer any advice?

glRotatef(15, 1, 0, 0);
              ^ why the X axis?

The default ortho projection matrix has pretty tight near/far clipping planes: -1 to 1.

Rotating your circle of X/Y coordinates outside of the X/Y plane will tend to make those points get clipped.

Rotate around the Z axis instead:

glRotatef(15, 0, 0, 1);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM