绘制天空盒
来源:互联网 发布:金庸群侠传mac版 编辑:程序博客网 时间:2024/05/29 17:02
原理:
创建一个立方体,并且视点在立方体的中心。在立方体的每个面上贴上大小相同的六个立方体纹理。
这个也可以用作目前比较流行的全景图。
方法:
1.创建一个以人眼为中心的立方体。
2.创建构建这个立方体的索引。
3.创建一个立方体纹理。
4.使用立方体着色器采样这个纹理。
立方体纹理的创建:
init()
GLuint tex; glGenTextures(1, &tex);glBindTexture(GL_TEXTURE_CUBE_MAP,tex); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, filtering ? GL_LINEAR : GL_NEAREST); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, filtering ? GL_LINEAR_MIPMAP_LINEAR : GL_NEAREST); 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);glPixelStorei(GL_UNPACK_ALIGNMENT, 1); for(int i=0; i<6; i++) { glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB16F, img.getWidth(), img.getHeight(), 0, GL_RGB, GL_HALF_FLOAT, out); }glGenerateMipmap(GL_TEXTURE_CUBE_MAP);
draw()
glUseProgram(skyboxshaderid);//要关闭深度测试,因为天空盒作为一个背景,默认其是在无穷远的,所以没必要提供深度测试对其片元进行选择性丢弃,我们要有的效果是天空盒片元要存在不要丢弃。glDisable(GL_DEPTH_TEST);glActiveTexture(GL_TEXTURE0);glBindTexture(GL_TEXTURE_CUBE_MAP,cube_skyid);//因为我们是在视图空间下建立的模型立方体,所以要将其变化到世界坐标空间下。glUniformMatrix4fv(viewloc,1,GL_FALSE,inverse_view);//设置投影矩阵glBindBuffer(GL_ARRAY_BUFFER,sky_vbo);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,sky_ibo);glEnableVertexAttribArray(0);glVertexAttribPointer(0,3,GL_FLOAT,false,32,0);glDrawElements(GL_TRIANLES,6*6,GL_UNSIGNED_SHORT,0);glDisableVertexAttribArray(0);glBindBuffer(GL_ARRAY_BUFFER,0);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);
详细shader源码:
https://t.xiaomiquan.com/6AyZvFm
阅读全文
0 0
- opengles绘制天空盒
- 绘制天空盒
- ios-OPENGL之绘制天空盒
- OpenGL Shader 绘制天空盒_基础
- 天空盒子的绘制
- opengles绘制天空穹
- OpenGL Shader 绘制天空盒_基础 2
- 天空盒、天空穹和天空面
- 天空盒
- 天空盒
- 天空盒
- 天空穹,天空面,天空盒的学习
- Ogre 创建天空盒、天空穹、天空面
- OpenGL 天空盒
- 天空盒陆地行动
- 天空盒的制作
- unity3d天空盒
- osg创建天空盒
- OpenStack+Ceph+热迁移+++一、前提条件
- 677. Map Sum Pairs
- JDBC和JDBC-ODBC的区别
- 杂项二
- change事件用法
- 绘制天空盒
- ssh连接ubuntu虚拟机
- opencv(九)--移动物体检测
- 连黄牛党都开始玩AI了,春节抢票不加钱是回不去了
- linux下安装sublim的几种有效方法
- Java中的断言
- C语言实验——最值
- python用 urllib和urllib2两种方式调用图灵机器人接口
- 清澄A1007. 特殊的数字3