`

Android 3D与JNI结合的小例子【转】

阅读更多

91385_1300104753Q4k3.gifQQ截图未命名2.pngQQ截图未命名.pngQQ截图未命名3.png 

  1.         #include <jni.h>
  2.         #include <android/log.h>

  3.         #include <GLES2/gl2.h>
  4.         #include <GLES2/gl2ext.h>
  5.         #include <GLES/gl.h>

  6.         #include <stdio.h>
  7.         #include <stdlib.h>
  8.         #include <math.h>


  9.         const GLfloat gTriangleVertices[] = {
  10.                 -0.5f, -0.5f, 0.5f,
  11.                 0.5f, -0.5f,0.5f,
  12.                 0.0f,-0.5f, 1.0f,
  13.                 0.0f, 0.0f, 0.5f,
  14.         };

  15.         const GLfloat _colorArray[] = {
  16.                         1.0f,0.0f,0.0f,1.0f,
  17.                         0.0f,1.0f,0.0f,1.0f,
  18.                         0.0f,0.0f,1.0f,1.0f,
  19.                         1.0f,1.0f,1.0f,1.0f,
  20.           };

  21.         const GLbyte _indexArray[] = {
  22.                                         0,1,3,
  23.                                         0,2,1,
  24.                                         0,3,2,
  25.                                         1,2,3,
  26.         };

  27.          GLfloat _xAngle = 0.0f;
  28.          GLfloat _yAngle = 0.0f;

  29.         extern "C" {
  30.                 JNIEXPORT void JNICALL Java_com_geolo_android_MyRenderer_nativeSurfaceCreated(JNIEnv * env, jobject obj);
  31.                 JNIEXPORT void JNICALL Java_com_geolo_android_MyRenderer_nativeSurfaceChanged(JNIEnv * env, jobject obj,  jint width, jint height);
  32.                 JNIEXPORT void JNICALL Java_com_geolo_android_MyRenderer_nativeDrawFrame(JNIEnv * env, jobject obj);
  33.                 JNIEXPORT void JNICALL Java_com_geolo_android_MyGLSurfaceView_setXYangle(JNIEnv * env, jobject obj,jfloat x , jfloat y);
  34.         };

  35.         JNIEXPORT void JNICALL Java_com_geolo_android_MyRenderer_nativeSurfaceCreated(JNIEnv * env, jobject obj){
  36.                 
  37.         }

  38.         JNIEXPORT void JNICALL Java_com_geolo_android_MyRenderer_nativeSurfaceChanged(JNIEnv * env, jobject obj,jint w,jint h){

  39.         }

  40.         JNIEXPORT void JNICALL Java_com_geolo_android_MyRenderer_nativeDrawFrame(JNIEnv * env, jobject obj){
  41.                 glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  42.                 //glClear( GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
  43.            // glVertexAttribPointer(3, 2, GL_FLOAT, GL_FALSE, 0, gTriangleVertices);
  44.            // glColorAttribPointer(4 , GL_FLOAT , 0, _colorArray );
  45.            // glDrawArrays(GL_TRIANGLES, 0, 3);

  46.            glClear(GL_COLOR_BUFFER_BIT);
  47.        //glLoadIdentity();

  48.            glRotatef(_xAngle, 0.5f, 0.0f, 0.0f);
  49.            glRotatef(_yAngle, 0.0f, 0.5f, 0.0f);

  50.            //顶点
  51.            glVertexPointer(3, GL_FLOAT, 0, gTriangleVertices);

  52.            //顶点颜色
  53.            glColorPointer(4, GL_FLOAT, 0, _colorArray);


  54.            glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_BYTE, _indexArray);
  55.         }

  56.         JNIEXPORT void JNICALL Java_com_geolo_android_MyGLSurfaceView_setXYangle(JNIEnv * env, jobject obj,jfloat x , jfloat y){
  57.            _xAngle = x;
  58.        _yAngle = y;
  59.         }
复制代码



第二重要的部分是:Android.mk


view plaincopy to clipboardprint?


  • # Copyright (C) 2009 The Android Open Source Project
  • #
  • # Licensed under the Apache License, Version 2.0 (the "License");
  • # you may not use this file except in compliance with the License.
  • # You may obtain a copy of the License at
  • #
  • #      http://www.apache.org/licenses/LICENSE-2.0
  • #
  • # Unless required by applicable law or agreed to in writing, software
  • # distributed under the License is distributed on an "AS IS" BASIS,
  • # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  • # See the License for the specific language governing permissions and
  • # limitations under the License.
  • #
  • LOCAL_PATH:= $(call my-dir)  
  • include $(CLEAR_VARS)  
  • LOCAL_MODULE    := Geolo3D  
  • LOCAL_CFLAGS    := -Werror  
  • LOCAL_SRC_FILES := NativeRenderer.cpp  
  • LOCAL_LDLIBS    := -llog -lGLESv2 -lGLESv1_CM -ldl  
  • include $(BUILD_SHARED_LIBRARY)  


其中Android.mk重要的部分是:LOCAL_LDLIBS    := -llog -lGLESv2 -lGLESv1_CM -ldl

比如,如果没有-ldl 是不能在C/C++中调用   glVertexPointer(3, GL_FLOAT, 0, gTriangleVertices);和

glColorPointer(4, GL_FLOAT, 0, _colorArray);

-ldl是个函数库,我没有这方面的资料文档,如果那个哥们有这些文档,请发给我,geolo@vip.qq.com。谢谢。。。




 geolo.OpenGL.JNI.rar (73.9 KB, 下载次数: 23) 

分享到:
评论

相关推荐

    Android JNI串口通讯【实战例子】

    Android JNI串口通讯【实战例子】 学习NDK开发很好的例子,也可以直接用在项目中

    serial_jni_largestgle_Androidjni_Android串口操作JNI代码_android_

    它涵盖了JNI编程、Android NDK开发、原生代码与Java代码的交互、串口通信协议以及Android权限管理等多个方面的知识。对于需要进行Android硬件扩展或进行嵌入式开发的工程师来说,这是一个非常有价值的参考案例。

    安卓串口Socket通讯USB驱动jni相关-Android中调用JNI例子.rar

    这个压缩包“安卓串口Socket通讯USB驱动jni相关-Android中调用JNI例子.rar”似乎包含了一个示例项目,展示了如何在Android应用中使用JNI来实现串口、Socket通信以及USB驱动的交互。以下将详细介绍这些知识点。 1. *...

    android通过JNI访问硬件LED

    2. **Android与JNI**: 在Android系统中,JNI被广泛用于提高性能、访问底层硬件和利用已有的C/C++库。由于Android的Dalvik/ART虚拟机支持JNI,所以开发者可以创建本地库,然后在Android应用中通过JNI接口调用。 3....

    Android中调用JNI例子

    在Android开发中,JNI(Java Native Interface)是...通过这个简单的例子,你了解了如何在Android应用中利用JNI调用C++代码。随着对JNI的深入理解,你可以在需要的地方充分利用C++的优势,提高应用性能或实现特定功能。

    Android--JNI-Device.zip_Android jni_android_jni_jni android

    2. **Android与JNI**:在Android系统中,JNI特别有用,因为它允许开发者用C/C++编写性能敏感的部分,例如底层的硬件驱动、图形渲染等,这些部分在Java中可能无法达到最佳性能。Android SDK提供了工具和库来支持JNI...

    android JNI小例子

    这个"android JNI小例子"旨在提供一个基础的实践教程,帮助开发者理解如何在Android应用中使用JNI技术。 JNI的核心功能是为Java应用程序提供了一种方式来调用本地(native)代码,也就是用C、C++或其他非Java语言...

    关于JNI的小例子 实现java与C++的方法互调

    本教程将通过一个小例子,详细介绍如何使用JNI实现Java与C++方法的互调。 首先,我们需要在Java层定义一个native方法。在Java中,我们可以使用`native`关键字声明一个方法,但不提供具体实现,如下所示: ```java ...

    在Android中的jni里使用OpenGL ES和OpenCV渲染一幅图片

    这个特定的项目旨在通过JNI调用来结合这两个强大的库——OpenGL ES用于图形渲染,OpenCV用于图像处理,从而在Android设备上显示一幅图片。 OpenGL ES是OpenGL的嵌入式版本,主要用于移动设备和嵌入式系统。它是...

    Android JNI 用C函数写本地库读写文件,底层调用小例子

    这个小例子展示了如何使用JNI和C语言来创建一个本地库,用于执行文件的读写操作,从而实现底层的高效控制。下面将详细阐述Android JNI、C语言在Android中的应用以及如何实现文件的读写。 首先,我们需要了解JNI的...

    AndroidStudio加载jni

    在Android开发中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他语言写的代码进行交互。JNI在很多场景下是必要的,比如优化性能、利用硬件特性、调用C/C++库或者与第三方库集成。Android ...

    Android JNI图像处理经典例子

    总之,Android JNI图像处理经典例子提供了一个学习如何结合Java和C/C++来优化图像处理流程的平台。通过这种方式,开发者能够提升应用的性能,尤其是在处理大量图像数据时,同时还能深入理解Android的跨语言编程。...

    Android 深入研究JNI详解

    #### 一、JNI与Android中的.so库载入 在深入了解JNI(Java Native Interface)之前,我们需要明确一点:Android应用程序的主要部分是基于Java开发的,并且这些Java类会被编译成Dex格式的字节码,然后在Dalvik虚拟机...

    Android使用JNI的代码例子

    在Android开发中,JNI(Java ...通过以上步骤,你已经了解了如何在Android应用中引入和使用JNI,以及如何结合socket进行网络通信。记住,使用JNI时需要注意内存管理和线程同步问题,避免出现潜在的内存泄漏或数据竞争。

    Androidstudio调用jni的示例

    在Android开发中,JNI(Java Native Interface)是一个关键的组件,允许Java代码和其他语言写的代码进行交互。这个“Androidstudio调用jni的示例”是一个基础教程,旨在帮助初学者理解如何在Android Studio项目中...

    Android 2.3截屏JNI代码

    Android 2.3中的截屏功能可以通过JNI(Java Native Interface)来实现,这是一种在Java程序中调用本地(C/C++)代码的技术。JNI允许开发者利用Java的跨平台特性,同时利用C/C++的强大性能和低级别操作能力。在这个场景下...

    Android通过JNI调用.so动态库

    通过 JNI,我们可以在 Android 项目中调用.so 动态库中的 C/C++ 方法,实现与 native 代码的交互。 首先,我们需要在 Eclipse 中创建一个 Android 项目,并在项目中创建一个 Java 类,例如 TestJNI.java。这个类中...

    AIDL和JNI使用的小例子

    总结一下,本示例提供的`testndk`项目是一个结合使用AIDL和JNI的实践案例,展示了如何在Android应用中进行跨进程通信并利用C/C++代码提升性能。通过阅读源码和配合博客文章,你可以深入理解这两种技术的工作原理和...

    Android下JNI和HAL技术

    在Android系统中,JNI和HAL结合使用,使得应用程序能够更高效地与设备硬件交互。例如,在处理3G通信时,应用程序层(APP:Phone)通过Java调用framework层的telephony java代码,该代码又通过JNI调用底层的C语言实现...

    Android NDK JNI 经典实例

    Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例

Global site tag (gtag.js) - Google Analytics