01.opengl 功能函数

glm::mate4 Identity(1.0f): 这段代码中,定义了一个4*4的矩阵,用来表示一个变换矩阵的投影或者投影矩阵, 其    中‘glm::mat4’是GLM库中表示4*4矩阵类型,而Identity表示一个变量名。1.0f表示初始化该矩阵为单位矩阵,即对角线上的矩阵都是1,其余元素都是0.

glEnable(): 开启指定的OpenGL功能。该函数可以接受一个参数,指定需要开启的功能。
    例如,glEnable(GL_BLEND)可以启用混合功能,
             glEnable(GL_DEPTH_TEST)可以启用深度测试功能,
             glEnable(GL_TEXTURE_2D)可以启用2D纹理映射功能等。

glDisable(): 关闭指定的OpenGL功能。该函数可以接受一个参数,指定需要关闭的功能
    例如,glDisable(GL_BLEND)可以关闭混合功能,
              glDisable(GL_DEPTH_TEST)可以关闭深度测试功能,
              glDisable(GL_TEXTURE_2D)可以关闭2D纹理映射功能等。

glBlendFunc(): 设置混合函数。该函数接受两个参数,分别为源因子和目标因子,用于控制混合时源颜色和目标颜色的混合方式。    例如,glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)可以设置为源颜色源alpha + 目标颜色(1-源alpha)的方式进行混合。

glViewport(): 设置视口大小和位置。该函数接受四个参数,分别为视口的左下角x坐标、左下角y坐标、宽度和高度。
    例如,glViewport(0, 0, 640, 480)可以将视口设置为左下角坐标为(0, 0),宽度为640,高度为480的区域。

glBindFramebuffer()函数是OpenGL中用于绑定缓冲对象的函数;
    其原型为:void glBindFrambuffer(GL_FRAMEBUFFER, GLuint framebuffer);
其中,'target'表示要绑定的缓冲对象类型,可以选值为‘GL_fRAMEBUFFER', 'GL_READ_FRAMEBUFFER' 和 'GL_DRAW_FRAMEBUFFER', 默认值为'GL_FRAMEBUFFER', 默认值为'GL_FRAMEBUFFER',表示同时绑定读写缓冲对象,
framebuffer表示要绑定的缓冲对象的ID。

    缓冲对象是OpenGL中用于离屏渲染的重要概念。离屏渲染是指将渲染结果输出到纹理或者渲染的缓冲区中,而不是直接输出到屏幕上。帧缓冲对象可以包含一个或者多个渲染缓冲区或纹理附件,并且可以被绑定到渲染管线的不同阶段进行渲染。使用帧缓冲对象可以实现高级渲染技术,例如屏幕后处理,渲染到纹理,多重采样等。
使用'glBindFramebuffer()'函数可以将一个缓冲对象绑定到OpenGL的渲染管线上,从而将渲染结果输出到该帧缓冲对象中。在绑定缓冲对象后,所有的渲染操作都将对该缓冲对象产生影响,而不是对屏幕产生影响。绑定操作可以通过设置'framebuffer'参数为0来解除绑定。

eglSwapBuffer():是EGL API的一个函数,用于交换指定的EGL窗口的前后缓冲区。在双缓冲绘制中,应用程序会在后缓冲区中    进行绘制,应用程序会在后缓冲区中进行绘制操作,最终的渲染结果会被存储在后缓冲区中。而前缓冲区中则显示    着上一帧的渲染结果。'eglSwapBuffers()'的作用就是将后缓冲区的内容交换到前缓冲区中,从而让渲染结果在屏幕    上显示出来。
在使用opengl ES进行渲染时,'eglSwapBuffers()'通常会在一帧绘制结束后被调用。例如,如果使用OPenGl ES编写一个游戏,那么每一帧的渲染都会通过'eglSwapBuffers()'显示在屏幕上。

 this->perception_pic1 = new HwBuffer(NPU_BUFFER_WIDTH, NPU_BUFFER_HEIGHT, DRM_FORMAT_RGB888);
创建一个名为'HwBuffer'的类的新实例,并将其分配给当前对象的成员变量'perception_pic1'. 'HwBuffer'构造函数接收两个参数'NPU_BUFFER_WIDTH'和'NPU_BUFFER_HEIGHT', 这些参数在代码中被定义为常量。构造函数的第三个参数"DRM_FORMAT_RGB888"指定缓冲格式为24位RGB。这表明'HwBuffer'是一个表示内存中图像缓冲的类,用硬件加速。

离屏渲染(Off-screen rendering)是指在不将渲染结果显示在屏幕上的情况下进行渲染,通常用于生成纹理、阴影、后期特效等应用场景。

离屏渲染需要创建一个离屏帧缓冲对象(Off-screen Framebuffer Object,简称FBO),并将渲染结果绘制到该FBO上。渲染完成后,可以将FBO上的纹理或渲染缓冲区中的数据读取出来,或者将其作为纹理映射到其他对象上。因为离屏渲染不需要显示在屏幕上,所以可以使用更高精度、更大尺寸的渲染目标,从而提高渲染效果。

在OpenGL ES中,通过glBindFramebuffer()函数将当前的帧缓冲绑定到指定的FBO上,然后使用glRenderbufferStorage()或glTexImage2D()函数创建渲染缓冲区或纹理作为FBO的附件,最后进行渲染操作。渲染完成后,可以使用glReadPixels()函数将FBO上的像素数据读取到内存中,或者直接将FBO上的纹理映射到其他对象上。离屏渲染需要注意内存管理和性能优化等问题。

猜你喜欢

转载自blog.csdn.net/m0_48707860/article/details/130576546