我想明白,我怎么可以改变一个圆顶的UV贴图,我需要一个不同的纹理贴图投射比这一个编码如下:圆顶的紫外线贴图?
protected final void createDome(final float radius) {
int lats=16;
int longs=16;
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, textures2x4[0].getTextureID());
int i, j;
int halfLats = lats/2;
for(i = 0; i <= halfLats; i++)
{
double lat0 = MathUtils.PI * (-0.5 + (double) (i - 1)/lats);
double z0 = Math.sin(lat0)* radius;
double zr0 = Math.cos(lat0)* radius;
double lat1 = MathUtils.PI * (-0.5 + (double) i/lats);
double z1 = Math.sin(lat1)* radius;
double zr1 = Math.cos(lat1)* radius;
GL11.glBegin(GL11.GL_QUAD_STRIP);
for(j = 0; j <= longs; j++)
{
double lng = 2 * MathUtils.PI * (double) (j - 1)/longs;
double x = Math.cos(lng);
double y = Math.sin(lng);
double s1, s2, t;
s1 = ((double) i)/halfLats;
s2 = ((double) i + 1)/halfLats;
t = ((double) j)/longs;
// HERE: I don't know how to calculate the UV mapping
GL11.glTexCoord2d(s1, t);
GL11.glNormal3d(x * zr0, y * zr0, z0);
GL11.glVertex3d(x * zr0, y * zr0, z0);
GL11.glTexCoord2d(s2, t);
GL11.glNormal3d(x * zr1, y * zr1, z1);
GL11.glVertex3d(x * zr1, y * zr1, z1);
}
GL11.glEnd();
}
}
我挂了输出图像和原始地图。实际上,我需要一个紫外线贴图,将Artic放置在圆顶的天顶/顶部,而Antartic则放在圆顶的底部...... Artic/Antartic贴图仅用于弄清楚我的意思,我的需要它不是以适应全球Emisphere公司
Output image http://img831.imageshack.us/img831/3481/lwjgl.png
Source map http://img203.imageshack.us/img203/4930/earthc.png
请修复图像。看起来他们存储在需要注册的某个论坛上,才允许查看。 – schnaader 2010-07-25 14:57:07
谢谢,全部完成! – 2010-07-25 15:08:36