Android 中使用OpenGL ES进行2D开发(绘制矩形)
来源:互联网 发布:微信发淘宝优惠券 编辑:程序博客网 时间:2024/05/01 02:13
必须要先回顾下这张图,我们可以定义6个点,每3个点组成一个三角形,两个三角形组成一个矩形,但是搞计算机的总是懒或者说不喜欢重复的东西,我们也可以定义4个点,如右边的图案,V1,V2,V3组成一个三角形,然后V1,V3,V4组成另外一个三角形。
因为定义了4个点,所以我们需要更多的空间来储存来存储点了。下面是跟三角形代码不同的地方,用红色标出了。
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(4 * 2 * 4);
vertices.put( new float[] { -80f, -120f,
80f, -120f,
-80f, 120f,
80f,120f});
ByteBuffer indicesBuffer = ByteBuffer.allocateDirect(6 * 2);
indices.put(new short[] { 0, 1, 2,1,2,3});
gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 6, GL10.GL_UNSIGNED_SHORT, indices);
还是上矩形代码吧,示例比较重要
package com.waitingfy.android.glbasics;import java.nio.ByteBuffer;import java.nio.ByteOrder;import java.nio.FloatBuffer;import java.nio.ShortBuffer;import javax.microedition.khronos.egl.EGLConfig;import javax.microedition.khronos.opengles.GL10;import android.app.Activity;import android.opengl.GLSurfaceView;import android.opengl.GLSurfaceView.Renderer;import android.os.Bundle;import android.util.Log;import android.view.Window;import android.view.WindowManager;public class FirstRectangleTest extends Activity {public GLSurfaceView glView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 去掉activity的标题,全屏显示requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);glView = new GLSurfaceView(this);glView.setRenderer(new SimpleRenderer());setContentView(glView);}@Overridepublic void onResume() {super.onPause();glView.onResume();}@Overridepublic void onPause() {super.onPause();glView.onPause();}class SimpleRenderer implements Renderer {FloatBuffer vertices;ShortBuffer indices;public SimpleRenderer() {ByteBuffer byteBuffer = ByteBuffer.allocateDirect(4 * 2 * 4);byteBuffer.order(ByteOrder.nativeOrder());vertices = byteBuffer.asFloatBuffer();//定义四个点vertices.put( new float[] { -80f,-120f, 80f,-120f, -80f,120f, 80f,120f});ByteBuffer indicesBuffer = ByteBuffer.allocateDirect(6 * 2);indicesBuffer.order(ByteOrder.nativeOrder());indices = indicesBuffer.asShortBuffer();indices.put(new short[] { 0, 1, 2, 1, 2, 3 });//indices.flip() == indices.position(0)indices.flip();vertices.flip();}@Overridepublic void onSurfaceCreated(GL10 gl, EGLConfig config) {Log.d("GLSurfaceViewTest", "surface created");}@Overridepublic void onSurfaceChanged(GL10 gl, int width, int height) {Log.d("GLSurfaceViewTest", "surface changed: " + width + "x"+ height);}@Overridepublic void onDrawFrame(GL10 gl) {//定义显示在屏幕上的什么位置(opengl 自动转换)gl.glViewport(0, 0, glView.getWidth(), glView.getHeight());// gl.glViewport(50, 50,430, 550);gl.glClear(GL10.GL_COLOR_BUFFER_BIT);gl.glMatrixMode(GL10.GL_PROJECTION);gl.glLoadIdentity();//设置视锥体的大小,一个很扁的长方体gl.glOrthof(-160, 160, -240, 240, 1, -1);//颜色设置为红色gl.glColor4f(1, 0, 0, 1);gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);gl.glVertexPointer( 2, GL10.GL_FLOAT, 0, vertices); gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 6, GL10.GL_UNSIGNED_SHORT, indices);}}}
效果图和虚拟3D中的样子:
原文链接: http://www.waitingfy.com/?p=61
源码下载 gl-basics
- Android 中使用OpenGL ES进行2D开发(绘制矩形)
- Android 中使用OpenGL ES进行2D开发(绘制第一个三角形)
- Android 中使用OpenGL ES进行2D开发(绘制第一个三角形番外篇)
- Android 中使用OpenGL ES进行2D开发(纹理Texture使用)
- Android 中使用OpenGL ES进行2D开发(纹理Texture使用)
- Android 中使用OpenGL ES进行2D开发(介绍篇)
- Android 中使用OpenGL ES进行2D开发(GLSurfaceView)
- android游戏开发(OpenGL ES绘制矩形平面)
- OpenGL ES开发绘制2D图形
- iOS开发OpenGL ES教程(2)绘制矩形
- opengl|es - 2D绘制
- opengl|es - 2D绘制
- Android 3D开发,OpenGL ES 的使用(一)
- android studio | openGL es 3.0增强现实(AR)开发 (4) 绘制简单的2D图形、显示、旋转
- Android OpenGL ES 3D图形绘制
- 使用OpenGL ES绘制3D图形
- OpenGL ES绘制3D
- OpenGL ES 02 – 绘制图元 2 - 矩形
- 标准c++的类型转换符之间的区别(static_cast,dynamic_cast,const_cast,reinterpret_cast)(转载)
- 使用命令导入导出mysql数据表的记录
- 暗算经典台词
- 【iOS-cocos2d-X 游戏开发之三】游戏存储之Cocos2dX自带CCUserDefault类详解
- js时间+div浮动
- Android 中使用OpenGL ES进行2D开发(绘制矩形)
- Ubuntu 安装卸载软件命令,及出现没有可用软件包提示时的处理办法
- mysql和oracle相互转换工具Navicat_Premium
- POJ-3219(二项式系数奇偶性的判定准则)
- 如何在Ubuntu 7.10上实现C/C++开发环境
- 递归实现treview的数据绑定
- Linux 下Apache 和Tomcat 整合 mod_jk
- jQuery学习笔记之:创建插件
- 【iOS-cocos2d-X 游戏开发之四】使用Base64算法对Cocos2dX自带CCUserDefault游戏存储数据编码