Source code
Login
Home
Articles
Open-Source
Pictures
About Me
Documents
Hot
1
汇编第五章
2
unix文件
3
ubuntu使用root用户登陆14-15版本可用
4
PHP-GTK2-文档学习&翻译——教程部分表格布局使用GtkTable
5
解决LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
6
时钟
7
php导出数据到xls文件
8
Windows GUI开发在控制台打印输出
9
Vim设置字体linux和windows
10
对象代理
Links
网易云课堂
简明现代魔法
看风景
果壳网看科技
下厨房
Redis官网
nginx官网
Mysql文档
持续集成项目travis-c...
在线图书创作Leanpub
PHP-CPP
值得推荐的C/C++库和框架
腾讯一个php
Jquery插件库网站
phpstorm免费注册码
Game And C 老外
owent-ACM-Cpp-...
开源应用程序架构
QTCN开发网
OAuth2协议
SwiftChinese
香草/Vanilla是一个基...
个人征信查询
A set of PHP l...
知行一 | 顶级C++社区
国外QT支持站
WebGL中文网-three...
UE4学习资源合集
https://www.ma...
cppcon
C++官方文档
C++中文友好文档
阿里云珍贵技术资料免费下载
LoL查询
opengl-tutoria...
WebGl版本支持检测网址
OpenGL API Doc...
Git 在团队中的最佳实践-...
A successful G...
GLAD- 比glew更好的...
OpenGL模型导入库-As...
WebGL-火狐doc
如何开发一款游戏:游戏开发流...
Shader
nodejs中文网
Dracula-A dark...
即时通讯网
https://apizza...
sweetalert
伯乐在线github
阿里巴巴免费图标
opengl特效
看见统计
codewars算法挑战1
leetcode算法挑战2
PHP列续松博客
electron-vue文档
Vue Cli 3.0
element-ui
翻墙
Golang ORM ——G...
访客地图
LearnOpenGL入门-纹理总结
张成
2018/1
6540
#LearnOpenGL入门-纹理总结 学习网址 [https://learnopengl-cn.github.io/01%20Getting%20started/06%20Textures/](https://learnopengl-cn.github.io/01%20Getting%20started/06%20Textures/ "https://learnopengl-cn.github.io/01%20Getting%20started/06%20Textures/") - 为了能够把纹理映射(Map)到三角形上,我们需要指定三角形的每个顶点各自对应纹理的哪个部分。这样每个顶点就会关联着一个纹理坐标(Texture Coordinate),用来标明该从纹理图像的哪个部分采样(译注:采集片段颜色)。之后在图形的其它片段上进行片段插值(Fragment Interpolation)。纹理坐标在x和y轴上,范围为0到1之间(注意我们使用的是2D纹理图像)。使用纹理坐标获取纹理颜色叫做采样(Sampling)。纹理坐标起始于(0, 0),也就是纹理图片的左下角,终始于(1, 1),即纹理图片的右上角。下面的图片展示了我们是如何把纹理坐标映射到三角形上的。 流程: VBO中设置 顶点的纹理坐标 -> 顶点着色器中获得 纹理坐标 -> 设置输出变量 给 片元着色器使用 -> 片元着色器 使用texture函数 获取 纹理对应的纹理坐标上的颜色 赋值给输出的颜色变量 - 纹理过滤 GL_NEAREST产生了颗粒状的图案,我们能够清晰看到组成纹理的像素,而GL_LINEAR能够产生更平滑的图案 - 多级渐远纹理(Mipmap)的概念 ``` glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); ``` 一个常见的错误是,将放大过滤的选项设置为多级渐远纹理过滤选项之一。这样没有任何效果,因为多级渐远纹理主要是使用在纹理被缩小的情况下的:纹理放大不会使用多级渐远纹理,为放大过滤设置多级渐远纹理的选项会产生一个GL_INVALID_ENUM错误代码。 在生成纹理之后调用glGenerateMipmap(GL_TEXTURE_2D )。这会为当前绑定的纹理自动生成所有需要的多级渐远纹理。 - 片元着色器中对纹理采样 GLSL有一个供纹理对象使用的内建数据类型,叫做采样器(Sampler),它以纹理类型作为后缀,比如sampler1D、sampler3D可以简单声明一个uniform sampler2D把一个纹理添加到片段着色器中 - 纹理单元 ``` glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, texture1); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, texture2); ... //设置着色器中 各个 纹理单元 glUniform1i(glGetUniformLocation(ourShader.ID, "texture1"), 0); // 手动设置 名称与着色器中的变量名称一致 glUniform1i(glGetUniformLocation(ourShader.ID, "texture2"), 1);//手动设置 ``` ``` //片元着色器定义多个纹理接受参数 uniform sampler2D texture1; uniform sampler2D texture2; ``` OpenGL要求y轴0.0坐标是在图片的底部的,但是图片的y轴0.0坐标通常在顶部。需要手动翻转y轴。如果使用stb_image.h,它能够在图像加载时帮助我们翻转y轴,只需要在加载任何图像前加入以下语句即可: ``` stbi_set_flip_vertically_on_load(true); ```
上一篇:
mysql使用存储过程生成海量数据
下一篇:
LearnOpenGL入门-着色器总结
Please enable JavaScript to view the
comments powered by Disqus.