Opengl es加载纹理,但现在一切都是纹理

时间:2011-09-04 15:45:38

标签: android opengl-es

我现在能够将纹理加载到我制作的项目中,但它给了我一些我没想到的结果。而不是加载我的91个瓷砖并让它们具有板条纹理,并且有一只小狗的照片是10x和10年,一切都是小狗。

这是我的抽奖代码

    @Override
public void onDrawFrame(GL10 gl) {

    // TODO Auto-generated method stub
       gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
       gl.glLoadIdentity();         
       for(int i =0;i<91;i++)
      {
              myfloortiles[i].draw(gl);
      }
       gl.glLoadIdentity();  
       gl.glOrthof(0, width, height, 0, 0, 1);
       gl.glDisable(GL10.GL_DEPTH_TEST);
      // gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
       gl.glTranslatef(10, 10, 1);
       bitmap=BitmapFactory.decodeResource(context.getResources(), R.drawable.puppy);
       int textureID;
       int[] temp = new int[1]; 
       gl.glGenTextures(1, temp, 0); 
       textureID = temp[0]; 
       gl.glBindTexture(GL10.GL_TEXTURE_2D, textureID); 
       gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, 
       GL10.GL_NEAREST); 
       gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, 
       GL10.GL_NEAREST); // GL_LINEAR for quality. 
       gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, 
       GL10.GL_CLAMP_TO_EDGE); 
       gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, 
       GL10.GL_CLAMP_TO_EDGE); 
       GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0); 
       bitmap.recycle(); 


}

当然,我必须做错事。是我必须制作一个3d对象然后渲染纹理吗?或者还有另一种方式吗?如果我选择带有纹理路径的3d对象,我将如何制作动画?当我希望它为界面绘制不同的图像时,我会交换新图像吗?我的位置图像在特定位置逻辑是否正确?或者这也非常不正确?

1 个答案:

答案 0 :(得分:2)

技术上不是一个错误,但问题是在绘图函数中生成纹理名称和创建纹理对象。纹理创建是一次性的事情:

  • 您生成一个纹理名称,这是一个稍后引用该纹理的句柄( glGenTextures
  • 绑定该名称( glBindTexture
  • 您上传图片( glTexImage 和/或 glTexSubImage

用于绘制实际纹理网格

  • 启用纹理(* glEnable(GL_TEXTURE_ ...)*)
  • 绑定纹理( glBindTexture
  • 绘制网格

在您的代码中,您将完成每次重绘的整个纹理创建阶段。最后创建的纹理也是绑定纹理,因此随后将应用于以下绘图调用。这将在下一次 onDrawFrame

的调用中发生

旁注:您显然还没有理解矩阵堆栈是如何工作的。你混合了 glOrtho,glLoadIdentity,glTranslate 等的调用,没有任何明智的结构。你也需要了解那些straigt。甚至在你解决纹理问题之前我会说。