  
- #include <jni.h>
- #include <android/log.h>
- #include <GLES2/gl2.h>
- #include <GLES2/gl2ext.h>
- #include <GLES/gl.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- const GLfloat gTriangleVertices[] = {
- -0.5f, -0.5f, 0.5f,
- 0.5f, -0.5f,0.5f,
- 0.0f,-0.5f, 1.0f,
- 0.0f, 0.0f, 0.5f,
- };
- const GLfloat _colorArray[] = {
- 1.0f,0.0f,0.0f,1.0f,
- 0.0f,1.0f,0.0f,1.0f,
- 0.0f,0.0f,1.0f,1.0f,
- 1.0f,1.0f,1.0f,1.0f,
- };
- const GLbyte _indexArray[] = {
- 0,1,3,
- 0,2,1,
- 0,3,2,
- 1,2,3,
- };
- GLfloat _xAngle = 0.0f;
- GLfloat _yAngle = 0.0f;
- extern "C" {
- JNIEXPORT void JNICALL Java_com_geolo_android_MyRenderer_nativeSurfaceCreated(JNIEnv * env, jobject obj);
- JNIEXPORT void JNICALL Java_com_geolo_android_MyRenderer_nativeSurfaceChanged(JNIEnv * env, jobject obj, jint width, jint height);
- JNIEXPORT void JNICALL Java_com_geolo_android_MyRenderer_nativeDrawFrame(JNIEnv * env, jobject obj);
- JNIEXPORT void JNICALL Java_com_geolo_android_MyGLSurfaceView_setXYangle(JNIEnv * env, jobject obj,jfloat x , jfloat y);
- };
- JNIEXPORT void JNICALL Java_com_geolo_android_MyRenderer_nativeSurfaceCreated(JNIEnv * env, jobject obj){
-
- }
- JNIEXPORT void JNICALL Java_com_geolo_android_MyRenderer_nativeSurfaceChanged(JNIEnv * env, jobject obj,jint w,jint h){
- }
- JNIEXPORT void JNICALL Java_com_geolo_android_MyRenderer_nativeDrawFrame(JNIEnv * env, jobject obj){
- glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
- //glClear( GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
- // glVertexAttribPointer(3, 2, GL_FLOAT, GL_FALSE, 0, gTriangleVertices);
- // glColorAttribPointer(4 , GL_FLOAT , 0, _colorArray );
- // glDrawArrays(GL_TRIANGLES, 0, 3);
- glClear(GL_COLOR_BUFFER_BIT);
- //glLoadIdentity();
- glRotatef(_xAngle, 0.5f, 0.0f, 0.0f);
- glRotatef(_yAngle, 0.0f, 0.5f, 0.0f);
- //顶点
- glVertexPointer(3, GL_FLOAT, 0, gTriangleVertices);
- //顶点颜色
- glColorPointer(4, GL_FLOAT, 0, _colorArray);
- glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_BYTE, _indexArray);
- }
- JNIEXPORT void JNICALL Java_com_geolo_android_MyGLSurfaceView_setXYangle(JNIEnv * env, jobject obj,jfloat x , jfloat y){
- _xAngle = x;
- _yAngle = y;
- }
复制代码
第二重要的部分是: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(Java Native Interface)、XStream用于XML解析,以及自定义的GridView实现背景与内容同步滚动。下面我们将逐一探讨这些...
Android Studio NDK例子详解 Android Studio NDK是一个用于在Android平台上进行原生代码开发的工具集,它允许开发者使用C、C++等语言编写部分或全部应用,从而利用硬件的性能优势并提升运行效率。本示例库"android-...
纹理映射涉及到纹理坐标(UV坐标)的设定,以及将纹理与3D模型相结合的过程。 在Java与Native接口交互方面,可能采用了JNI(Java Native Interface)技术。JNI允许Java代码调用C/C++的库,以实现性能敏感的代码或...
OpenGL是跨语言、跨平台的图形程序接口,用于渲染2D、3D矢量图形,广泛应用于游戏开发、科学可视化、虚拟现实等领域。...这对于初学者理解Android与OpenGL的结合,以及进一步学习3D图形编程是非常有帮助的。
将OpenGL与Android结合,可以为Android应用带来丰富的图形界面和交互体验。 "NeHe的OpenGL教程"是一个经典的开源教程系列,由Jeffrey Lyndon(NeHe)创建,旨在教授初学者如何使用OpenGL编程。这些教程涵盖了从基础...
总之,"openglTestJni"项目提供了一个学习如何在Android应用中结合使用JNI和OpenGL ES的好例子。通过这个实例,开发者不仅可以了解OpenGL ES的基本用法,还能掌握JNI的使用技巧,从而在实际项目中实现高性能的图形...
总之,通过NDK和OpenGLES的结合,开发者可以充分利用硬件的图形处理能力,实现复杂的3D图形渲染。在这个例子中,我们将学习到如何创建本地库,编写OpenGLES渲染代码,以及通过JNI在Java和C++之间交互,最终实现立方...
- **第一个NDK项目**:通过创建一个简单的项目来演示如何将C/C++代码与Java代码结合。 - **多媒体处理**:介绍如何利用NDK来进行音频和视频处理。 ##### 第二部分:进阶篇 1. **性能优化** - **代码优化技巧**:...