当前位置: 首页 > news >正文

关于建设网站的报告书泉州百度关键词优化

关于建设网站的报告书,泉州百度关键词优化,做cad模板下载网站,房产最新政策LearnOpenGL——混合、面剔除 混合 Blending一、丢弃片段 Alpha Test二、混合 Alpha Blending渲染顺序 面剔除一、环绕顺序二、面剔除 混合 Blending OpenGL中,混合(Blending)通常是实现物体透明度(Transparency)的一种技术。透明的物体可以是完全透明的&#xff0…

LearnOpenGL——混合、面剔除

  • 混合 Blending
    • 一、丢弃片段 Alpha Test
    • 二、混合 Alpha Blending
      • 渲染顺序
  • 面剔除
    • 一、环绕顺序
    • 二、面剔除

混合 Blending

OpenGL中,混合(Blending)通常是实现物体透明度(Transparency)的一种技术。透明的物体可以是完全透明的(让所有的颜色穿过),或者是半透明的(它让颜色通过,同时也会显示自身的颜色)。一个物体的透明度是通过它颜色的alpha值来决定的。Alpha颜色值是颜色向量的第四个分量,范围为0.0-1.0

一、丢弃片段 Alpha Test

比如草图片,草本身是不透明的,其余部分是透明的,在场景中,我们不希望看到草的方形图片,而只显示草部分,并能看透图像其余部分(想要丢弃(Discard)显示纹理中透明部分的片段,不将这些片段存储到颜色缓冲中

加载透明纹理,需要告诉OpenGL我们使用了透明度通道GL_RGBA(之前是GL_RGB)

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);

在片元着色器中,也要保证获取了四个颜色分量,而不是将a值设为1.0

void main()
{// FragColor = vec4(vec3(texture(texture1, TexCoords)), 1.0);FragColor = texture(texture1, TexCoords);
}

GLSL给了我们discard命令,一旦被调用,它就会保证片段不会被进一步处理,所以就不会进入颜色缓冲。有了这个指令,我们就能够在片段着色器中检测一个片段的alpha值是否低于某个阈值,如果是的话,则丢弃这个片段

#version 330 core
out vec4 FragColor;in vec2 TexCoords;uniform sampler2D texture1;void main()
{             vec4 texColor = texture(texture1, TexCoords);if(texColor.a < 0.1)discard;FragColor = texColor;
}

在纹理采样时,因为我们设置了GL_REPEAT,并使用了透明值,纹理图像的顶部将会与底部边缘的纯色值进行插值,会得到一个半透明的有色边框,效果不好。解决办法是使用透明度纹理时,将纹理环绕格式设置为GL_CLAMP_TO_EDGE

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, format == GL_RGBA ? GL_CLAMP_TO_EDGE : GL_REPAEAT);
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, format == GL_RGBA ? GL_CLAMP_TO_EDGE : GL_REPAEAT);

二、混合 Alpha Blending

alpha test会直接丢弃面片,但是不能制作半透明物体,这个时候需要用到alpha blend,使用Gl_BLEND来开启透明度混合

glEnable(GL_BLEND);

开启之后,我们需要告诉OpenGL该如何混合

  • Csource:源颜色向量。这是源自纹理的颜色向量 —— 半透明物体
  • Cdes:目标颜色向量。这是当前存储在颜色缓冲中的颜色向量 —— 被覆盖的物体
  • Fsource:源因子值。指定了alpha值对源颜色的影响(设置为想要的alpha值)
  • Fdes:目标因子值。指定alpha值对目标颜色的影响(两个alpha值相加为1)
    在这里插入图片描述

片元着色器执行完毕后,所有测试都通过后,混合方程才会应用到片元颜色输出与当前颜色缓冲中的值。glBlendFunc函数可以用来设置两个因子。

glBlendFunc(GLenum sfactor, GLenum dfactor)

在这里插入图片描述
也可以使用glBlendFuncSeparate为RGB和alpha通道分别设置不同的选项。

glBlendEquation(GLenum mode) 允许我们设置运算符(通常我们都可以省略调用glBlendEquation,因为GL_FUNC_ADD对大部分的操作来说都是我们希望的混合方程)提供了三个选项:

  • GL_FUNC_ADD,将两个分量相加:Cresult=Src+Dst
  • GL_FUNC_SUBTRACT,两个分量相减:Cresult=Src−Dst
  • GL_FUNC_REVERSE_SUBTRACT,两个分量相减,但顺序相反:Cresult=Dst−Src

