代码如下 :
创建一个纹理对象
private void loadTexture(GL10 gl) {
InputStream bitmapStream = null;
Bitmap bitmap = null;
try {
// 打开图片资源流
bitmapStream = this.getResources().openRawResource(
R.drawable.ic_launcher);
// 解码图片生成 Bitmap 实例
bitmap = BitmapFactory.decodeStream(bitmapStream);
// 生成一个纹理对象,并将其ID保存到成员变量 texture 中
int[] textures = new int[1];
gl.glGenTextures(1, textures, 0);
texture = textures[0];
// 将生成的空纹理绑定到当前2D纹理通道
gl.glBindTexture(GL10.GL_TEXTURE_2D, texture);
// 设置2D纹理通道当前绑定的纹理的属性
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_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S,
GL10.GL_REPEAT);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T,
GL10.GL_REPEAT);
// 将bitmap应用到2D纹理通道当前绑定的纹理中
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
} finally {
if (bitmap != null)
bitmap.recycle();
if (bitmapStream != null) {
try {
bitmapStream.close();
} catch (IOException e) {
}
}
}
}public void draw(GL10 gl,int texture) {
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, fan_top);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glNormalPointer(GL10.GL_FLOAT, 0, fan_top);
gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);
gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, slices + 2);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, strip);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glNormalPointer(GL10.GL_FLOAT, 0, strip);
gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, (slices + 1) * 2 * stacks);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, fan_bottom);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glNormalPointer(GL10.GL_FLOAT, 0, fan_bottom);
gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);
gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, slices + 2);
// 开启纹理
gl.glEnable(GL10.GL_TEXTURE_2D);
// 允许使用纹理ST坐标缓冲
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
// 为画笔指定纹理ST坐标缓冲
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, fan_bottom);
}
但这样出来的效果不对,
效果图如下:
创建一个纹理对象
private void loadTexture(GL10 gl) {
InputStream bitmapStream = null;
Bitmap bitmap = null;
try {
// 打开图片资源流
bitmapStream = this.getResources().openRawResource(
R.drawable.ic_launcher);
// 解码图片生成 Bitmap 实例
bitmap = BitmapFactory.decodeStream(bitmapStream);
// 生成一个纹理对象,并将其ID保存到成员变量 texture 中
int[] textures = new int[1];
gl.glGenTextures(1, textures, 0);
texture = textures[0];
// 将生成的空纹理绑定到当前2D纹理通道
gl.glBindTexture(GL10.GL_TEXTURE_2D, texture);
// 设置2D纹理通道当前绑定的纹理的属性
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_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S,
GL10.GL_REPEAT);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T,
GL10.GL_REPEAT);
// 将bitmap应用到2D纹理通道当前绑定的纹理中
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
} finally {
if (bitmap != null)
bitmap.recycle();
if (bitmapStream != null) {
try {
bitmapStream.close();
} catch (IOException e) {
}
}
}
}public void draw(GL10 gl,int texture) {
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, fan_top);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glNormalPointer(GL10.GL_FLOAT, 0, fan_top);
gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);
gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, slices + 2);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, strip);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glNormalPointer(GL10.GL_FLOAT, 0, strip);
gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, (slices + 1) * 2 * stacks);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, fan_bottom);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glNormalPointer(GL10.GL_FLOAT, 0, fan_bottom);
gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);
gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, slices + 2);
// 开启纹理
gl.glEnable(GL10.GL_TEXTURE_2D);
// 允许使用纹理ST坐标缓冲
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
// 为画笔指定纹理ST坐标缓冲
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, fan_bottom);
}
但这样出来的效果不对,
效果图如下:
那图片的映射 怎么实现啊我要获得某点的像素值。