我想将矩形地球纹理映射到球体上。我可以加载“globe.jpg”纹理并将其显示在屏幕上。我想我需要在特定纹理坐标处检索“globe.jpg”纹理的颜色,并使用它来为地球上的特定点着色。
我想将右中侧的地球地图映射到左侧的球体之一上(见图)
加载纹理的代码:
int texture;
public Texture() {
texture = LoadTexture("Content/globe.jpg");
}
public int LoadTexture(string file) {
Bitmap bitmap = new Bitmap(file);
int tex;
GL.Hint(HintTarget.PerspectiveCorrectionHint, HintMode.Nicest);
GL.GenTextures(1, out tex);
GL.BindTexture(TextureTarget.Texture2D, tex);
BitmapData data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, data.Width, data.Height, 0,
OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, data.Scan0);
bitmap.UnlockBits(data);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
//GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.Repeat);
//GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.Repeat);
return tex;
}
我还创建了一些代码,将球体上的一个点映射到我认为纹理上的一个点上(使用来自https://www.cs.unc.edu/~rademach/xroads上的纹理映射球体部分的代码-RT/RTarticle.html)。
我想我现在可以在我加载的纹理上使用这个 u 和 v 坐标来找到那里纹理的颜色。但我不知道怎么做。我也认为北极和赤道矢量不正确。
临摹微笑
相关分类