Android 3D学习之利用NDK绘制2D四边形
来源:互联网 发布:java子类重写父类权限 编辑:程序博客网 时间:2024/06/05 11:10
这是在Activity中的重要代码:
package com.ldj.hellondk;import android.app.Activity;import android.opengl.GLSurfaceView;import android.os.Bundle;public class HelloNDK extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); GLSurfaceView surface = new GLSurfaceView(this); surface.setRenderer(new NdkGLRenderer()); setContentView(surface); }static { //加载本地共享库 System.loadLibrary("NdkGLRenderer"); }}
这里面主要是创建一个GLSurfaceView对象且绑定渲染,并且加载了本地共享库。
接下来看NdkGLRenderer这个渲染类:
package com.ldj.hellondk;import javax.microedition.khronos.egl.EGLConfig;import javax.microedition.khronos.opengles.GL10;import android.opengl.GLSurfaceView.Renderer;public class NdkGLRenderer implements Renderer {/* * 声明了三个本地方法并且在Java中调用 * */native private void onNdkSurfaceCreated ();native private void onNdkSurfaceChanged (int width, int height);native private void onNdkDrawFrame ();public void onDrawFrame(GL10 gl) {onNdkDrawFrame (); }public void onSurfaceChanged(GL10 gl, int width, int height) {onNdkSurfaceChanged (width, height);}public void onSurfaceCreated(GL10 gl, EGLConfig config) {onNdkSurfaceCreated ();}}
接下来就是这三个本地方法的实现了,hello-ndk.c:
#include <jni.h>#include <GLES/gl.h>unsigned int vbo[2];float positions[12] = {1,-1,0, 1,1,0, -1,-1,0, -1,1,0};short indices [4] = {0,1,2,3};void Java_com_ldj_hellondk_NdkGLRenderer_onNdkSurfaceCreated (JNIEnv* env, jobject obj){ //生成两个缓存区对象 glGenBuffers (2, vbo); //绑定第一个缓存对象 glBindBuffer (GL_ARRAY_BUFFER, vbo[0]); //创建和初始化第一个缓存区对象的数据 glBufferData (GL_ARRAY_BUFFER, 4*12, positions, GL_STATIC_DRAW); //绑定第二个缓存对象 glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, vbo[1]); //创建和初始化第二个缓存区对象的数据 glBufferData (GL_ELEMENT_ARRAY_BUFFER, 2*4, indices, GL_STATIC_DRAW); }void Java_com_ldj_hellondk_NdkGLRenderer_onNdkSurfaceChanged (JNIEnv* env, jobject obj, jint width, jint height){ //图形最终显示到屏幕的区域的位置、长和宽 glViewport (0,0,width,height); //指定矩阵 glMatrixMode (GL_PROJECTION); //将当前的矩阵设置为glMatrixMode指定的矩阵 glLoadIdentity (); glOrthof (-2, 2, -2, 2, -2, 2);} void Java_com_ldj_hellondk_NdkGLRenderer_onNdkDrawFrame (JNIEnv* env, jobject obj){ //启用顶点设置功能,之后必须要关闭功能 glEnableClientState (GL_VERTEX_ARRAY); //清屏 glClearColor (0,0,1,1); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode (GL_MODELVIEW); glLoadIdentity (); glBindBuffer (GL_ARRAY_BUFFER, vbo[0]); //定义顶点坐标 glVertexPointer (3, GL_FLOAT, 0, 0); glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, vbo[1]); //按照参数给定的值绘制图形 glDrawElements (GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_SHORT, 0); //关闭顶点设置功能 glDisableClientState(GL_VERTEX_ARRAY); }
代码中的注释应该是比较详细的,和用Java来实现此功能的代码其实还是差不多的,
最后在Android.mk中告诉NDK需要编译哪些文件,生成哪些模块。
本文的源程序下载地址:http://download.csdn.net/source/3154085
利用ndk-build命令编译jni里的文件,然后运行程序你就回得到如下效果图:
转贴:http://blog.csdn.net/ldj299/article/details/6299232
- Android 3D学习之利用NDK绘制2D四边形
- Android 3D学习之利用NDK绘制2D四边形
- 在3D空间中绘制四边形
- Android 3D 游戏学习笔记(2)-绘制方法
- 绘制2D学习一
- Android 绘制2D图形
- Android 绘制2D图形
- Android 2D图形绘制
- (十)利用processing绘制3D图形
- 安卓中绘制2D、3D图形
- SDL游戏之路(八)--android+sdl+ndk+3d
- 初学Android,OpenGL ES之绘制3D图形(八十二)
- Android OpenGL与3D应用开发之3D图形绘制
- maya之3d paint tool(3d绘制工具)
- android学习笔记之3D---多边形
- android学习笔记之3D---多边形
- android学习笔记之3D---多边形
- 2D/1D动态规划的四边形优化
- 快速排序
- webservice Server Error in '/' Application 本地调试没错,服务器上就错误的解决方法
- 基于XMPP的IM研究
- Ruby Net::HTTP cheat sheet
- UVa 443 - Humble Numbers
- Android 3D学习之利用NDK绘制2D四边形
- 基于XMPP协议的Android IM研究一
- boost下载安装编译指南(windows 和 linux)
- 基于XMPP协议的Android IM研究二
- 策略模式(Strategy) 1
- 策略模式(Strategy) 2
- 摘自林少波的《毕业5年决定你的一生》,有部分修改
- 娱乐象棋对局
- Linux库的安装