位置: 编程技术 - 正文

The graphics pipeline ,Open GL 渲染管线

编辑:rootadmin

推荐整理分享The graphics pipeline ,Open GL 渲染管线,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

来源: Ever since the early days of real-time 3d, the triangle has been the paintbrush with which scenes have been drawn. Although modern GPUs can perform all sorts of flashy effects to cover up this dirty secret, underneath all the shading, triangles are still the medium in which they work. The graphics pipeline that OpenGL implements reflects this: the host program fills OpenGL-managed memory buffers with arrays of vertices; these vertices are projected into screen space, assembled into triangles, and rasterized into pixel-sized fragments; finally, the fragments are assigned color values and drawn to the framebuffer. Modern GPUs get their flexibility by delegating the “project into screen space” and “assign color values” stages to uploadable programs called shaders. Let’s look at each stage in more detail:

The vertex and element arrays A rendering job starts its journey through the pipeline in a set of one or more vertex buffers, which are filled with arrays of vertex attributes. These attributes are used as inputs to the vertex shader. Common vertex attributes include the location of the vertex in 3d space, and one or more sets of texture coordinates that map the vertex to a sample point on one or more textures. The set of vertex buffers supplying data to a rendering job are collectively called the vertex array. When a render job is submitted, we supply an additional element array, an array of indexes into the vertex array that select which vertices get fed into the pipeline. The order of the indexes also controls how the vertices get assembled into triangles later on.

Uniform state and textures A rendering job also has uniform state, which provides a set of shared, read-only values to the shaders at each programmable stage of the pipeline. This allows the shader program to take parameters that don’t change between vertices or fragments. The uniform state includes textures, which are one-, two-, or three-dimensional arrays that can be sampled by shaders. As their name implies, textures are commonly used to map texture images onto surfaces. They can also be used as lookup tables for precalculated functions or as datasets for various kinds of effects.

The vertex shader The GPU begins by reading each selected vertex out of the vertex array and running it through the vertex shader, a program that takes a set of vertex attributes as inputs and outputs a new set of attributes, referred to as varying values, that get fed to the rasterizer. At a minimum, the vertex shader calculates the projected position of the vertex in screen space. The vertex shader can also generate other varying outputs, such as a color or texture coordinates, for the rasterizer to blend across the surface of the triangles connecting the vertex.

Triangle assembly

The graphics pipeline ,Open GL 渲染管线

The GPU then connects the projected vertices to form triangles. It does this by taking the vertices in the order specified by the element array and grouping them into sets of three. The vertices can be grouped in a few different ways:

Take every three elements as an independent triangle Make a triangle strip, reusing the last two vertices of each triangle as the first two vertices of the next Make a triangle fan, connecting the first element to every subsequent pair of elements The diagram shows how the three different modes behave. Strips and fans both require only one new index per triangle in the element array after the initial three, trading the flexibility of independent triangles for extra memory efficiency in the element array.

Rasterization

The rasterizer takes each triangle, clips it and discards parts that are outside of the screen, and breaks the remaining visible parts into pixel-sized fragments. As mentioned above, the vertex shader’s varying outputs are also interpolated across the rasterized surface of each triangle, assigning a smooth gradient of values to each fragment. For example, if the vertex shader assigns a color value to each vertex, the rasterizer will blend those colors across the pixelated surface as shown in the diagram.

The fragment shader The generated fragments then pass through another program called the fragment shader. The fragment shader receives the varying values output by the vertex shader and interpolated by the rasterizer as inputs. It outputs color and depth values that then get drawn into the framebuffer. Common fragment shader operations include texture mapping and lighting. Since the fragment shader runs independently for every pixel drawn, it can perform the most sophisticated special effects; however, it is also the most performance-sensitive part of the graphics pipeline.

Framebuffers, testing, and blending A framebuffer is the final destination for the rendering job’s output. In addition to the default framebuffer OpenGL gives you to draw to the screen, most modern OpenGL implementations let you make framebuffer objects that draw into offscreen renderbuffers or into textures. Those textures can then be used as inputs to other rendering jobs. A framebuffer is more than a single 2d image; in addition to one or more color buffers, a framebuffer can have a depth buffer and/or stencil buffer, both of which optionally filter fragments before they are drawn to the framebuffer: Depth testing discards fragments from objects that are behind the ones already drawn, and stencil testing uses shapes drawn into the stencil buffer to constrain the drawable part of the framebuffer, “stencilling” the rendering job. Fragments that survive these two gauntlets have their color value alpha blended with the color value they’re overwriting, and the final color, depth, and stencil values are drawn into the corresponding buffers.