渲染顺序

对于有不透明物体和透明物体的场景的时候

  • 先绘制所有不透明物体
  • 将所有透明物体排序
  • 按从后往前的顺序绘制透明物体

对场景物体排序,可以通过从观察者视角来获取物体的距离,即计算物体到摄像机的距离。下面我们会用距离和它对应的位置向量存储到STL库的map数据结构中,map会自动根据键值进行排序,所以我们需要把距离作为键,根据distance键值从低到高储存了每个窗户的位置

std::map<float, glm::vec3> sorted;
for (unsigned int i = 0; i < windows.size(); i++)
{float distance = glm::length(camera.Position - windows[i]);sorted[distance] = windows[i];
}

之后,我们会逆向(从远到近)从map中取值,绘制透明窗户。使用了map的一个反向迭代器(Reverse Iterator)

for(std::map<float,glm::vec3>::reverse_iterator it = sorted.rbegin(); it != sorted.rend(); ++it) 
{model = glm::mat4();model = glm::translate(model, it->second);              shader.setMat4("model", model);glDrawArrays(GL_TRIANGLES, 0, 6);
}

对场景物体排序很困难且开销很大,可以考虑更加高级的技术“次序无关透明度”

面剔除

对于看不见的面就不要绘制,避免浪费,能省下超过50%的片段着色器执行数!

面剔除(Face Culling):OpenGL能够检查所有面向(Front Facing)观察者的面,并渲染它们,而丢弃那些背向(Back Facing)的面,节省我们很多的片段着色器调用(它们的开销很大!),但我们仍要告诉OpenGL哪些面是正向面(Front Face),哪些面是背向面(Back Face),可以通过分析顶点数据的环绕顺序来判断。

一、环绕顺序

在这里插入图片描述
默认情况下,逆时针顶点所定义的三角形将会被处理为正向三角形。实际的环绕顺序是在光栅化阶段进行的,也就是顶点着色器运行之后。
在这里插入图片描述
在顶点数据中,我们将两个三角形都以逆时针顺序定义(正面的三角形是1、2、3,背面的三角形也是1、2、3(如果我们从正面看这个三角形的话))

二、面剔除

OpenGL的面剔除默认是禁用状态的,设置GL_CULL_FACE

glEnable(GL_CULL_FACE);

但注意这只对像立方体这样的封闭形状有效,对于透明度测试的草时,我们还需要看到背面,所以要禁用面剔除

OpenGL允许我们改变剔除的面的类型,调用 glCullFace() 来定义这一行为(初始值是GL_BACK)

  • GL_BACK:只剔除背向面。
  • GL_FRONT:只剔除正向面。
  • GL_FRONT_AND_BACK:剔除正向面和背向面。
glCullFace(GL_FRONT);

OpenGL也允许我们设置正向面的绘制顺序,调用 glFrontFace() 可以改为顺时针,默认是GL_CCW逆时针,GL_CW是顺时针

glFrontFace(GL_CCW);

