1
我想用紋理繪製立方體。用紋理繪製多個對象
void OperateWithMainMatrix(ESContext* esContext, GLfloat offsetX, GLfloat offsetY, GLfloat offsetZ) {
UserData *userData = (UserData*) esContext->userData;
ESMatrix modelview;
ESMatrix perspective;
//Manipulation with matrix
...
glVertexAttribPointer(userData->positionLoc, 3, GL_FLOAT, GL_FALSE, 0, cubeFaces);
//in cubeFaces coordinates verticles cube
glVertexAttribPointer(userData->normalLoc, 3, GL_FLOAT, GL_FALSE, 0, cubeFaces);
//for normals (use in fragment shaider for textures)
glEnableVertexAttribArray(userData->positionLoc);
glEnableVertexAttribArray(userData->normalLoc);
// Load the MVP matrix
glUniformMatrix4fv(userData->mvpLoc, 1, GL_FALSE,
(GLfloat*)&userData->mvpMatrix.m[0][0]);
//Bind base map
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_CUBE_MAP, userData->baseMapTexId);
//Set the base map sampler to texture unit to 0
glUniform1i(userData->baseMapLoc, 0);
// Draw the cube
glDrawArrays(GL_TRIANGLES, 0, 36);
}
(座標轉換爲OperateWithMainMatrix()) 然後畫出()函數被調用:
void Draw(ESContext *esContext)
{
UserData *userData = esContext->userData;
// Set the viewport
glViewport(0, 0, esContext->width, esContext->height);
// Clear the color buffer
glClear(GL_COLOR_BUFFER_BIT);
// Use the program object
glUseProgram(userData->programObject);
OperateWithMainMatrix(esContext, 0.0f, 0.0f, 0.0f);
eglSwapBuffers(esContext->eglDisplay, esContext->eglSurface);
}
這項工作很好,但如果我嘗試繪製多個多維數據集(例如下面的代碼) :
void Draw(ESContext *esContext)
{ ...
// Use the program object
glUseProgram(userData->programObject);
OperateWithMainMatrix(esContext, 2.0f, 0.0f, 0.0f);
OperateWithMainMatrix(esContext, 1.0f, 0.0f, 0.0f);
OperateWithMainMatrix(esContext, 0.0f, 0.0f, 0.0f);
OperateWithMainMatrix(esContext, -1.0f, 0.0f, 0.0f);
OperateWithMainMatrix(esContext, -2.0f, 0.0f, 0.0f);
eglSwapBuffers(esContext->eglDisplay, esContext->eglSurface);
}
A側面覆蓋正面。該過程被示出在圖像:
替代圖像(顏色和乾淨圖像):
右立方體的側面重疊的中心立方體的前表面。 如何刪除此效果並顯示沒有它的多個立方體?
感謝您的回答。 (GL_DEPTH_TEST)在我的代碼中是有效的,並且添加到函數draw()glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)沒有帶來期望的結果。 因爲這種效果是在一幀內觀察到的:當我多次調用函數OperateWithMainMatrix()。 – Simplex
@Simplex - glGet(GL_DEPTH_BITS)返回什麼?你的投影矩陣是如何定義的? – Tim
glGet(GL_DEPTH_BITS)返回0 在OperateWithMainMatrix()中定義的矩陣: esMatrixLoadIdentity(&perspective); (透視圖,60.0f,縱橫比,1.0f,20.0f); esMatrixLoadIdentity(&modelview); esTranslate(&modelview,offsetX,offsetY,offsetZ); esTranslate(&perspective,distanceX,0.0,distance); esRotate(&perspective,userData-> angle,0.0,1.0,0.0); esMatrixMultiply(&userData-> mvpMatrix,&modelview,&perspective); – Simplex