使用LOD在球体上映射纹理的最佳方法

时间:2012-09-12 12:47:25

标签: android opengl-es-2.0 simplex-noise

最重要的是,我正在使用Android上的OpenGL ES 2.0。

表面和高度纹理由具有Simplex噪声算法的线程CPU生成。 我绘制一个球体,我想根据与观察者的距离(LOD)来映射纹理。 我确切地说,地图生成器使用所需的球形变形渲染2D纹理(基于3D噪声)以进行精细映射。

仅映射一个纹理(票价距离)效果非常好。现在,我想基于眼睛到球体中心向量来映射(并生成)纹理。 想象一下在球体中间的一个正方形(我的纹理),每当我旋转球体或移动时,正方形必须始终在观察者面前居中。只有内容被更改。

从哪里开始?

我只能让它与偏航旋转一起工作..如果我修改其他人(俯仰,滚动),所有都会被打破。

我正在研究另一种(最佳)方法吗?

纹理映射的实际着色器代码(仅适用于偏航):

vec4 S = INVERTED_VIEW_MATRIX * vec4(sphere.nadir, 1.0);
vec4 d = normalize(WORLD_POSITION - S);

d = TEXTURE_ROTATE_MATRIX * d;

float u = 0.5 - (atan(d.z, d.x) / (2.0 * PI));
float v = 0.5 - (2.0 * (asin(d.y) / (2.0 * PI)));

谢谢你,对不起我的英语很差。

0 个答案:

没有答案