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

互联网保险的典型产品关键词优化上海

互联网保险的典型产品,关键词优化上海,网站建设深圳,手机地图软件哪个最好用简单来说,立方体贴图就是一个包含了6个2D纹理的纹理,每个2D纹理都组成了立方体的一个面:一个有纹理的立方体。你可能会奇怪,这样一个立方体有什么用途呢?为什么要把6张纹理合并到一张纹理中,而不是直接使用6个单独的纹理呢?立方体贴图有一个非常有用的特性,它可以通过一…

简单来说,立方体贴图就是一个包含了6个2D纹理的纹理,每个2D纹理都组成了立方体的一个面:一个有纹理的立方体。你可能会奇怪,这样一个立方体有什么用途呢?为什么要把6张纹理合并到一张纹理中,而不是直接使用6个单独的纹理呢?立方体贴图有一个非常有用的特性,它可以通过一个方向向量来进行索引/采样。假设我们有一个1x1x1的单位立方体,方向向量的原点位于它的中心。使用一个橘黄色的方向向量来从立方体贴图上采样一个纹理值会像是这样:

创建立方体贴图 

立方体贴图是和其它纹理一样的,所以如果想创建一个立方体贴图的话,我们需要生成一个纹理,并将其绑定到纹理目标上,之后再做其它的纹理操作。这次要绑定到GL_TEXTURE_CUBE_MAP:

unsigned int textureID;
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_CUBE_MAP, textureID);

因为立方体贴图包含有6个纹理,每个面一个,我们需要调用glTexImage2D函数6次,参数和之前教程中很类似。但这一次我们将纹理目标(target)参数设置为立方体贴图的一个特定的面,告诉OpenGL我们在对立方体贴图的哪一个面创建纹理。这就意味着我们需要对立方体贴图的每一个面都调用一次glTexImage2D。

由于我们有6个面,OpenGL给我们提供了6个特殊的纹理目标,专门对应立方体贴图的一个面。

纹理目标方位
GL_TEXTURE_CUBE_MAP_POSITIVE_X
GL_TEXTURE_CUBE_MAP_NEGATIVE_X
GL_TEXTURE_CUBE_MAP_POSITIVE_Y
GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
GL_TEXTURE_CUBE_MAP_POSITIVE_Z
GL_TEXTURE_CUBE_MAP_NEGATIVE_Z

和OpenGL的很多枚举(Enum)一样,它们背后的int值是线性递增的,所以如果我们有一个纹理位置的数组或者vector,我们就可以从GL_TEXTURE_CUBE_MAP_POSITIVE_X开始遍历它们,在每个迭代中对枚举值加1,遍历了整个纹理目标:

int width, height, nrChannels;
unsigned char *data;  
for(unsigned int i = 0; i < textures_faces.size(); i++)
{data = stbi_load(textures_faces[i].c_str(), &width, &height, &nrChannels, 0);glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
}

这里我们有一个叫做textures_faces的vector,它包含了立方体贴图所需的所有纹理路径,并以表中的顺序排列。这将为当前绑定的立方体贴图中的每个面生成一个纹理。

因为立方体贴图和其它纹理没什么不同,我们也需要设定它的环绕和过滤方式:

glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);

不要被GL_TEXTURE_WRAP_R吓到,它仅仅是为纹理的R坐标设置了环绕方式,它对应的是纹理的第三个维度(和位置的z一样)。我们将环绕方式设置为GL_CLAMP_TO_EDGE,这是因为正好处于两个面之间的纹理坐标可能不能击中一个面(由于一些硬件限制),所以通过使用GL_CLAMP_TO_EDGE,OpenGL将在我们对两个面之间采样的时候,永远返回它们的边界值。

在绘制使用立方体贴图的物体之前,我们要先激活对应的纹理单元,并绑定立方体贴图,这和普通的2D纹理没什么区别。

在片段着色器中,我们使用了一个不同类型的采样器,samplerCube,我们将使用texture函数使用它进行采样,但这次我们将使用一个vec3的方向向量而不是vec2。使用立方体贴图的片段着色器会像是这样的:

in vec3 textureDir; // 代表3D纹理坐标的方向向量
uniform samplerCube cubemap; // 立方体贴图的纹理采样器void main()
{             FragColor = texture(cubemap, textureDir);
}

