簡體   English   中英

OpenGL精靈在渲染時有些發抖

[英]OpenGL sprites are trembling slightly at rendering

我做了一個使用opengl es管理iphone應用程序中的sprite的類。 渲染效果很好,但是當Sprite工作表很大(大於512x512px)並且Sprite的一部分不動時,該部分似乎有些發抖(例如,如果對每幀計算的抗鋸齒效果不同)。 是正常的還是我的代碼中的錯誤?

這是代碼:

//set bounds of the cell
int t_x1 = position.x;
int t_y1 = MAX_SPRITE_HEIGHT - position.y;
int t_x2 = t_x1 + width;
int t_y2 = t_y1 - height;

//set vertices position
GLshort verticesBuffer[4*3];
verticesBuffer[0] = t_x1;
verticesBuffer[1] = t_y1;
verticesBuffer[2] = depth;

verticesBuffer[3] = t_x1;
verticesBuffer[4] = t_y2;
verticesBuffer[5] = depth;

verticesBuffer[6]  = t_x2;
verticesBuffer[7] = t_y1;
verticesBuffer[8] = depth;

verticesBuffer[9] = t_x2;
verticesBuffer[10] = t_y2;
verticesBuffer[11] = depth;

//set texture coordinates
GLfloat texCoordBuffer[2*4]
texCoordBuffer[0] =    a_cellLayer.origin.x / CGImageGetWidth(texture.textureImage);
texCoordBuffer[1] =    a_cellLayer.origin.y / CGImageGetHeight(texture.textureImage);

texCoordBuffer[2] =    texCoordBuffer[0];
texCoordBuffer[3] = texCoordBuffer[1] + (float)(t_y1-t_y2) / CGImageGetHeight(texture.textureImage);

texCoordBuffer[4] =    texCoordBuffer[6];
texCoordBuffer[5] = texCoordBuffer[1];

texCoordBuffer[6] =    texCoordBuffer[0] + (float)(t_x2-t_x1) / CGImageGetWidth(texture.textureImage);
texCoordBuffer[7] = texCoordBuffer[3];

//set texture
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, [texture getTexture]);

//set vertices
glVertexPointer(3, GL_SHORT, 0, verticesBuffer);
glEnableClientState(GL_VERTEX_ARRAY);

//apply texture
glTexCoordPointer(2, GL_FLOAT, 0, texCoordBuffer);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);

//render
glColor4f(1.0, 1.0, 1.0, 1.0); // R V B Alpha

glNormal3f(0.0f, 0.0f, 1.0f);

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4*nbOfXSudivisions*nbOfYSudivisions);

我嘗試使用GL_FIXED更改紋理坐標的類型,但沒有任何改變

有人有主意嗎?

我不使用深度緩沖區,而是這樣設置投影矩陣:

const GLfloat zNear = 100, zFar = 1000, fieldOfView = 22.5; 

glMatrixMode(GL_PROJECTION); 

GLfloat size = zNear * tanf(DEGREES_TO_RADIANS(fieldOfView) / 2.0); 

CGRect rect = oGLView.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);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity(); 

//set perspective
gluLookAt(PAGE_WIDTH/2, PAGE_HEIGHT/2, PAGE_WIDTH/2.0f/(tanf(DEGREES_TO_RADIANS(fieldOfView/2.0f))),
          PAGE_WIDTH/2, PAGE_HEIGHT/2, 0,
          0, 1, 0); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM