-
android opengl 点击正方形的一个面给出相应事件0
用OpenGL做的可旋转的正方形,有6个面,现在想做点击其中一个面,让我知道点的是谁,如何做呢?public class MyRender implements Renderer { public static float step = 15; boolean key; boolean light = true; public static float xrot, yrot; //x,y轴旋转 public static float xspeed, yspeed;//旋转的速度 private int one = 0x10000; private int[] textures = new int[1]; /** * @param context * 顶点及纹理 */ // verticesBuffer private IntBuffer verticesBuffer; // texcoordBuffer private IntBuffer texcoordBuffer; // 顶点数组vertices private int[] vertices; // 纹理数组texcoord private int[] texcoord; // 构造方法 public MyRender() { // 在构造方法中初始化 initData(); initBuffer(); } // 初始化各类值 public void initData() { vertices = new int[] { -one, -one, one, one, -one, one, -one, one, one, one, one, one, one, -one, one, one, -one, -one, one, one, one, one, one, -one, one, -one, -one, -one, -one, -one, one, one, -one, -one, one, -one, -one, -one, -one, -one, -one, one, -one, one, -one, -one, one, one, -one, one, -one, one, one, -one, -one, one, one, one, one, one, -one, -one, -one, -one, -one, one, one, -one, -one, one, -one, one }; texcoord = new int[] { 0, 0, one, 0, 0, one, one, one }; } public void initBuffer() { // verticesbyteBuffer ByteBuffer verticesbyteBuffer = ByteBuffer .allocateDirect(vertices.length * 4); verticesbyteBuffer.order(ByteOrder.nativeOrder()); verticesBuffer = verticesbyteBuffer.asIntBuffer(); verticesBuffer.put(vertices); verticesBuffer.position(0); // texcoordBuffer ByteBuffer texcoordbyteBuffer = ByteBuffer .allocateDirect(texcoord.length * 4 * 6); texcoordbyteBuffer.order(ByteOrder.nativeOrder()); texcoordBuffer = texcoordbyteBuffer.asIntBuffer(); for (int i = 0; i < 6; i++) { texcoordBuffer.put(texcoord); } texcoordBuffer.position(0); } @Override public void onDrawFrame(GL10 gl) { // 清除深度缓存和颜色 gl.glClear(GL10.GL_DEPTH_BUFFER_BIT | GL10.GL_COLOR_BUFFER_BIT); // 重置观察模型 gl.glLoadIdentity(); // 启用vertex及texcoord gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); // 向左移动1.5f并向里移动6.0f gl.glTranslatef(0.0f, 0.0f, -6.0f); //设置旋转 gl.glRotatef(MainActivity5.anglex, 0, 1, 0); gl.glRotatef(MainActivity5.angley, 1, 0, 0); // 指定顶点映射 gl.glVertexPointer(3, GL10.GL_FIXED, 0, verticesBuffer); // 指定纹理映射(每次都写错,烦) gl.glTexCoordPointer(2, GL10.GL_FIXED, 0, texcoordBuffer); for (int i = 0; i < 6; i++) { switch(i){ case 0: GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, BitGL.bitmapA, 0); break; case 1: GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, BitGL.bitmapB, 0); break; case 2: GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, BitGL.bitmapC, 0); break; case 3: GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, BitGL.bitmapD, 0); break; case 4: GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, BitGL.bitmapE, 0); break; case 5: GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, BitGL.bitmapF, 0); break; } gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, i * 4, 4); } // 取消顶点及纹理映射 gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY); gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); } @Override public void onSurfaceChanged(GL10 gl, int width, int height) { gl.glViewport(0, 0, width, height); float ratio = (float) width / height; gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10); // 设置观察模型 gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity(); } @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { // 告诉系统对透视进行修正 gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST); // 设置背景色为绿色 gl.glClearColor(0, 1, 0, 0); // 启用阴影平滑 gl.glShadeModel(GL10.GL_SMOOTH); // 设置深度缓存 gl.glClearDepthf(one); // 启用深度测试 gl.glEnable(GL10.GL_DEPTH_TEST); // 所做深度测试的类型 gl.glDepthFunc(GL10.GL_LEQUAL); // 启用纹理 gl.glEnable(GL10.GL_TEXTURE_2D); // 不启用没有效果的 // 创建纹理 gl.glGenTextures(1, textures, 0); // 绑定纹理 gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]); // 生成纹理 GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, BitGL.bitmapA, 0); // 线性滤波 gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,GL10.GL_LINEAR); gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,GL10.GL_LINEAR); } }
public class MainActivity5 extends Activity implements OnGestureListener { // 定义旋转角度 public static float anglex = 0f; public static float angley = 0f; static final float ROTATE_FACTOR = 60; // 定义手势检测器实例 GestureDetector detector; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 载入图片 BitGL.init(this.getResources()); // 创建一个GLSurfaceView,用于显示OpenGL绘制的图形 GLSurfaceView glView = new GLSurfaceView(this); // 创建GLSurfaceView的内容绘制器 MyRender myRender = new MyRender(); // 为GLSurfaceView设置绘制器 glView.setRenderer(myRender); setContentView(glView); // 创建手势检测器 detector = new GestureDetector(this); } @Override public boolean onTouchEvent(MotionEvent me) { // 将该Activity上的触碰事件交给GestureDetector处理 anglex = me.getX(); angley = me.getY(); return true; } @Override public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) { return true; } @Override public boolean onDown(MotionEvent arg0) { return false; } @Override public void onLongPress(MotionEvent event) { } @Override public boolean onScroll(MotionEvent event1, MotionEvent event2, float distanceX, float distanceY) { return false; } @Override public void onShowPress(MotionEvent event) { } @Override public boolean onSingleTapUp(MotionEvent event) { return false; } }
2014年10月15日 15:22
目前还没有答案
相关推荐
android openGL ES 2.0画等边三角形,正方形
在Android开发中,Native Development Kit (NDK) 是一个允许开发者使用C和C++编写代码的工具集,它能够提供更高的性能和更低级的硬件访问权限。本话题将深入探讨如何利用NDK和OpenGL ES在Android平台上实现正方形...
在Android平台上,OpenGL ES(OpenGL for Embedded Systems)被广泛使用,它是OpenGL的一个精简版,专门针对移动设备和嵌入式系统设计。在这个"android OpenGL 3D骰子"项目中,我们将探讨如何利用OpenGL ES在Android...
android OpenGL技术绘制一个旋转的3d立方体
在`lesson02`这个文件夹中,可能包含了一个简单的示例程序,演示了如何在OpenGL环境中绘制正方形和三角形。这个程序可能包括了初始化OpenGL上下文、设置视口和投影、定义顶点数据、绘制图形以及处理窗口事件的代码。...
本文将深入探讨如何将Android屏幕坐标转换为OpenGL ES坐标,并在点击屏幕特定位置时生成一个绘制的三角形。 首先,了解屏幕坐标系统和OpenGL ES坐标系统的差异至关重要。Android屏幕坐标系统以左上角为原点,X轴向...
这个"Android OpenGL的一个简单的例子.zip"文件包含了一个基本的Android OpenGL应用实例,帮助开发者了解如何在Android设备上使用OpenGL ES。 首先,我们需要了解OpenGL ES的基本概念。OpenGL ES是OpenGL的精简版,...
本篇文章将深入探讨如何使用OpenGL ES 绘制一个基本的正方形。 首先,我们需要理解OpenGL ES的工作原理。它是一个状态机,通过设置各种状态(如颜色、纹理、深度测试等)来控制渲染过程。然后,我们通过调用`...
一个基于OpenGL的Android游戏引擎通常包含以下几个核心组件: 1. **场景管理器**:负责组织游戏中的不同场景,如主菜单、游戏关卡等。 2. **时间管理**:处理游戏的帧率控制和定时事件。 3. **资源管理**:加载和...
为了在屏幕上绘制一个圆点,我们可以将其视为一个正方形,其边长等于我们希望圆点的直径。例如,如果我们想要一个10像素直径的圆点,我们可以创建一个10x10的方形,然后在中心位置绘制它。 但是,由于屏幕像素的...
Android OpenGL ES 提供了一个接口,让开发者能够利用硬件加速的图形处理能力,来绘制出立方体、球体、圆柱等几何形状。在这个场景中,我们看到描述中提到了几个关键的元素:几何形状类和renderer类。 1. **几何...
在“android OpenGL基础范例一”中,我们看到的是一个入门级别的示例,主要目标是展示如何使用OpenGL ES来创建和显示基本的几何图形,以及如何将文本与图形结合起来。这个例子中,开发者通常会通过以下步骤来实现: ...
对于初次接触OpenGL ES的Android开发者,构建一个简单的OpenGL ES应用通常遵循以下步骤: 1. **创建GLSurfaceView实例**:在布局XML文件中定义或通过代码动态创建`GLSurfaceView`。 2. **设置Renderer**:通过`...
opengl 旋转 正方形 很不错的
首先,要使用OpenGL ES,你需要在Android项目中添加相应的依赖。通常,这可以通过在build.gradle文件中引入`implementation 'androidx.opengles:opengl-es-utils:1.0.0'`来完成。确保你的项目支持JNI(Java Native ...
OpenGL(Open Graphics Library)是一个跨语言、跨平台的应用程序编程接口(API),用于渲染2D和3D矢量图形。它是由众多显卡厂商在1992年开发的一个标准,用于软件访问硬件加速的图形管线。OpenGL的API和开发流程是...
在Android上使用OpenGL ES 2.0,首先需要理解Android SDK中的GLSurfaceView类,它是为OpenGL ES渲染提供一个专用的SurfaceView,确保渲染在独立的线程中进行,避免阻塞UI主线程。开发者还需要创建一个GLSurfaceView....
一个在android opengl 上实现的 贝塞尔曲线
在Android平台上,OpenGL ES(OpenGL for Embedded Systems)被广泛使用,这是OpenGL的一个子集,专门针对移动设备等嵌入式系统优化。 #### Android与OpenGL的关系 Android系统为开发者提供了一个OpenGL ES的API库...
这是用androidOpenGL 实现的3D 动画 导入工程即可运行。