我现在能够将纹理加载到我制作的项目中,但它给了我一些我没想到的结果。而不是加载我的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对象,我将如何制作动画?当我希望它为界面绘制不同的图像时,我会交换新图像吗?我的位置图像在特定位置逻辑是否正确?或者这也非常不正确?
答案 0 :(得分:2)
技术上不是一个错误,但问题是在绘图函数中生成纹理名称和创建纹理对象。纹理创建是一次性的事情:
用于绘制实际纹理网格
在您的代码中,您将完成每次重绘的整个纹理创建阶段。最后创建的纹理也是绑定纹理,因此随后将应用于以下绘图调用。这将在下一次 onDrawFrame
的调用中发生旁注:您显然还没有理解矩阵堆栈是如何工作的。你混合了 glOrtho,glLoadIdentity,glTranslate 等的调用,没有任何明智的结构。你也需要了解那些straigt。甚至在你解决纹理问题之前我会说。