高级OpenGL
Jnnes
这个作者很懒,什么都没留下…
展开
-
高级OpenGL渲染管线之实例化与抗锯齿(七)
实例化当场景中有大量相似(形状一样,只是角度、位置、缩放不一样)的物体时,如果继续使用glDrawArray或glDrawElement来绘制每一个物体时,大量的性能将会被浪费在和设置OpenGL上下文和与GPU通讯上,因为大量的物体可以使用相同的顶点和模型矩阵,所以我们没必要每一次绘制都设置OpenGL上下文和GPU通讯,,我们只需要一次将生成不同物体间不同属性的必要数据导入,然后绘制所有相...原创 2019-11-15 14:37:29 · 480 阅读 · 0 评论 -
高级OpenGL渲染管线之几何着色器(六)
几何着色器在顶点着色器和片元着色器中间。从下面的OpenGL渲染流程图可以看出,渲染的流程为顶点着色器—图元装配—视口剔除—光栅化—片元着色器。而几何着色器在光栅化阶段,但是在光栅化之前执行。几何着色器的输入是一个图元的所有顶点,输出是图元类型和所有顶点。#version 330 corelayout (points) in;layout (line_strip, max_ver...原创 2019-11-15 11:49:17 · 500 阅读 · 0 评论 -
高级OpenGL渲染管线之高级数据及高级GLSL(五)
高级数据我们之前定义顶点属性时都是一次性写入顶点数据,其实,我们还可以使用先分配内存再填数据的方式来写入顶点数据。glBufferData(GL_ARRAY_BUFFER, size, NULL, GL_STATIC_DRAW);glBufferSubData(GL_ARRAY_BUFFER, offset, sizeof(data), &data);但是在使用glBuf...原创 2019-11-06 23:52:29 · 335 阅读 · 0 评论 -
高级OpenGL渲染管线之立方体贴图(四)
可以想象一下,如果我们有一张可以将摄像机整个包住的大纹理,那么不管摄像机怎么转都能够看到对应的像素。很容易联想到,我们可以用它来实现不会发生变化的场景,例如远处的山,填上的太阳,不会动的云等等。但是,这个纹理应该是怎样的呢?OpenGL里有立方体贴图,他可以实现这个功能。为什么不用球,我认为应该是立方体足够使用了,并且切图更加方便,使用起来也方便。虽然可能造成面中心的点与边上的点到球心的距离不...原创 2019-11-06 20:30:47 · 403 阅读 · 0 评论 -
高级OpenGL渲染管线之混合与面剔除(二)
详细请阅读:https://learnopengl-cn.github.io/04%20Advanced%20OpenGL/03%20Blending/混合用于混合多种颜色,适用于不透明的场景;如果是全透明时可以在shader中使用discard字段,显式表示不进行后面的处理;glEnable(GL_BLEND); // 开启混合测试glBlendFunc(GLenum sfa...原创 2019-11-01 16:24:47 · 300 阅读 · 0 评论 -
高级Opengl渲染管线之测试(一)
一、深度测试深度测试默认是禁用的,所以如果要启用深度测试的话,我们需要用GL_DEPTH_TEST选项来启用它:glEnable(GL_DEPTH_TEST);当它启用的时候,如果一个片段通过了深度测试的话,OpenGL会在深度缓冲中储存该片段的z值;如果没有通过深度缓冲,则会丢弃该片段。如果你启用了深度缓冲,你还应该在每个渲染迭代之前使用GL_DEPTH_BUFFER_BIT来清除...转载 2019-10-31 18:15:44 · 420 阅读 · 0 评论