打开深度测试,但它不起作用?

时间:2018-04-29 05:21:15

标签: opengl-es-2.0 depth-testing

m_Program = new GLProgram;
m_Program->initWithFilenames(“shader/gldemo.vsh”, “shader/gldemo.fsh”);
m_Program->link();
//set uniform locations
m_Program->updateUniforms();

glGenVertexArrays(1, &vao);
glBindVertexArray(vao);

//create vbo
glGenBuffers(1, &vertexVBO);
glBindBuffer(GL_ARRAY_BUFFER, vertexVBO);

auto size = Director::getInstance()->getVisibleSize();
float vertercies[] = {
                    0,0,0.5,   //first point 
                   -1, 1,0.5,   
                    -1, -1,0.5,
                    -0.3,0,0.8,   
                    1, 1,0.8,   
                    1, -1,0.8};

float color[] = { 1, 0,0, 1,  1,0,0, 1, 1, 0, 0, 1,
                0, 1,0, 1,  0,1,0, 1, 0, 1, 0, 1};

glBufferData(GL_ARRAY_BUFFER, sizeof(vertercies), vertercies, GL_STATIC_DRAW);
//vertex attribute "a_position"
GLuint positionLocation = glGetAttribLocation(m_Program->getProgram(), "a_position");
glEnableVertexAttribArray(positionLocation);
glVertexAttribPointer(positionLocation, 3, GL_FLOAT, GL_FALSE, 0, (GLvoid*)0);

//set for color
glGenBuffers(1, &colorVBO);

glBindBuffer(GL_ARRAY_BUFFER, colorVBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(color), color, GL_STATIC_DRAW);

GLuint colorLocation = glGetAttribLocation(m_Program->getProgram(), "a_color");
glEnableVertexAttribArray(colorLocation);
glVertexAttribPointer(colorLocation, 4, GL_FLOAT, GL_FALSE, 0, (GLvoid*)0);

//for safty
glBindVertexArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);

//节目 enter image description here

glEnable(GL_DEPTH_TEST);

打开深度测试,但它不起作用? 它可以正常显示,但我打开深度测试,红色三角形Z设置为0.5,蓝色设置为0.8,但它们的渲染顺序没有改变?

1 个答案:

答案 0 :(得分:0)

多件事:

  • 启用深度测试并不意味着深度测试设置正确。你必须设置它
  • 您必须确保有深度缓冲区
  • 渲染基元时必须启用深度书写和深度测试

使用openGL,您通常需要调用这些函数才能进行深度测试:

fun myGet(mContext: Context): WiFiDef {
    return WiFiHelper(mContext).getWiFi()
}

并启用深度书写:

glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);

只是在Google上搜索glDepthMask(GL_TRUE); 给了我一些简洁的结果。你应该查看google在其索引中拥有的多个资源。