我正在尝试在Android上学习OpenGL ES 2.0,但在所有教程中我都看到人们在Renderer本身(或onSurfaceCreate()方法)中创建了FloatBuffers和Textures。
就我个人而言,我认为所有这些东西都必须在Renderer类中才真的很难看。我宁愿在GLSurfaceView.Renderer中使用Draw(Sprite sprite)方法,以便Sprite保存Texture和顶点数据。我只是不知道这是怎么可能的以及如何做到这一点。
有没有人对Sprite类有一个想法(或引用),它可以很容易地传递给渲染器并被绘制?
非常感谢,
基督教
答案 0 :(得分:0)
有两种方法可以做到这一点。一个人将拥有一个sprite接口,然后使用sprite对象创建具体的类。在该界面中,您只需要一种方法来获取纹理。
public interface Sprite {
public void createTexture();
public int getTexture();
}
public class MySprite implements Sprite {
private int[] spriteTexture = int[1];
public void createTexture() {
GLES20.glGenTextures(1, spriteTexture, 0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, spriteTexture[0]);
//Set your texture params
//Set your image to the texture
}
public int getTexture() {
return spriteTexture[0];
}
}
然后您在渲染器中的绘图代码只需访问所需的精灵。
//Setup program to draw with
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mySprite.getTexture());
//Rest of rendering code
另一种选择是将所有绘图代码放在Sprite类中,但由于Sprite之间的大部分内容都是相同的,你可能会以重复的代码结束,当然解决这个问题的方法之一就是拥有一个抽象的BaseSprite处理大多数绘图调用并访问Sprite纹理的类。
你的GLES20调用可以在代码中的任何地方生活,唯一需要考虑/记住的重要事情是你需要在调用它们之前创建opengl上下文,并且需要从同一个线程调用它们,因为每个线程得到它自己的背景。