Hallo
Ich habe einen 3D Körper, ein Quader der hochkant steht und dassen Höhe : Breite/Tiefe = 2 : 1 ich will jede der SEITENflächen mit jeweils einer Textur die hochkant ist im Verhältnis y:x = 2:1 bedecken.Aber Es wird nicht jede Seite mit dieser Textur bedeckt, nein, es wird nur eine Seite bedeckt und die anderen bleiben leer. Die bedeckte Seite wird nicht etwa einfach mit der Textur bedeckt, die Textur wird vorher herunter sakaliert, dann wird die textur gedreht, sodass sie quer liegt, und mit diesen querliegenden bildchen die komplette Seite ausgefüllt.
Code:
Koordinaten(Objekt/Textur)
Die Koordinaten werden im Konstruktor noch in FloatBuffers gesteckt
private float[] vertices1 = {
// FRONT
-1.0f, -2.0f, 1.0f, // 0. left-bottom-front
1.0f, -2.0f, 1.0f, // 1. right-bottom-front
-1.0f, 2.0f, 1.0f, // 2. left-top-front
1.0f, 2.0f, 1.0f, // 3. right-top-front
// BACK
1.0f, -2.0f, -1.0f, // 6. right-bottom-back
-1.0f, -2.0f, -1.0f, // 4. left-bottom-back
1.0f, 2.0f, -1.0f, // 7. right-top-back
-1.0f, 2.0f, -1.0f, // 5. left-top-back
// LEFT
-1.0f, -2.0f, -1.0f, // 4. left-bottom-back
-1.0f, -2.0f, 1.0f, // 0. left-bottom-front
-1.0f, 2.0f, -1.0f, // 5. left-top-back
-1.0f, 2.0f, 1.0f, // 2. left-top-front
// RIGHT
1.0f, -2.0f, 1.0f, // 1. right-bottom-front
1.0f, -2.0f, -1.0f, // 6. right-bottom-back
1.0f, 2.0f, 1.0f, // 3. right-top-front
1.0f, 2.0f, -1.0f, // 7. right-top-back
// TOP
-1.0f, 2.0f, 1.0f, // 2. left-top-front
1.0f, 2.0f, 1.0f, // 3. right-top-front
-1.0f, 2.0f, -1.0f, // 5. left-top-back
1.0f, 2.0f, -1.0f, // 7. right-top-back
// BOTTOM
-1.0f, -2.0f, -1.0f, // 4. left-bottom-back
1.0f, -2.0f, -1.0f, // 6. right-bottom-back
-1.0f, -2.0f, 1.0f, // 0. left-bottom-front
1.0f, -2.0f, 1.0f // 1. right-bottom-front
};
float[][] texCoords = {
{-1.0f, -2.0f,
-1.0f, 2.0f,
1.0f, -2.0f,
1.0f, 2.0f},
{ 1.0f, -2.0f,
1.0f, 2.0f,
-1.0f, -2.0f,
-1.0f, 2.0f},
{-1.0f, -2.0f,
-1.0f, 2.0f,
-1.0f, -2.0f,
-1.0f, 2.0f},
{ 1.0f, -2.0f,
1.0f, 2.0f,
1.0f, -2.0f,
1.0f, 2.0f}
};
Laden der Textur:
Texture = loadBitmapFromResource(R.drawable.bild, context, true);
public Bitmap loadBitmapFromResource( int resourceID, Context context, boolean scaleToPO2 ) {
// pull in the resource
Bitmap bitmap = null;
Resources resources = context.getResources();
Drawable image = resources.getDrawable(resourceID);
float density = resources.getDisplayMetrics().density;
int originalWidth = (int)(image.getIntrinsicWidth() / density);
int originalHeight = (int)(image.getIntrinsicHeight() / density);
int powWidth = getNextHighestPO2( originalWidth );
int powHeight = getNextHighestPO2( originalHeight );
if ( scaleToPO2 ) {
image.setBounds( 0, 0, powWidth, powHeight );
} else {
image.setBounds( 0, 0, originalWidth, originalHeight );
}
bitmap = Bitmap.createBitmap( powWidth, powHeight, Bitmap.Config.ARGB_4444 );
Canvas canvas = new Canvas(bitmap);
bitmap.eraseColor(0);
image.draw( canvas ); // draw the image onto our bitmap
return bitmap;
}
public static int getNextHighestPO2( int n ) {
n -= 1;
n = n | (n >> 1);
n = n | (n >> 2);
n = n | (n >> 4);
n = n | (n >> 8);
n = n | (n >> 16);
n = n | (n >> 32);
return n + 1;
}
loadTexture(Texture, gl);
public void loadTexture(Bitmap texture, GL10 gl){
gl.glGenTextures(1, textures, 0);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,
GL10.GL_TEXTURE_MAG_FILTER,
GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,
GL10.GL_TEXTURE_MIN_FILTER,
GL10.GL_NEAREST);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, texture, 0);
}
Zeichnen
gl.glScalef(0.5f, 0.5f, 0.5f);
gl.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
gl.glFrontFace(GL10.GL_CCW);
gl.glEnable(GL10.GL_CULL_FACE);
gl.glCullFace(GL10.GL_BACK);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer1);
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, texBufferFront);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 4, 4);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 8, 4);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 12, 4);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 16, 4);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 20, 4);
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glDisable(GL10.GL_TEXTURE_2D);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisable(GL10.GL_CULL_FACE);