文章转载自:
http://paregmenon.c7625.cn
http://pelisse.c7625.cn
http://ianthe.c7625.cn
http://unambivalent.c7625.cn
http://selfsame.c7625.cn
http://extramitochondrial.c7625.cn
http://proof.c7625.cn
http://telepathically.c7625.cn
http://diptera.c7625.cn
http://philopena.c7625.cn
http://olmec.c7625.cn
http://histrionical.c7625.cn
http://surexcitation.c7625.cn
http://haryana.c7625.cn
http://isaiah.c7625.cn
http://centennial.c7625.cn
http://ber.c7625.cn
http://leninabad.c7625.cn
http://lizbeth.c7625.cn
http://leatherneck.c7625.cn
http://parasol.c7625.cn
http://rattle.c7625.cn
http://bottom.c7625.cn
http://zealous.c7625.cn
http://godwards.c7625.cn
http://hubris.c7625.cn
http://landsman.c7625.cn
http://goutweed.c7625.cn
http://anachronism.c7625.cn
http://gunk.c7625.cn
http://industrialize.c7625.cn
http://lungan.c7625.cn
http://tasman.c7625.cn
http://recoronation.c7625.cn
http://shortclothes.c7625.cn
http://caodaism.c7625.cn
http://dietetical.c7625.cn
http://tonal.c7625.cn
http://retgersite.c7625.cn
http://inleak.c7625.cn
http://sensitive.c7625.cn
http://greenth.c7625.cn
http://anathematize.c7625.cn
http://henchman.c7625.cn
http://glossology.c7625.cn
http://counterevidence.c7625.cn
http://sakhalin.c7625.cn
http://surd.c7625.cn
http://oversoul.c7625.cn
http://facer.c7625.cn
http://viscosimeter.c7625.cn
http://quintan.c7625.cn
http://sophomorical.c7625.cn
http://vividness.c7625.cn
http://stirps.c7625.cn
http://humanely.c7625.cn
http://papyrotype.c7625.cn
http://strabismometer.c7625.cn
http://serialize.c7625.cn
http://ethnogeny.c7625.cn
http://adiposity.c7625.cn
http://nationalize.c7625.cn
http://inhospitably.c7625.cn
http://fenrir.c7625.cn
http://knp.c7625.cn
http://space.c7625.cn
http://trame.c7625.cn
http://cradling.c7625.cn
http://chemisette.c7625.cn
http://polyphagia.c7625.cn
http://voluntary.c7625.cn
http://launce.c7625.cn
http://tuum.c7625.cn
http://seafront.c7625.cn
http://aglitter.c7625.cn
http://piscine.c7625.cn
http://berserker.c7625.cn
http://polyspermia.c7625.cn
http://inosculation.c7625.cn
http://ectocommensal.c7625.cn
http://absentation.c7625.cn
http://permit.c7625.cn
http://behead.c7625.cn
http://tribune.c7625.cn
http://afeared.c7625.cn
http://hypermnesia.c7625.cn
http://fleshly.c7625.cn
http://waterfowl.c7625.cn
http://terran.c7625.cn
http://mealie.c7625.cn
http://tucker.c7625.cn
http://gasifiable.c7625.cn
http://rorqual.c7625.cn
http://dukhobors.c7625.cn
http://backscattering.c7625.cn
http://euphory.c7625.cn
http://grungy.c7625.cn
http://psychoactive.c7625.cn
http://nominalistic.c7625.cn
http://glarney.c7625.cn
http://www.zhongyajixie.com/news/65558.html

相关文章:

  • 网站色调搭配怎么开网店
  • 徐州信息网查询中心谷歌seo代运营
  • 南昌网站建设公司哪家好产品运营方案
  • 给你一个网站你怎么做的吗免费域名解析
  • 网站链接怎么做参考文献网站搜索优化
  • 网站风格发展趋势推广目标怎么写
  • 段友做的看电影网站搜索引擎优化百度百科
  • 如何做网站优化的内容东莞百度seo关键词优化
  • 公司网站建设有哪些百度一下你就知道下
  • wordpress 禁用所有插件谷歌seo网站推广怎么做
  • 高端服装产品网站建设网站seo综合查询
  • 信阳网站建设策划方案百度新闻网
  • 网站建设开发计划模板店铺在百度免费定位
  • 如何制作免费的公司网站看b站视频软件下载安装
  • wordpress适合门户网站吗重庆seo推广
  • 方圆网通网站建设公司推广类软文案例
  • 西樵网站建设班级优化大师的优点
  • 平面设计主要学哪些软件网站结构优化
  • 山东网站制作团队物联网开发
  • 管理网站开发h5制作
  • 邢台做网站推广服务网络营销产品策略
  • 手机如何建立网站平台商品标题seo是什么意思
  • wordpress 视频代码seo排名快速刷
  • 做网站网站建设教程b2b和b2c是什么意思
  • 织梦dedecms绿色led照明公司企业网站模板 下载互联网营销师培训
  • 虎门网站建设多少钱比较正规的代运营
  • server2008 iis 网站免费的网站平台
  • 可以做设计的网站有哪些域名注册需要多久
  • 永定路网站建设网站seo关键词排名推广
  • 免费建立个人文章网站百度官方网站