OpenGL&libcvd学习记录

OpenGL

参考资料

OpenGL实现通用GPU计算概述
OpenGL宏观流程
OpenGL编程管线、渲染管线
知乎OpenGL图形库的使用(三十)
书籍推荐
LearnOpenGL中文版

1、OpenGL诸多库之间的关系

在这里插入图片描述
官方文档

2、glewInit()

对OpenGL进行初始化

3、glEnable()

开启OpenGL的部分功能
glEnable(GL_TEXTURE_RECTANGLE_ARB);参考博客

4、glShadeModel()

GL_FLAT:固定着色,取图元中某个顶点的颜色来填充整个图元。
GL_SMOOTH:会采纳每个顶点的颜色,非顶点的部分根据周边顶点的颜色采取平滑过渡的模式,对于线段图元,线段上各点的颜色会根据两顶点的颜色通过插值得到。

5、glPolygonMode()

https://blog.youkuaiyun.com/qq_40936714/article/details/110161192

6、FrameBuffer()

参考博客
不错的代码
被推荐用于把数据渲染到纹理对像,如数据拷贝或交换缓冲区等,使用FBO技术会更高效并且更容易实现。
创建FBO

创建FBO和产生VBO类似。

glGenFramebuffersEXT()

Void gelGenFramebuffersEXT(GLsizei n,GLuint* ids);

void glDeleteFramebuffersEXT(GLsizei n, const GLuint* ids);

glGenFramebuffersEXT()需要两个参数:第一个是要创建的帧缓存的数目,第二个是指向存储一个或者多个ID的变量或数组的指针。它返回未使用的FBO的ID。ID为0表示默认帧缓存,即window系统提供的帧缓存。

当FBO不再被使用时,FBO可以通过调用glDeleteFrameBuffersEXT()来删除。

glBindFramebufferEXT()

一旦一个FBO被创建,在使用它之前必须绑定。

void glBindFramebufferEXT(GLenum target, GLuint id)

第一个参数target应该是GL_FRAMEBUFFER_EXT,第二个参数是FBO的ID号。一旦FBO被绑定,之后的所有的OpenGL操作都会对当前所绑定的FBO造成影响。ID号为0表示缺省帧缓存,即默认的window提供的帧缓存。因此,在glBindFramebufferEXT()中将ID号设置为0可以解绑定当前FBO。

7、glutInit(&argc,argv)

glut的初始化

8、OpenGL与GPU运算

OpenGL用来做通用GPU计算主要是利用纹理存储器在GPU中计算以及把结果取回内存,这大概是OpenGL做通用GPU计算最好的选择。
参考博客

9、OpenGL帧缓存对象(FBO:Frame Buffer Object)

参考
OpenGL帧缓存对象(FBO:Frame Buffer Object)

10、glTexParameteri()理解

参考

11、glTexImage2D()

定义纹理数据单元类型

glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GetInternalFormat<CHANNELS_NUMBER>(), m_width, m_height, 0, GetFormat<CHANNELS_NUMBER>(), GL_FLOAT, NULL);

参考

12、OpenGL中的glutInitDisplayMode()函数的理解

参考

13、纹理映射

OpenGL纹理映射代码
参考

14、GLSL实现图像处理(FBO方法)

GLSL实现图像处理(FBO方法)

15、着色器(Shader):运行在GPU上的程序

16、glViewport()、gluOrtho2D()等窗口设置函数

        glViewport(0, 0, width, height);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        gluOrtho2D(0, width, height, 0);

参考
gluOrtho2D作用

17、VBO、VAO、EBO实例代码

OpenGL图形渲染管线、VBO、VAO、EBO概念及用例

18、glReadPixels的用法和说明

添加链接描述

libcvd

1、介绍

libCVD是一个非常便携和高性能的C ++库,用于计算机视觉,图像和视频处理。重点是提供简单而有效的图像和视频处理与高品质得实现常见低层图像处理功能。

GitHub链接
CVD0.8版本Tutorial
最新版本Tutorial
简单的例子:

#include <cvd/image_io.h>
using namespace CVD;
int main()
{
  Image<byte> in;                   //Declares an 8 bit greyscale image
  in = img_load("test_image.jpg");          
  img_save(in, "new_image.png");
  
  return 0;
}

2、简单例子

按照GitHub指示在Windows Visual Studio中配置好后,运行如下代码(将影像的列数变为4的倍数,若不是四的倍数,影像右边补全黑色列)

#include <xutility>
#include <io.h>
#include <windows.h>
#include <cvd/colourmap.h>
#include <cvd/image_io.h>
using namespace CVD;
using namespace std;

typedef unsigned char       ubyte;
typedef unsigned short      ushort;

template<typename TYPE>
static inline void LoadImage(CVD::Image<TYPE>& img1, CVD::Image<TYPE>& img2,
    const std::string& fileName) {
    CVD::img_load(img1, fileName);
    if (img1.size().x % 4 == 0)
        img2 = img1;
    else {
        const int width = (img1.size().x + 3) & (~3), height = img1.size().y;
        img2.resize(CVD::ImageRef(width, height));
        img2.zero();
        for (int y = 0; y < height; ++y)
        {
            cout << sizeof(TYPE) * img1.row_stride() << endl;
            memcpy(img2[y], img1[y], sizeof(TYPE) * img1.row_stride());
        }
    }

}
int main()
{
    CVD::Image<CVD::Rgb<ubyte> >img1;
    CVD::Image<CVD::Rgb<ubyte> >img2;
    string s =string("C:\\Users\\76760\\Desktop\\test.jpg");
    cout << s.c_str() << endl;
    std::ifstream  i(s.c_str(), std::ios::in | std::ios::binary);
    if (!i.good())
        cout << "error!" << endl;
    ::LoadImage(img1, img2, s);
    img_save(img1, "img1.png");
    img_save(img2, "img2.png");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值