OpenGL基础学习之三渲染知识

一.渲染的基础对象概念
  1.顶点数组对象(VAO Vertex Array Object)

  2.顶点缓冲对象(VBO Vertex Buffer Object)

  3.索引缓冲对象(IBO Index Buffer Object)

  4.图形渲染管线(Graphics Pipeline)图形渲染管线接受一组3D坐标,然后把它们转变为你屏幕上的有色2D像素输出

  5.着色器(Shader 在显卡的小处理核心上各自运行的小程序,在图形渲染管线中快速处理你的数据 OpenGL使用的着色器语言为GLSL (OpenGL Shading Language))

二.渲染管线阶段
  1.顶点数据传入

  2.顶点着色器 Vertex Shader:可自定义着色器

    顶点着色器主要的目的是把3D坐标(标准化设备坐标)转为另一种3D坐标(屏幕空间坐标),同时顶点着色器允许我们对顶点属性进行一些基本处理通过顶点缓冲对象(VBO)管理顶点可以使用glGenBuffers函数和一个缓冲ID生成一个VBO对象
    unsigned int VBO;
    glGenBuffers(1, &VBO);

    顶点缓冲对象的缓冲类型是GL_ARRAY_BUFFER
    可以使用glBindBuffer函数把新创建的缓冲绑定到GL_ARRAY_BUFFER目标上
    glBindBuffer(GL_ARRAY_BUFFER, VBO); 
    在绑定后,使用任何(在GL_ARRAY_BUFFER目标上的)缓冲调用都会用来配置当前绑定的缓冲(VBO)。然后我们可以调用glBufferData函数,它会把之前定义的顶点数据复制到缓冲的内存中
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
    第一个参数是目标缓冲的类型:顶点缓冲对象当前绑定到GL_ARRAY_BUFFER目标上。第二个参数指定传输数据的大小(以字节为单位);用一个简单的sizeof计算出顶点数据大小就行。第三个参数是我们希望发送的实际数据。
    第四个参数指定了我们希望显卡如何管理给定的数据
    GL_STATIC_DRAW :数据不会或几乎不会改变。
    GL_DYNAMIC_DRAW:数据会被改变很多。
    GL_STREAM_DRAW :数据每次绘制时都会改变。

  3.形状装配 Shape Assembly

    顶点着色器输出的所有顶点作为输入(如果是GL_POINTS,那么就是一个顶点),并所有的点装配成指定图元的形状

  4.几何着色器 Geometry Shader:可自定义着色器
    可自定义着色器
    把图元形式的一系列顶点的集合作为输入,它可以通过产生新顶点构造出新的(或是其它的)图元来生成其他形状

  5.光栅化 Rasterization
    把图元映射为最终屏幕上相应的像素,生成供片段着色器(Fragment Shader)使用的片段(Fragment)。在片段着色器运行之前会执行裁切(Clipping)。裁切会丢弃超出你的视图以外的所有像素,用来提升执行效率
    一个片段是OpenGL渲染一个像素所需的所有数据

  6.片段着色器 Fragment Shader:可自定义着色器
    计算一个像素的最终颜色,这也是所有OpenGL高级效果产生的地方。通常,片段着色器包含3D场景的数据(比如光照、阴影、光的颜色等等),这些数据可以被用来计算最终像素的颜色

  7.测试与混合 Test and Blending
    检测片段的对应的深度(和模板(Stencil))值,用它们来判断这个像素是其它物体的前面还是后面,决定是否应该丢弃。这个阶段也会检查alpha值(alpha值定义了一个物体的透明度)并对物体进行混合(Blend)

 对于大多数场合,我们只需要配置顶点和片段着色器就行了。几何着色器是可选的,通常使用它默认的着色器就行了

三.数据输入

  3.1顶点输入

  只有在标准化设备坐标内的坐标才会处理[-1.0,1.0]

原文地址:https://www.cnblogs.com/davidcat/p/12202560.html

时间: 2024-10-27 05:00:12

OpenGL基础学习之三渲染知识的相关文章

opengl基础学习专题 (二) 点直线和多边形

题外话 随着学习的增长,越来越觉得自己很水.关于上一篇博文中推荐用一个 学习opengl的 基于VS2015的 simplec框架.存在 一些问题. 1.这个框架基于VS 的Debug 模式下,没有考虑Release版本 2.这个版本中chead,c基础头文件中有些宏设计的不好,例如 //4.0 控制台打印错误信息 #ifndef CERR #define CERR(fmt,...) fprintf(stderr,fmt,##__VA_ARGS__),putchar('\n') #endif/*

AspectJ基础学习之三HelloWorld(转载)

