Articles of ndk

OBJ模型不能在OpenGL ES 2 android应用程序中正确渲染

我有一个Android OpenGL ES 2应用程序,使用Assimp加载.OBJ模型,并呈现相同。 顶点数据存储在一个声明如下的对象中: class CGameObject { public: struct _Mesh { std::string Name; // Name of Mesh std::vector<float> vertices; // vertices of Mesh GLuint m_vbo; // TODO: Add TEXTURE and MATERIAL support }; … } 设置各种matrix: cameraX = 3.0f; cameraY = 3.0f; cameraZ = 5.0f; // Camera/View matrix View = glm::lookAt( glm::vec3(cameraX, cameraY, cameraZ), […]

Android NDK – 将.so文件从一个项目移动到另一个项目

我有一个我为Android编写的小项目,它使用了一小部分NDK / JNI代码。 我想在两个项目之间分享这个代码,但到目前为止,我运气不大。 首先,我试图将NDK特定的代码重构成一个库,我认为它链接到两个项目使用 'project-> java build path-> source-> link source' 并在那里指定本地库。 听起来不错,但是这是错误的。 我重构代码的项目仍然需要.so库文件 MyOriginalProject \库\ armeabi \ MyNativeLibrary.so 从原始项目中删除,但仍然链接重构库的源失败。 其次,创建一个新项目并试图使用我写的NDK库,包括库的来源和复制.so文件从“obj”和“libs”到新项目的根目录失败。 似乎过去了 的System.loadLibrary( “MyNativeLibrary”) 至less,它没有断言。 代码得到了我的第一个NDK调用,然后崩溃,而不被我的exception处理程序捕获。 任何提示都会受到欢迎 – 比如NDK加载库的万无一失的方法,典型的陷阱和NDKdebugging技术。 提前致谢, 蒂姆。

在Mac中使用ndk编译irrlicht android时出错

我是新来irrlicht,我已经开始与irrlicht Android端口。 我对android.mk文件做了如下修改: LOCAL_CFLAGS := -O3 -DANDROID_NDK -DDISABLE_IMPORTGL -I./../include/ -I./include/ -I/documents/karthik/android/android-ndk-r9/platforms/android-18/arch-arm/usr/include LOCAL_LDLIBS := -L/documents/karthik/android/android-ndk-r9/platforms/android-14/arch-arm/usr/lib/libGLESv1_CM.so -ldl -llog -L/documents/karthik/android/android-ndk-r9/platforms/android-14/arch-arm/usr/lib/libGLESv1_CM.so 我已经尝试编译在terminal使用ndk-build编译irrlicht android。它首先显示以下错误: In static member function 'static void irr::os::Printer::log(const c8*, irr::ELOG_LEVEL)': error: format not a string literal and no format arguments [-Werror=format-security] In static member function 'static void irr::os::Printer::log(wchar_t const*, irr::ELOG_LEVEL)': error: format not a string literal and […]

在GLESv3 gl3.h中没有发生许多OpenGL声明

我在C ++中创建了一个小的OpenGL渲染器,我想移动到Android,所以我准备好了所有合适的平台的Eclipse,并创建一个Native Activity项目,然后将NDK添加到包含,并成功执行并运行一个颜色的屏幕样本,一旦我从C ++项目导入文件(复制到jni文件夹),并修复包括我发现许多GL声明不发生例如“function”glDrawBuffer'无法解决“,我打开了gl3.h文件,发现他们不会在该文件中发生,在我的桌面版本中,我使用glew库和文件glew.h包含所有这些定义,所以我试图从glew.h复制定义 GLAPI void GLAPIENTRY glDrawBuffer (GLenum mode); 到gl3.h GL_APICALL void GL_APIENTRY glDrawBuffer (GLenum mode); 但仍然有相同的错误。 这些函数和常量是不是发生在ES版本的OpenGL或我需要更新的东西? 我使用Android Builder创建了NDK r 15,SDK 22,Eclipse neo和GCC编译器。 编辑: 我在同一个文件中find了这个定义 GL_APICALL void GL_APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs); 我认为这是相同的function,但参数的数量不同,所以我可以猜测OpenGL和ES3之间有很多不同之处,所以相同的代码将不会运行,必须改变? 还有一个地方,我可以find等价的函数或常量?

将在NDK中加载的OpenGL纹理ID传回给java

是否有可能使用NDK加载纹理 ,但将结果传回到java中使用。 我已经在上面的链接中使用了代码,它似乎正确加载PNG并生成一个没有错误的纹理ID(在加载函数被调用之前,ID为0,之后非零)。 不允许在C ++和java之间混合使用opengl操作吗? 谢谢你的帮助一切顺利,灰

Android:一些纹理恢复两次后不加载

这是一个奇怪的。 当我按回家,然后重新开始我的游戏,我重新加载我所有的纹理(检查id的第一glIsTexture)。 如果我这样做了一次,所有纹理加载如预期,但如果我做了两次或更多我的纹理之一不加载(纹理是白色的)。 我检查了glGetError,并没有错误(假设GLES10.glGetError()是正确的方法) 当家庭被按下时,我是否需要做任何整理? 当onPause / Resume活动事件被触发时,我目前调用myGlView.onPause()和myGlView.onResume()。 我的印象是所有需要的。 还有什么(可能是非OpenGL),需要清理? 也许我正在达到某种限度 我也使用NDK的一些物理和渲染function,如果是相关的,但所有资源都使用Java加载。

如何在OpenGL ES 3.0中实现glDrawElementsBaseVertex

我想使用OpenGL ES3.0将简单的OpenGL项目转换为Android本地,其中没有实现的function之一是glDrawElementsBaseVertex ,我有一个VBO其中包含许多条目,并知道每个偏移量和大小,所以我怎么能实现这个function通过glDrawElements方法还是有另一种方法?

有没有办法在开发过程中设置一个大型资产的Android游戏项目,以便快速testing/迭代?

目前我正在开发iOS游戏的Android端口。 我只在Eclipse(CDT + ADT)中使用Android NDK(android_native_app_glue)。 我正在使用Android模拟器,API 15(但我们的目标是API9 +),因为我们还没有Android设备。 游戏拥有大约200-300mb的资产,我不确定如何正确地包含它们,或者如何进入快速的testing/debugging周期,附带资产。 现在,我将Android项目中的资源文件夹链接到包含游戏资源的资源文件夹。 这工作,但问题在于,当我建立它需要大约9-10分钟200mb .apk文件被安装到模拟器上。 当事情需要快速testing时,这是不能接受的。 如果我将这些资产从项目中剥离出来,安装起来非常快。 正因为如此,我现在正在剥离大部分资产来做我的testing,但是从长远来看,我需要一个更好的解决scheme。 我的问题是,有没有办法在开发过程中设置一个大型资源收集的Android游戏项目,以便快速testing/迭代? 例如。 快速部署或更新.apk以允许快速testing。

是否需要原生代码混淆来防止Android游戏的盗版?

用Java编写的Android应用程序的版权保护和执行是否足够,还是应该依靠本地实现来使用机器代码混淆技术来防止我的游戏被盗版? 请提供一个支持使用任何一种技术的游戏的例子的答案。

Android与SDL2

如何链接本机代码(它具有SDL_CreateWindow)与Java应用程序代码? 在我的情况下,有libSDL2.so ,也是我使用SDL的.so库。 我的method包含函数SDL_CreateWindow和SDL_Init 在Win32下(收集在DLL中)它的工作原理。 调用“方法”并创建一个新的窗口。 但是用同样的方法运行的方法,该函数工作,并没有抛出exception完成执行,但没有任何可见的出现 my.cpp int method(){ SDL_Init(SDL_INIT_EVERYTHING); window = SDL_CreateWindow("test!!!!!!!!!!!", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 600, 480, SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL); return 0; } #ifdef ANDROID extern "C" JNIEXPORT jint JNICALL Java_com_example_ni55an_ndktest_HelloClass_method(JNIEnv * env, jclass obj){ return (jint)method(); } #endif my.java static { System.loadLibrary("SDL2"); System.loadLibrary("proj"); } public native int method(); 对不起,我忘记了SDL_Init的validation。 初始化失败,我得到一个错误Application didn't initialize properly, […]