首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓OpenGL反射/环境纹理

安卓OpenGL反射/环境纹理
EN

Stack Overflow用户
提问于 2012-02-21 04:39:30
回答 1查看 1.1K关注 0票数 0

我在哪里可以找到一些使用反射贴图的好例子?在OpenGL ES 1.0中是可能的吗?我试着使用glTexEnvx,但我不知道如何使用它。我也有一些问题:

1)反射贴图是否需要纹理坐标?在像3ds max这样的程序中,情况并非如此。

代码语言:javascript
复制
2) Can i change reflectivity vs. angle dependency (to make some kind of fresnel effect) without writing shaders?

3)是否可以使用黑/白纹理来遮罩漫反射材质上的反射?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-21 11:17:42

glTexEnv设置类似于纹理采样如何与材质颜色组合的内容。它不会进行环境映射。在固定管道桌面OpenGL上,您可能会使用glTexGen。在OpenGL ES中没有glTexGen

你可以做的是利用纹理矩阵堆栈。ES不支持3d纹理,但它支持3d纹理坐标。因此,将顶点法线复制到纹理坐标中,并确保使用法线矩阵加载纹理矩阵堆栈(如果没有缩放,法线矩阵只是从对象空间到世界空间的变换的旋转部分)。这样,您将最终得到与世界空间法线等效的3d纹理坐标。让GL使用这些作为纹理的2d索引将允许您使用球体贴图进行环境贴图。

这不是一个安卓的例子,但我能找到的最好的在线例子是来自诺基亚的旧的塞班/ 60系列例子的this one,它不会做任何愚蠢的事情,就像在中央处理器上做正常计算一样(明确地)。链接的文章解释了该方法,并包含了一个指向实现该方法的.cpp的链接。OpenGL ES在不同平台之间是相同的,除了扩展,所以它应该直接移植到安卓上。

  1. 不是您想要的;其概念是带纹理的非旋转基本体围绕对象-每个顶点的环境贴图坐标是通过从顶点沿其法线投射光线,直到它命中概念边界几何体并计算出那里的纹理坐标来计算的。所以你需要有效的法线,但你真的不需要提供纹理coordinates.
  2. not,至少据我所知;菲涅尔效果取决于你和曲面之间的角度,而环境贴图只依赖于世界空间中的对象旋转。
  3. 是的,但你很可能最终不得不使用多个渲染过程。ES要求至少有两个纹理单元可用,所以你至少可以做环境+蒙版-如果你有其他组件要应用,你可以做多个渲染,同时将所有内容累积到帧缓冲区中。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9368090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档