摘要:1、直接在新建工程的时候选择CUDA,这样的工程既能编译C++也能编译CU 2、在已有的C++工程上添加CUDA编译环境 右键工程-->生成依赖项-->生成自定义-->勾选CUDA 9.0 这时右键工程属性,发现多了两个关于CUDA的属性 点击CUDA C/C++下的Common,将默认的32-bi 阅读全文
posted @ 2019-09-12 21:27 茶飘香~ 阅读 (13) 评论 (0) 编辑
摘要:求矩阵每行的和? 可以把每行放入一个不同线程块,这样行与行之间进行粗粒度的并行。而对于每行,其对应的线程块中分配n个线程(对应行宽),使用共享存储器,让每个线程从显存中读取一个数至shared memory中,然后使用规约算法计算和。 代码如下: 阅读全文
posted @ 2019-09-11 14:53 茶飘香~ 阅读 (5) 评论 (0) 编辑
摘要:CUDA可以认为是一个由软件和硬件构成的并行计算系统,其依赖于GPU的并行计算单元,CUDA有类C的API,方便程序编写。其依赖于CPU和GPU的异构体系,通过在CPU上串行执行环境初始化、内存分配、数据传输,然后在GPU上执行并行计算。 内存分配 1、一维 参数1:显存中开辟的空间的指针(术语:G 阅读全文
posted @ 2019-09-11 14:38 茶飘香~ 阅读 (20) 评论 (0) 编辑
摘要:示例: 阅读全文
posted @ 2019-09-07 15:39 茶飘香~ 阅读 (17) 评论 (0) 编辑
摘要:实例化渲染适用于使用同一个模型渲染多次的情景,比如草地,一堆岩石等。 1、先看一个渲染方形100次的例子: 其顶点着色器会有少许适应实例化渲染的变化 可以看到着色器中传入了100个偏移向量。顶点着色器中内置了一个变量gl_InstanceID,此变量表示当前绘制的实例编号(从0开始)。那么我们可以用 阅读全文
posted @ 2019-09-06 15:09 茶飘香~ 阅读 (16) 评论 (0) 编辑
摘要:一般我们只使用了顶点和片段着色器,这也是基本和必须的两个着色器,而几何着色器是一个可选的着色器,其位于顶点和片段着色器之间。 几何着色器接收来自顶点着色器的一个片元的一组顶点,然后可以对其进行变换,可以输出新的不同类型的片元,也可以增加顶点数,其功能非常强大。 一般写法如下: 可以看到首先定义了输入 阅读全文
posted @ 2019-09-04 15:29 茶飘香~ 阅读 (14) 评论 (0) 编辑
摘要:Uniform Buffer 是一个很有用的缓存,可以将大量的需要传递至多个着色器的矩阵、向量数据等存储在uniform buffer中。这是一个公共的缓存,所以当多个着色器需要传递相同的数据时,可以使用uniform buffer,减少代码量,应该也可以较少CUP传递至GPU的数据量。 大体思路是 阅读全文
posted @ 2019-09-02 16:28 茶飘香~ 阅读 (14) 评论 (0) 编辑
摘要:立方体贴图,也称CubeMap。其实就是一张包含六个面的纹理贴图,一般情况下是加载六张贴图构成cubemap。 加载代码如下: 使用cubemap实现天空盒 片段着色器中采样纹理 效果展示: 1、反射 - 盒子 2、反射 - nanosuit 3、折射 - nanosuit 阅读全文
posted @ 2019-08-29 19:23 茶飘香~ 阅读 (15) 评论 (0) 编辑
摘要:帧缓冲,显卡渲染出的图像会保存在默认的帧缓冲之中,其包括的附件有颜色、深度、模板缓冲。 我们可以创建自己的帧缓冲。 我们需要为其附加一些附件(如,颜色、深度、模板缓冲)。 对于颜色,我们可能有时需要在渲染后做后期处理,那么就需要获取渲染后的像素值,这种情况下好的选择是使用颜色纹理作为附件。 而深度和 阅读全文
posted @ 2019-08-27 17:41 茶飘香~ 阅读 (22) 评论 (0) 编辑
摘要:需要先将所有的面顶点按逆时针存储,这样从摄像机出发看不见的面的顶点环绕顺序就变成了顺时针了,利用这个特点可以找到背面了,进行剔除。 需要知道的几个函数: 1、开启面剔除 glEnable(GL_CULL_FACE); 2、设置剔除正面还是背面,或正面和背面都剔除 glCullFace(GL_BACK 阅读全文
posted @ 2019-08-19 15:28 茶飘香~ 阅读 (11) 评论 (0) 编辑