[android-developers] Re: opengl 纹理映射
能贴一下代码吗? 图片也可以 On May 13, 8:31 pm, xiaofeng rwgcz...@163.com wrote: 原来色彩很清楚的图片贴在立方体表面后发黄? --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Android Developers group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~--~~~~--~~--~--~---
[android-developers] Re: opengl 纹理映射
你确定α价值? Yusuf T. Mobile 的看法,意见和声明此电子邮件是那些作者只是以个人身份,并不一定代表的T Mobile美国公司 On May 13, 7:30 am, Wendal Chen wendal1...@gmail.com wrote: 能贴一下代码吗? 图片也可以 On May 13, 8:31 pm, xiaofeng rwgcz...@163.com wrote: 原来色彩很清楚的图片贴在立方体表面后发黄? --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Android Developers group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~--~~~~--~~--~--~---
[android-developers] Re: opengl 纹理映射
this is my code!是不是loadTexture里有问题? protected static int loadTexture(GL10 gl,Bitmap bmp, boolean reverseRGB) { System.out.println(Eenter loadTexture in GLTutorialBase); int[] tmp_texture = new int[1]; gl.glGenTextures(1, tmp_texture, 0); int texture = tmp_texture[0] ;//QQ System.out.println(k=0 loadTexture 1 in GLTutorialBase); ByteBuffer bb = ByteBuffer.allocateDirect(bmp.getHeight() *bmp.getWidth()*4); bb.order(ByteOrder.BIG_ENDIAN); IntBuffer ib = bb.asIntBuffer(); System.out.println(k=0 loadTexture 2 in GLTutorialBase); for (int y=bmp.getHeight()-1;y-1;y--) for (int x=0;xbmp.getWidth();x++) { int pix = bmp.getPixel(x,bmp.getHeight()-y-1); // Convert ARGB - RGBA @SuppressWarnings(unused) byte alpha = (byte)((pix 24)0xFF); byte red = (byte)((pix 16)0xFF); byte green = (byte)((pix 8)0xFF); byte blue = (byte)((pix)0xFF); // It seems like alpha is currently broken in Android... ib.put(red 24 | green 16 | blue 8 | 0xFF);//255-alpha); } System.out.println(k=0 loadTexture 3 in GLTutorialBase); ib.position(0); bb.position(0); gl.glBindTexture(GL10.GL_TEXTURE_2D, texture); gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, bmp.getWidth(), bmp.getHeight(), 0, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, bb); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); tmp_texture=null; ib.position(0); bb.position(0); ib.clear(); bb.clear(); System.out.println(k =0 Leave loadTexture in GLTutorialBase); return texture; } protected void init(GL10 gl) { gl.glEnable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_LIGHT0); gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, lightAmbient, 0); gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, lightDiffuse, 0); gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, lightPos, 0); gl.glEnable(GL10.GL_DEPTH_TEST); gl.glClearDepthf(1.0f); gl.glEnable(GL10.GL_TEXTURE_2D); gl.glEnable(GL10.GL_CULL_FACE); gl.glEnable(GL10.GL_CULL_FACE) ; gl.glCullFace(GL10.GL_BACK); gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); gl.glClearDepthf(1.0f); gl.glVertexPointer(3, GL10.GL_FLOAT, 0, cubeBuff); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, texBuff); gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); gl.glShadeModel(GL10.GL_SMOOTH); tex = loadTexture(gl, bmp0); tex1 = loadTexture(gl, bmp1); tex2 = loadTexture(gl, bmp2); tex3 = loadTexture(gl,bmp3); gl.glFogf(GL10.GL_FOG_MODE, GL10.GL_EXP);; gl.glFogfv(GL10.GL_FOG_COLOR, fogColor, 0); gl.glFogf(GL10.GL_FOG_DENSITY, 0.75f); gl.glHint(GL10.GL_FOG_HINT, GL10.GL_DONT_CARE); gl.glFogf(GL10.GL_FOG_START, 1.0f); gl.glFogf(GL10.GL_FOG_END, 5.0f); gl.glEnable(GL10.GL_FOG); } protected void drawFrame(GL10 gl) { if (fog) { gl.glEnable(GL10.GL_FOG); } else { gl.glDisable(GL10.GL_FOG); } gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity(); GLU.gluLookAt(gl, 0, 0, 3, 0, 0, 0, 0, 1, 0); gl.glPushMatrix(); gl.glRotatef(yrot, 0, 1, 0); gl.glBindTexture(GL10.GL_TEXTURE_2D, tex); gl.glEnable(GL10.GL_TEXTURE_2D); gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_AMBIENT, matAmbient, 0); gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_DIFFUSE, matDiffuse, 0); gl.glVertexPointer(3, GL10.GL_FLOAT, 0, cubeBuff); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, texBuff); Log.d(TAG,before tBefore bind tex1); gl.glNormal3f(0,0,1); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
[android-developers] Re: opengl 纹理映射
now i found the problem is in the following code.Maybe the following process loses some important data;can give me some code about this? 现在我确定问题是在下面的对bmp图片作处理过程导致丢失了一些重要信息,或下面的算法有问题,有没有人有这方面的算法代码? ByteBuffer bb = ByteBuffer.allocateDirect(bmp.getHeight() *bmp.getWidth()*4); bb.order(ByteOrder.BIG_ENDIAN); IntBuffer ib = bb.asIntBuffer(); System.out.println(k=0 loadTexture 2 in GLTutorialBase); for (int y=bmp.getHeight()-1;y-1;y--) for (int x=0;xbmp.getWidth();x++) { int pix = bmp.getPixel(x,bmp.getHeight()-y-1); // Convert ARGB - RGBA @SuppressWarnings(unused) byte alpha = (byte)((pix 24)0xFF); byte red = (byte)((pix 16)0xFF); byte green = (byte)((pix 8)0xFF); byte blue = (byte)((pix)0xFF); // It seems like alpha is currently broken in Android... ib.put(red 24 | green 16 | blue 8 | 0xFF);//255-alpha); } System.out.println(k=0 loadTexture 3 in GLTutorialBase); ib.position(0); bb.position(0); On 5月14日, 上午11时50分, xiaofeng rwgcz...@163.com wrote: this is my code!是不是loadTexture里有问题? protected static int loadTexture(GL10 gl,Bitmap bmp, boolean reverseRGB) { System.out.println(Eenter loadTexture in GLTutorialBase); int[] tmp_texture = new int[1]; gl.glGenTextures(1, tmp_texture, 0); int texture = tmp_texture[0] ;//QQ System.out.println(k=0 loadTexture 1 in GLTutorialBase); ByteBuffer bb = ByteBuffer.allocateDirect(bmp.getHeight() *bmp.getWidth()*4); bb.order(ByteOrder.BIG_ENDIAN); IntBuffer ib = bb.asIntBuffer(); System.out.println(k=0 loadTexture 2 in GLTutorialBase); for (int y=bmp.getHeight()-1;y-1;y--) for (int x=0;xbmp.getWidth();x++) { int pix = bmp.getPixel(x,bmp.getHeight()-y-1); // Convert ARGB - RGBA @SuppressWarnings(unused) byte alpha = (byte)((pix 24)0xFF); byte red = (byte)((pix 16)0xFF); byte green = (byte)((pix 8)0xFF); byte blue = (byte)((pix)0xFF); // It seems like alpha is currently broken in Android... ib.put(red 24 | green 16 | blue 8 | 0xFF);//255-alpha); } System.out.println(k=0 loadTexture 3 in GLTutorialBase); ib.position(0); bb.position(0); gl.glBindTexture(GL10.GL_TEXTURE_2D, texture); gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, bmp.getWidth(), bmp.getHeight(), 0, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, bb); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); tmp_texture=null; ib.position(0); bb.position(0); ib.clear(); bb.clear(); System.out.println(k =0 Leave loadTexture in GLTutorialBase); return texture; } protected void init(GL10 gl) { gl.glEnable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_LIGHT0); gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, lightAmbient, 0); gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, lightDiffuse, 0); gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, lightPos, 0); gl.glEnable(GL10.GL_DEPTH_TEST); gl.glClearDepthf(1.0f); gl.glEnable(GL10.GL_TEXTURE_2D); gl.glEnable(GL10.GL_CULL_FACE); gl.glEnable(GL10.GL_CULL_FACE) ; gl.glCullFace(GL10.GL_BACK); gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); gl.glClearDepthf(1.0f); gl.glVertexPointer(3, GL10.GL_FLOAT, 0, cubeBuff); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, texBuff); gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); gl.glShadeModel(GL10.GL_SMOOTH); tex = loadTexture(gl, bmp0); tex1 = loadTexture(gl, bmp1); tex2 = loadTexture(gl, bmp2); tex3 = loadTexture(gl,bmp3); gl.glFogf(GL10.GL_FOG_MODE, GL10.GL_EXP);; gl.glFogfv(GL10.GL_FOG_COLOR, fogColor, 0); gl.glFogf(GL10.GL_FOG_DENSITY, 0.75f); gl.glHint(GL10.GL_FOG_HINT, GL10.GL_DONT_CARE); gl.glFogf(GL10.GL_FOG_START, 1.0f); gl.glFogf(GL10.GL_FOG_END, 5.0f);