代码
GLuint fbo;
GLuint rbo;
GLuint texture;
//获取帧缓冲对象
glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
//获取渲染缓冲对象
glGenRenderbuffers(1, &rbo);
glBindRenderbuffer(GL_RENDERBUFFER, rbo);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height);
glBindRenderbuffer(GL_RENDERBUFFER, 0);
//获取纹理,这个纹理就是最后的结果
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, nullptr);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glBindTexture(GL_TEXTURE_2D, 0);
//绑定到帧缓冲
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbo);
//渲染到帧缓冲
glEnable(GL_DEPTH_TEST);
glClearColor(0.1f, 0.1f, 0.1f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glm::vec3 position = glm::vec3(0.0f, 2.0f, 3.0f);
data->camera.setPosition(position);
data->camera.setFront(-position);
data->program.useProgram();
data->program.setUniform("u_projection", data->camera.getProjectionMatrix());
data->program.setUniform("u_view", data->camera.getViewMatrix());
data->program.setUniform("u_cameraposition", data->camera.getPosition());
data->program.setUniform("u_enableUniformColor", true);
data->program.setUniform("u_color", glm::vec4(0, 0, 1, 1));
data->program.setUniform("u_enableLighting", true);
data->model.render(data->program);
//切换到默认帧缓冲(屏幕)
glBindFramebuffer(GL_FRAMEBUFFER, 0);
运行结果
全屏无法截图,将就将就吧
话说明明开了alpha测试这烦人的边框怎么还没去掉…
哦,原来没开混合,大意了…