AspectJ基础学习之三HelloWorld(转载) 一.创建项目 我们将project命名为:aspectjDemo.然后我们新建2个package:com.aspectj.demo.aspect 和 com.aspectj.demo.test 前者用来方apsect.后者用来放测试类.如果你仔细的话,你会发现Aspectj的项目上面有个AJ的标志. 二.创建Aspect 首先我们创建HelloWorld.java.他包含main()方法,但是没有方法体,代码如下: [java] view

opengl基础学习专题 (一 )编程环境搭建

题外话: 第一次在博客园上同大家分享博文.水的的地方,错别字的地方.环境交流.批评.知道了马上改. 以前在百度空间中写技术分享博文,后来百度啥也没说就把整个空间封了.当时感觉 还是有点寒心.只想黑一下它,厂长老了.场子也该换了. 对于想写个oepngl基础学习的专题,主要是网上资源有点老,好多都运行不了,买了红宝书<<OpenGL 编程指南 第8版>>,看了还看,觉得有点专业,优化和技术核心讲的的多. 而且都是代码片段,像自己这种门外汉学习起来还是觉得基础不行.需要恶补一下关于 f

opengl基础学习专题 (三) 多边形绘制的几种样式

题外话 聪明人之所以不会成功,是由于他们缺乏坚韧的毅力. ——艾萨克·牛顿(1643年1月4日—1727年3月31日)英国 也许可以理解为 想更深一步的时候,坚持,努力和聪明缺一不可. 挺直腰杆在此向您致敬,愿您仍在天国 仍潇洒的思索着,奔跑着. 正文 在第二课中,我们学习了如何绘制几何图形,但大家如果多写几个程序,就会发现其实还是有些郁闷之处. 例如:点太小,难以看清楚:直线也太细,不舒服:或者想画虚线,但不知道方法只能用许多短直线,甚至用点组合而成. 这些问题将在本课中被解决. 下面就点.直

OpenGL基础学习之二代码基本结构

代码基本结构 1.Init部分   1.1设置GLFW版本号 1.2设置GLFW模式 1.3创建窗口 1.4初始化GLAD 1.5创建视口 2.创建渲染循环    2.1检测输入 2.2交换颜色缓冲 2.3绘制图形显示 3.结束GLFW 原文地址:https://www.cnblogs.com/davidcat/p/12202521.html

零基础学习嵌入式需要注意哪些知识

一直以来对于零基础学习嵌入式的同学都非常的敬佩,毕竟这需要付出比别人更多的努力,才能追平那些本专业有编程基础的同学.从我本人而言,见过零基础学习嵌入式的同学并不在少数.今天主要谈谈零基础学习嵌入式需要注意哪些知识. 首先一定远离负能量的人,我曾记得有这样的一句话"近墨者黑 近朱者赤".这些影响还是很大的.如果一个人整天在你耳边说学这没用.学那没用.立马让滚蛋.我相信这都是坑友的,当然让你别吃喝嫖赌抽这些才是好人! 那么零基础学习嵌入式需要注意哪些知识? 零基础学习嵌入式会涉及到编程,编

零基础学Python应该学习哪些入门知识及学习步骤安排

众所周知,Python以优雅.简洁著称,入行门槛低,可以从事Linux运维.Python Web网站工程师.Python自动化测试.数据分析.人工智能等职位,薪资待遇呈上涨趋势.很多人都想学习Python,那么零基础学Python应该学习哪些入门知识呢? Python入门知识一:解释器. Python是一种面向对象的解释型计算机程序设计语言,因此想要学好Python你必须要了解解释器.由于Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行

总结了零基础学习Java编程语言的几个基础知识要点

很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.本文总结了零基础学习Java编程语言的几个基础知识要点. 1先了解什么是Java的四个方面   初学者先弄清这些Java的基本概念也是必不可少的,死记硬背肯定是不行的,重在理解,理解它们之间的区别与联系,分别有哪些应用.想想这些代码中用到了哪些知识点.不要一味地照着书本敲代码.而不去理解. 1.Java编程语言,即语法. 2.Java文件格式,即各种文件夹.文件的后缀. 3.Java虚拟机(JVM),即处理

OpenGL基础渲染

OpenGL渲染管线(简化版) 客户端-服务器 客户端是存储在CPU存储器中的,并且在应用程序中执行(或者驱动程序),驱动程序将渲染命令和数据组合起来,发动到服务器执行.服务器和客户机在功能上市异步的,他们是各自独立的软件模块或者硬件模块. 着色器 数据先传给顶点着色器,然后是片段着色器,几何着色器(可选择)出现在两者之间 顶点着色器(Vertex Shader) 片段着色器(Fragment Shader) fragment不是最后的像素数据,但和像素对应:fragment需要经过处理,ble