本文介绍利用framebuffer来实现opengl的点选拾取,编程语言C++,GLSL,编程环境VS2008,依赖库glew,OpenGL版本4.3。
不多说,直接介绍原理。此原理依赖opengl的几个技术特点包括 着色其多重输出,颜色值的宽动态表述,离屏渲染。
完整代码请看https://pan.baidu.com/s/1slaOpkx
email: hj3952321@163.com
离屏渲染就是将着色器的输出定向到自定义framebuffer中,而不是屏幕,framebuffer定义如下:
enum RBUFFERenum{DEPTH=0,POS,KEY_AND_ID,VID,MP0_WP2_0,MP1_WP2_1,MP2_WP2_2,WP0,WP1,RENDERBUFFERS_COUNT};
struct Buffers
{
RBUFFERenum mBufferName;
GLenum mAttachIndex;
GLenum mInternalFormat;
};
static Buffers gbuffers[RENDERBUFFERS_COUNT] = { \
{DEPTH, GL_DEPTH_ATTACHMENT, GL_DEPTH_COMPONENT32F},
{POS, GL_COLOR_ATTACHMENT0, GL_RGBA32F},
{KEY_AND