Hy我在openGL-ES纹理方面遇到了一些问题。我在3ds max中创建了一个modell并使用了UV贴图,因为你可以看到here(第1张图片)有我的UV贴图。 没有UV贴图,我的纹理加载是“完美的”,但是使用UV贴图......(第2张图片here),请看转向架。
我从obj文件加载这个modell(转向架),我的代码或obj没有任何问题,因为它使用简单的纹理,也许我的loadtexture方法很糟糕,请检查它,或者做你有什么想法? 谢谢你的回答,我没有想法。
Loadtexture代码:
private int[] textures = new int[3];
public void loadtexture(GL10 gl, Context mContext, String map_source) {
try {
InputStream is = mContext.getAssets().open(map_source);
Bitmap bitmap = BitmapFactory.decodeStream(is);
is.close();
gl.glGenTextures(3, textures, 0);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
GL10.GL_NEAREST);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[1]);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
GL10.GL_LINEAR);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[2]);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
GL10.GL_LINEAR_MIPMAP_NEAREST);
if (gl instanceof GL11) {
gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_GENERATE_MIPMAP,
GL11.GL_TRUE);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
} else {
buildMipmap(gl, bitmap);
}
bitmap.recycle();
} catch (IOException e) {
// Should never happen
}
}
private void buildMipmap(GL10 gl, Bitmap bitmap) {
//
int level = 0;
//
int height = bitmap.getHeight();
int width = bitmap.getWidth();
//
while (height >= 1 || width >= 1) {
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, level, bitmap, 0);
//
if (height == 1 || width == 1) {
break;
}
// Increase the mipmap level
level++;
//
height /= 2;
width /= 2;
Bitmap bitmap2 = Bitmap.createScaledBitmap(bitmap, width, height,
true);
// Clean up
bitmap.recycle();
bitmap = bitmap2;
}
}
P.S。抱歉我的英文。
答案 0 :(得分:2)
private int[] textures = new int[3];
public void loadtexture(GL10 gl, Context mContext, String map_source) {
try {
InputStream is = mContext.getAssets().open(map_source);
Bitmap bitmap2 = BitmapFactory.decodeStream(is);
is.close();
Matrix flip = new Matrix();
flip.postScale(1f, -1f);
Bitmap bitmap = Bitmap.createBitmap(bitmap2, 0, 0, bitmap2.getWidth(), bitmap2.getHeight(), flip, true);
bitmap2.recycle();
... (same like before)
所以我把它垂直翻转,因为在opengl中加载地图有点不同。我希望我能帮助那些陷入同样问题的人。