Conclusion That’s the process, from vertex buffers to framebuffer, that your data goes through when you make a single “draw” call in OpenGL. Rendering a scene usually involves multiple draw jobs, switching out textures, other uniform state, or shaders between passes and using the framebuffer’s depth and stencil buffers to combine the results of each pass. Now that we’ve covered the general dataflow of 3d rendering, we can write a simple program to see how OpenGL makes it all happen. Throughout the course of this tutorial, I’d love to get your feedback—let me know if it’s helping you or if anything doesn’t make sense.

Following the pipeline 1.PassingDatatotheVertexShaderThevertexshaderisthefirstprogrammablestageintheOpenGLpipelineandhasthedistinctionofbeingtheonlymandatorystageinthepipeline.VertexAttributesInGLSL,themechanismforgettingda

Tutorial 4: Shaders 本文源自:

FreeGLUT Tips: 详解 glutInit 的入口参数 问题前文我们遇到的问题是,如何正确地给glutInit()这个函数传递一个正确的入口参数,使它能够正确地初始化OpenGL环境。假设大家都在使用VisualC++。当

标签: The graphics pipeline ,Open GL 渲染管线

本文链接地址:https://www.jiuchutong.com/biancheng/369418.html 转载请保留说明!

上一篇:openGL4.X 深度测试(depth testing) framebuffer中(opengl 4.2)

下一篇:Following the pipeline

  • 增值税留抵税额账务处理
  • 出口关税的计算基数
  • 会计准则体系包括会计制度吗
  • 会计中预付款余额是什么
  • 应计入资产负债表应付利息项目的有
  • 工会经费和职工教育经费比例
  • 先开了发票给客户,不付款怎么办
  • 外地预缴企业所得税税率
  • 化肥贸易需要什么手续
  • 发行收入要减去股本吗
  • 领用工程物资的进项税要转出么
  • 企业出租房屋交什么税?
  • 小规模公司怎么注册
  • 本月有收入免增值税吗
  • 小微企业季度所得税怎么计算
  • 租车服务的税率
  • 减免所得税怎么算税率
  • 建筑企业收到的成本发票可以直接进主营业务成本吗
  • 跨年度的成本费用发票怎么入账
  • 税务稽查的四个环节
  • 购买商品成本要支付哪些成本
  • 开票3个点13个点是什么意思
  • 外购商品对外赠送增值税怎么算
  • 服务性行业受气
  • 公司法人借款给公司怎么取出来
  • 企业买房可以抵扣多少税
  • 资产负债表在建工程怎么填列
  • 长期股权投资核算的成本法与权益法的主要差别有哪些
  • 库存商品赠送会计分录
  • 如何加快身体的新陈代谢
  • kb4592440安装失败
  • 不确认收入要结转成本吗
  • h5调用海康摄像头
  • PHP:cal_days_in_month()的用法_日历函数
  • 机关单位工会经费提取比例
  • 缴纳水利建设基金计入什么科目
  • 餐饮定额发票能报销吗怎么报销
  • vue.js in action
  • 我用ChatGPT做直播技术选型,卷死了同事
  • node.js快速入门
  • 增值税留抵税额退税政策
  • 固定资产原值怎么确定
  • 工资与劳务报酬是否合并缴纳个税
  • 备抵法账务处理方式
  • 怎么连接php
  • 公司购买绿植入什么科目
  • 跨年度错账调整分录
  • 资产减值损失如何计算
  • sql server2012使用方法
  • 开票限额相关规定最新
  • 搬迁补偿款的会计分录
  • 办公室购花卉会计处理
  • 收到某单位投入机器一台
  • 税金及附加和营业税金及附加是一个科目吗
  • 机票的退票费会退到哪里
  • 购买货物对方代垫的运输费分录
  • 注册资本认缴制的利弊
  • 受托方受托代销商品会计分录
  • 转让价格名词解释
  • 其他应收款个人在贷方表示什么
  • 企业盘盈盘亏的固定资产先要计入待处理财产损益
  • 企业筹建期间发生的费用应计入什么账户
  • sql server日期函数有哪些
  • mysql 远程连接不上
  • centos7添加ip地址
  • pe系统找不到系统
  • win10预览版最新
  • win7可以免费升win10
  • cocos2dx游戏有哪些
  • 通过node-mysql搭建Windows+Node.js+MySQL环境的教程
  • 安卓开发源码
  • perl 数组放入另一个数组
  • shell检查语法错误
  • linux shell脚本编程100例
  • jquery常用的事件绑定函数有哪些
  • unity持久化存储
  • jquery提交
  • 工行网银如何申请发票
  • 淮北市国家税务总局电话
  • 地税局下属单位
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设