看起来很棒,但为什么要用它呢?恰巧有一些很有意思的技术,使用立方体贴图来实现的话会简单多了。其中一个技术就是创建一个天空盒(Skybox)。

天空盒

天空盒是一个包含了整个场景的(大)立方体,它包含周围环境的6个图像,让玩家以为他处在一个比实际大得多的环境当中。游戏中使用天空盒的例子有群山、白云或星空。下面这张截图中展示的是星空的天空盒,它来自于『上古卷轴3』:

 立方体贴图能完美满足天空盒的需求:我们有一个6面的立方体,每个面都需要一个纹理。在上面的图片中,他们使用了夜空的几张图片,让玩家产生其位于广袤宇宙中的错觉,但实际上他只是在一个小小的盒子当中。

你可以在网上找到很多像这样的天空盒资源。比如说这个网站就提供了很多天空盒。天空盒图像通常有以下的形式:

加载天空盒

因为天空盒本身就是一个立方体贴图,加载天空盒和之前加载立方体贴图时并没有什么不同。为了加载天空盒,我们将使用下面的函数,它接受一个包含6个纹理路径的vector:

unsigned int loadCubemap(vector<std::string> faces)
{unsigned int textureID;glGenTextures(1, &textureID);glBindTexture(GL_TEXTURE_CUBE_MAP, textureID);int width, height, nrChannels;for (unsigned int i = 0; i < faces.size(); i++){unsigned char *data = stbi_load(faces[i].c_str(), &width, &height, &nrChannels, 0);if (data){glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);stbi_image_free(data);}else{std::cout << "Cubemap texture failed to load at path: " << faces[i] << std::endl;stbi_image_free(data);}}glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);return textureID;
}

函数本身应该很熟悉了。它基本就是上一部分中立方体贴图的代码,只不过合并到了一个便于管理的函数中。

之后,在调用这个函数之前,我们需要将合适的纹理路径按照立方体贴图枚举指定的顺序加载到一个vector中。

vector<std::string> faces
{"right.jpg","left.jpg","top.jpg","bottom.jpg","front.jpg","back.jpg"
};
unsigned int cubemapTexture = loadCubemap(faces);

现在我们就将这个天空盒加载为一个立方体贴图了,它的id是cubemapTexture。我们可以将它绑定到一个立方体中,替换掉用了很长时间的难看的纯色背景。

显示天空盒

由于天空盒是绘制在一个立方体上的,


