位置: 编程技术 - 正文
推荐整理分享OpenGL cube map方式实现的环境贴图●如何设置相机(opengl clamp),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:opengl bloom,opengl cullface,opengl clamp,opengl batch,opengl cullface,opengl sample,opengl context for format,opengl sampler,内容如对您有帮助,希望把文章链接给更多的朋友!
对cube map有一些了解的朋友都知道,如果要在物体表面实现镜面反射的效果,需要在物体的中心设置一个相机,沿X,-X,Y,-Y,Z,-Z六个方向分别取景,渲染到cube map的六个子texture中。
设置相机的时候,一般都不会弄错相机的朝向,但是,估计很多人搞不清楚相机的UP方向。
网络上的资料很少论及这个问题,因此,决定自己做一个简单的小实验,彻底搞清楚这个问题。为此,准备了下面的6张图片,分别充当cube map的六个子texture。
使用cube map方式将它们渲染到一个正方体表面,观察它们的方向,使用的vertex shader代码如下:
fragment shader代码如下 我们要观察正方体的六个面,但是每次只能看到它的三个面。为了观察X,Y,Z面,我们需要剔除物体的背面,只渲染正面:
渲染的结果如下:为了观察-X,-Y,-Z面,我们需要剔除物体的正面,只渲染背面:
渲染结果如下:结论如下,(使用OpenGL的cube map)生成环境贴图的时候:
①当相机朝向X,-X,Z,-Z方向的时候,其UP方向都是Y方向;
②当相机朝向Y方向的时候,其UP方向是-Z方向
③当相机朝向-Y方向的时候,其UP方向是Z方向
其实得注意的只是顶部和底部的Y和-Y两个方向。有一个比较傻瓜的做法是:渲染Z方向之后,就让相机后仰°,就可以渲染Y方向了;渲染Y方向之后,就让相机前倾°,就可以渲染-Y方向了。
以下图片可以帮助大家更好地理解cube map各个子texture之间的关系:
最后,提个醒,使用glTexImage2D()或glTexStorage2D()为GL_TEXTURE_CUBE_MAP_POSITIVE_X、GL_TEXTURE_CUBE_MAP_NEGATIVE_X、GL_TEXTURE_CUBE_MAP_POSITIVE_Y...分配空间的时候,width和height必须相等,也就是说图片的长和宽必须相等,不然就会返回错误。因为这个问题,笔者耽搁了两天,差点唾弃自己的intel核显
CodeBlocks下的freeglut环境配置(一)(附图文) 记得我以前调配环境的时候,查阅各种博客,各种英文官方文档,未能得其要义,真可谓目断长途也,一望一回远,而今蓦然回首,才知道是如此的简
在android使用OPENGL总结 Android为OpenGLES支持,提供GLSurfaceView组件,这个组件用于显示3D图形。GLSurfaceView本身并不提供绘制3D图形的功能,而是由GLSurfaceView.Renderer来完成SurfaceView
opengl示例代码在vs上编译不过 官方解释,需要在includeglut.h前#ifndefGLUT_DISABLE_ATEXIT_HACK#defineGLUT_DISABLE_ATEXIT_HACK#endif
标签: opengl clamp
本文链接地址:https://www.jiuchutong.com/biancheng/369662.html 转载请保留说明!友情链接: 武汉网站建设