views:

206

answers:

0

I'm trying to make a grid similar to what you would see in these geo games(geoDefense/geometry wars). I'm wanting to apply separate transformation matrixes to each to create different effects. So, it makes since to me that I need to draw each square separately to that I can apply a different transformation to each one.

The problem I'm having is mapping these grids out or connecting the squares. The coordinate systems is still confusing to me. I know it would be easy just to create a huge triangle strip but I'm not able to figure out a way to apply separate transformations to each square( quad ) if I use triangle strips. So first question:

Can you apply different transformations to quads if you use a triangle strip to draw a huge grid? If so, any tips suggestions on how to do so?

If not, how does one usually connect textures without using triangle strips?

Here is my coord setup:

const GLfloat zNear = 0.01, zFar = 1000.0, fieldOfView = 45.0; 
GLfloat size; 
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION); 
size = zNear * tanf(DEGREES_TO_RADIANS(fieldOfView) / 2.0); 
CGRect rect = view.bounds; 

glFrustumf(-size, size, -size / (rect.size.width / rect.size.height), size / 
               (rect.size.width / rect.size.height), zNear, zFar); 
glViewport(0, 0, rect.size.width, rect.size.height);  

Here is my draw:

- (void)drawView:(GLView*)view;
{
    int loop;
    //glColor4f(1.0, 1.0, 1.0, 0.5);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    //Grid Loop
    for( loop = 0; loop < kNumberSectionsInGrid; loop++ )              
    { 
        //glLoadIdentity();
        static Matrix3D    shearMatrix;
        Matrix3DSetShear(shearMatrix, 0.2, 0.2);
        static Matrix3D     finalMatrix;
        //Matrix3DMultiply(temp2Matrix, shearMatrix, finalMatrix);
        glLoadMatrixf(shearMatrix);
        glTranslatef(-1.0f,(float)loop,-3.0f);
        glScalef(0.1, 0.1, 0.0);

        Vertex3D vertices[] = {
            {-1.0,  1.0, 0.5},
            { 1.0,  1.0, 0.5},
            { -1.0, -1.0, 0.5}, 
            { 1.0, -1.0, 0.5}
        };
        static const Vector3D normals[] = {
            {0.0, 0.0, 1.0},
            {0.0, 0.0, 1.0},
            {0.0, 0.0, 1.0},
            {0.0, 0.0, 1.0},
        };
        GLfloat texCoords[] = {
            0.0, 1.0,
            1.0, 1.0,
            0.0, 0.0,
            1.0, 0.0
        };
        glEnableClientState(GL_VERTEX_ARRAY);
        glEnableClientState(GL_NORMAL_ARRAY);
        glEnableClientState(GL_TEXTURE_COORD_ARRAY);


        glBindTexture(GL_TEXTURE_2D, texture[0]);
        glVertexPointer(3, GL_FLOAT, 0, vertices);
        glNormalPointer(GL_FLOAT, 0, normals);
        glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
        glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);


        glDisableClientState(GL_VERTEX_ARRAY);
        glDisableClientState(GL_NORMAL_ARRAY);
        glDisableClientState(GL_TEXTURE_COORD_ARRAY);
    }
}

glMatrixMode(GL_MODELVIEW);