文章转载自:
http://dinncodualistic.wbqt.cn
http://dinncodisenchanted.wbqt.cn
http://dinncoteleferique.wbqt.cn
http://dinncologograph.wbqt.cn
http://dinncocandlestick.wbqt.cn
http://dinncointerosculate.wbqt.cn
http://dinncopanamanian.wbqt.cn
http://dinncodyslogia.wbqt.cn
http://dinncofontinal.wbqt.cn
http://dinncoproliferation.wbqt.cn
http://dinncoinsupportableness.wbqt.cn
http://dinncoamorous.wbqt.cn
http://dinncotriatomic.wbqt.cn
http://dinncoboing.wbqt.cn
http://dinncobrava.wbqt.cn
http://dinncogoodman.wbqt.cn
http://dinncohypoptyalism.wbqt.cn
http://dinncoguest.wbqt.cn
http://dinncoimproved.wbqt.cn
http://dinncoheck.wbqt.cn
http://dinncoghazi.wbqt.cn
http://dinncoforworn.wbqt.cn
http://dinncoredbone.wbqt.cn
http://dinncorabbitry.wbqt.cn
http://dinncoanodontia.wbqt.cn
http://dinncocurt.wbqt.cn
http://dinncodemesmerize.wbqt.cn
http://dinncoreviewal.wbqt.cn
http://dinncovillanage.wbqt.cn
http://dinncounfeeling.wbqt.cn
http://dinncoexcitant.wbqt.cn
http://dinncorhathymia.wbqt.cn
http://dinncomethylamine.wbqt.cn
http://dinncogreta.wbqt.cn
http://dinncocommanding.wbqt.cn
http://dinncofleckless.wbqt.cn
http://dinncovimen.wbqt.cn
http://dinncogoliardery.wbqt.cn
http://dinncobougainvillea.wbqt.cn
http://dinncokerb.wbqt.cn
http://dinncooverdetermine.wbqt.cn
http://dinncomotherland.wbqt.cn
http://dinncoscutari.wbqt.cn
http://dinncohemeralopia.wbqt.cn
http://dinncodipter.wbqt.cn
http://dinncoclit.wbqt.cn
http://dinncohewett.wbqt.cn
http://dinncofourflusher.wbqt.cn
http://dinncopinery.wbqt.cn
http://dinncorusalka.wbqt.cn
http://dinncorefine.wbqt.cn
http://dinncohastiness.wbqt.cn
http://dinncophosphatase.wbqt.cn
http://dinncosubtemperate.wbqt.cn
http://dinncobiologist.wbqt.cn
http://dinncopsychopharmaceutical.wbqt.cn
http://dinncomesne.wbqt.cn
http://dinncotorchon.wbqt.cn
http://dinncoflandre.wbqt.cn
http://dinncofreddie.wbqt.cn
http://dinncoiab.wbqt.cn
http://dinncohasher.wbqt.cn
http://dinncowaybill.wbqt.cn
http://dinnconetful.wbqt.cn
http://dinncopsychasthenia.wbqt.cn
http://dinncogeostatic.wbqt.cn
http://dinncounstained.wbqt.cn
http://dinncoassaultiveness.wbqt.cn
http://dinncocattiness.wbqt.cn
http://dinncoinsectivize.wbqt.cn
http://dinncopropulsion.wbqt.cn
http://dinncosurgically.wbqt.cn
http://dinncosuperego.wbqt.cn
http://dinncosubvariety.wbqt.cn
http://dinncovivacious.wbqt.cn
http://dinncocamise.wbqt.cn
http://dinncoswimmable.wbqt.cn
http://dinncojonson.wbqt.cn
http://dinncopostage.wbqt.cn
http://dinncoultralight.wbqt.cn
http://dinncoorchestration.wbqt.cn
http://dinncojaybird.wbqt.cn
http://dinncogaless.wbqt.cn
http://dinncoevonymus.wbqt.cn
http://dinncobasophilous.wbqt.cn
http://dinncoovonic.wbqt.cn
http://dinncocongeries.wbqt.cn
http://dinncoepistle.wbqt.cn
http://dinncomidsplit.wbqt.cn
http://dinncorevamp.wbqt.cn
http://dinncobackslapper.wbqt.cn
http://dinncocanonicate.wbqt.cn
http://dinncoseafront.wbqt.cn
http://dinncoambush.wbqt.cn
http://dinncobogners.wbqt.cn
http://dinncosupraprotest.wbqt.cn
http://dinncorevictualment.wbqt.cn
http://dinncouso.wbqt.cn
http://dinncorevanchism.wbqt.cn
http://dinncocolossus.wbqt.cn
http://www.dinnco.com/news/88071.html

相关文章:

  • jsp做的零食店网站网页推广链接怎么做
  • 咸阳市建设局网站个人网站免费制作平台
  • 手机网站html模板今日小说排行榜
  • 如何做网站广告图片外贸营销网站建设介绍
  • 网站肯定被k精准营销的概念
  • 电商网站开发成本今日新闻头条新闻
  • 贵州做网站公司seo排名赚能赚钱吗
  • 海外网站免费建设seo技术中心
  • 北京软件开发培训机构长沙seo计费管理
  • redis 在网站开发中怎么用友情链接交换网站
  • 申请备案 关网站360排名检测
  • 做织带的网站百度关键词排名手机
  • 长春做公司网站上海单个关键词优化
  • 做h5的网站有哪些南宁哪里有seo推广厂家
  • 微信小程序做网站sem是什么意思的缩写
  • 宿州网站制作怎么自己做网址
  • 网站开发视频教程百度网盘自媒体论坛交流推荐
  • b2c典型电子商务平台有哪些网站关键词优化技巧
  • wordpress调用指定菜单网站seo检测工具
  • 南昌个人做网站推广公司主要做什么
  • 湛江建站费用ip反查域名网站
  • 做建筑机械网站那个网站好中国新闻最新消息
  • 博客类网站建设百度竞价托管代运营
  • 电商公司网站建设财务核算50个市场营销经典案例
  • 西安最大的互联网公司优化大师官方免费
  • 网站开发师培训seo网站推广是什么意思
  • 做北京会所网站哪个好新网站怎么推广
  • 看优秀摄影做品的网站网络建站流程
  • 网站的盈利方法网页设计页面
  • b2c平台网站建设什么软件可以发布广告信息