iPhone рендеринг сетки OpenGL в одном углу экрана? - PullRequest
0 голосов
/ 20 августа 2010

Извините за этот длинный блок кода, но я думаю, что имеет смысл включить все это.Независимо от того, с чем я играю, я не могу заставить свой меш отображаться в полноэкранном режиме.Окно просмотра полноэкранное, как и вид GL.Вот что происходит:

http://img191.imageshack.us/img191/247/screenshot2010082000163.png

Этот код работает в моем цикле рисования:

int verticalDivisions = 16;
int horizontalDivisions = 16;
GLfloat *verticesArr;
GLfloat *textureCoordsArr;
GLuint textureID = texture[0];

unsigned int verticesArrsize = (verticalDivisions * ((2 + horizontalDivisions * 2) * 3));
unsigned int textureCoordsArraySize = verticalDivisions * ((2 + horizontalDivisions * 2) * 2);  
verticesArr = (GLfloat *)malloc(verticesArrsize * sizeof(GLfloat));
textureCoordsArr = (GLfloat*)malloc(textureCoordsArraySize * sizeof(GLfloat));

float height = 1.0f/verticalDivisions;
float width = 1.0f/horizontalDivisions;

int i,j, count;

count = 0;

for (j=0; j<verticalDivisions; j++) {
    for (i=0; i<=horizontalDivisions; i++, count+=6) { //2 vertices each time...
        float currX = i * width;
        float currY = j * height;
        verticesArr[count] = currX;///backingWidth;
        verticesArr[count+1] = (currY + height);///backingHeight;
        verticesArr[count+2] = 0.0f;

        verticesArr[count+3] = currX;///backingWidth;
        verticesArr[count+4] = currY;///backingHeight;
        verticesArr[count+5] = 0.0f;
        //NSLog(@"v1: (%f,%f) v2:(%f,%f)",currX,currY+height,currX,currY);
    }   
}


count = 0;

float xIncrease = 0.625f/(float)horizontalDivisions;
float yIncrease = 0.898f/(float)verticalDivisions;

int x,y;
//int elements;
count = 0;

for (y=0; y<verticalDivisions; y++) {
    for (x=0; x<horizontalDivisions+1; x++, count+=4) {
        float currX = (float)x * xIncrease;
        float currY = (float)y * yIncrease;
        textureCoordsArr[count] = (float)currX;
        textureCoordsArr[count+1] = (float)currY + yIncrease;

        textureCoordsArr[count+2] = (float)currX;
        textureCoordsArr[count+3] = (float)currY;
        //NSLog(@"v1: (%f,%f) v2:(%f,%f)",currX,currY+yIncrease,currX,currY);
    }
}

NSLog(@"expected %i vertices, and %i vertices were done",(verticalDivisions * ((2 + horizontalDivisions*2 ) * 2) ) , count );


glBindFramebufferOES(GL_FRAMEBUFFER_OES, defaultFramebuffer);
glLoadIdentity();
glColor4f(255.0, 255.0, 255.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);


glBindTexture(GL_TEXTURE_2D, textureID);

glTexCoordPointer(2, GL_FLOAT, 0, textureCoordsArr);
glVertexPointer(3, GL_FLOAT, 0, verticesArr);


glPushMatrix();{
    int i;
    for (i=0; i<verticalDivisions; i++) {
        //glDrawArrays(GL_LINE_STRIP, i*(horizontalDivisions*2+2), horizontalDivisions*2+2);
        glDrawArrays(GL_TRIANGLE_STRIP, i*(horizontalDivisions*2+2), (horizontalDivisions*2+2));

    }
}glPopMatrix();


glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);



glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];

Спасибо!

1 Ответ

0 голосов
/ 20 августа 2010

Попробуйте немного изменить свой код на:

float xStart = -0.5;
float yStart = -0.5;
for (j=0; j<verticalDivisions; j++) { 
    for (i=0; i<=horizontalDivisions; i++, count+=6) { //2 vertices each time... 
        float currX = xStart + i * width; 
        float currY = yStart + j * height; 
        verticesArr[count] = currX;///backingWidth;
    ....

Это должно позволить вам перемещать меш вокруг.После выравнивания по одному углу (измените xStart и yStart) вы можете масштабировать ширину и высоту, пока они не подойдут.

...