1

我试图将纹理仅放在球体的一部分中。我有一个代表地球的球体,它的地形和地球一部分的地形纹理,比如意大利的卫星地图。我想展示意大利所在球体部分的地形。

我正在创建我的球体,绘制一组三角形条带。据我了解,如果我想使用纹理,我需要为每个顶点指定纹理坐标(glTexCoord2*)。但我没有对所有这些都有效的纹理。那么我如何告诉 OpenGL 跳过这些顶点的纹理呢?

4

1 回答 1

2

我假设您有两个纹理或球体其余部分的颜色属性(“不是意大利”)。

最简单的方法是创建一个覆盖整个球体的纹理,但使用 Alpha 通道。例如,alpha=1用于“not italy”和alpha=0“italy”。然后你可以在你的片段着色器中做这样的事情(伪代码,我没有测试任何东西):

...
uniform sampler2D extra_texture;
in vec2 texture_coords;
out vec3 final_color;
...
void main() {
    ...
    // Assume color1 to be the base color for the sphere, no matter how you get it (attribute/texture), it has at least 3 components.
    vec4 color2 = texture(extra_texture, texture_coords);
    final_color = mix(vec3(color2), vec3(color1), color2.a);
}

混合中的颜色组合如下,mix(x,y,a) = x*(1-a)+y*a对于向量,这是按组件方式完成的。所以你可以看到 if alpha=1("not Italy"),color1将被选中,反之亦然alpha=0

您可以使用纹理数组或类似的东西将其扩展到多个层,但我会保持简单的 2 层开始。

于 2012-09-10T14:00:47.793 回答