我試圖創建一個可以紋理多個多維數據集的程序。我在着色方面很成功,但是面臨着一些貼圖的困難,主要是關於我的Android活動。使用Android上下文的OpenGL紋理
我不知道如何設置2個內容(或者甚至可能)或如何將渲染器設置爲我的原始setContentView(R.layout.activity_my_glsurface_view)
。
我需要這個以便在我的GLRenderer
中調用mCube.loadTexture(this.context, R.drawable.app_icon_your_company)
將我的紋理應用到我的立方體。我將在下面附上我的代碼,如果在Android中有另一種方法,請告訴我,但我遇到的所有教程都是這樣做的,而且我面臨同樣的問題。
下面是我的主要活動:
public class MainActivity extends Activity implements OnClickListener{
int TriData = (Triangle.triangleCoords.length)/Triangle.COORDS_PER_VERTEX;
int SquData = (Square.squareCoords.length)/Square.COORDS_PER_VERTEX;
int CubeData = Cube.COORDS_PER_VERTEX * 4;
int amount = CubeData;
private GLSurfaceView mGLView;
private TextView mText;
private Button mBTN;
@Override
public void onCreate (Bundle savedInstanceState){
super.onCreate(savedInstanceState);
// Create a GLSurfaceView instance and set it-altered glsurfaceview to contain GL elements
// as the ContentView for this Activity.
// mGLView = new MyGLSurfaceView(this);
setContentView(R.layout.activity_my_glsurface_view);
FrameLayout surface = (FrameLayout) findViewById(R.id.middleSurface);
surface.addView(new MyGLSurfaceView(this));
mGLView = new GLSurfaceView(this); //this is where my error occurs
mGLView.setRenderer(new MyGLRenderer(this));
setContentView(mGLView);
mBTN = (Button) findViewById(R.id.MyButton);
mBTN.setOnClickListener(MainActivity.this);
mText = (TextView) findViewById(R.id.MyGl);
mText.setText("Vertices drawn: " + amount + "\r\n" + "FPS: " + MyGLRenderer.FPS + "\r\n" + "Frametime: " + MyGLRenderer.FRAME_TIME_MILLIS + "\r\n" + "Cube Total: ");
}
@Override
public void onClick(View v) {
Intent push = new Intent(MainActivity.this, Test.class);
//where the 2nd in this case is the class you want to run.
startActivity(push);
}
}
我會包括我loadTexture
從我Cube.java
類以及:
public int loadTexture(final Context context, final int resourceId) {
//Get the texture from the Android resource directory
final int[] textureHandle = new int[1];
InputStream is = context.getResources().openRawResource(+ R.drawable.app_icon_your_company);
Bitmap bitmap = null;
try {
//BitmapFactory is an Android graphics utility for images
bitmap = BitmapFactory.decodeStream(is);
} finally {
//Always clear and close
try {
is.close();
is = null;
} catch (IOException e) {
}
}
//Generate one texture pointer...
GLES20.glGenTextures(1, textureHandle, 0);
//...and bind it to our array
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureHandle[0]);
//Create Nearest Filtered Texture
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
//Accounting for different texture parameters
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_REPEAT);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_REPEAT);
//Use the Android GLUtils to specify a two-dimensional texture image from our bitmap
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
//Clean up
bitmap.recycle();
if (textureHandle[0] == 0)
{
throw new RuntimeException("Error loading texture");
}
return textureHandle[0];
}