我正在学习Android开发,特别是最终在它上面做OpengL2.0ES。到目前为止,我了解到NDK支持Opengl2.0ES。但是,是否也有针对它的JavaAPI?如果有JavaAPI,推荐哪一个?我知道C++和Java,所以如果我必须使用NDK没什么大不了的,但我更愿意尽可能只使用Java,并且不会对性能造成太大影响。 最佳答案 是的,您可以在Java中使用OpenGLES2.0,而无需接触NDK。这是关于在Android中启动OpenGLES2.0的官方文档:http://developer.android.com/resou
我目前正在为一款游戏试用Android的OpenGLES2.0。我的map是一个二维网格map,每个位置都有一个高度值。现在我想将每个坐标的高度存储在纹理中,以便在顶点着色器中进行高度查找。这个想法的好处是我可以生成一个通用的三角网并将其(带有偏移量)放置在用户当前正在查看的map的位置上。由于偏移量,我可以省略每次用户移动其View位置和我将从纹理中读取的高度配置文件时创建新三角形网的需要。现在有很多当前的Android设备(甚至GalaxyS3)不支持顶点着色器中的纹理查找的问题。遗憾的是,这完全破坏了我目前的方法。我的问题:是否还有其他可能在顶点着色器中从显卡内存中获取数据?如果
我正在开发一个扭曲图像的Android应用程序。我正在使用opengl平移和缩放功能来扭曲图像。图像扭曲得很好。现在我想实现撤消功能。但无法实现该功能。任何人可以帮助如何在opengl中实现撤消功能。任何建议或代码都会有所帮助。提前致谢。 最佳答案 我怀疑命令模式不适合您的情况。这是基于我的假设,即使您知道应用了何种失真,也不容易扭转图像失真。相反,您可能需要在应用变形之前将图像压入堆栈。然后,撤消实现将用堆栈中的图像替换当前图像。这将导致由重做和撤消的组合引起的潜在有趣问题。您可以对此进行优化,为易于撤消的更改存储命令对象,为不易
我有一个使用OpenGLES2.0的Android应用程序。我需要从一个数组中绘制10条线,每条线都由起点和终点描述。所以有10行=20点=60个浮点值。所有点都没有连接,因此数组中的每一对点都与其他点无关,因此我使用GL_LINES进行绘制。我通过将值放入浮点缓冲区并像这样调用一些辅助代码来绘制它们:publicvoiddrawLines(FloatBuffervertexBuffer,floatlineWidth,intnumPoints,floatcolour[]){GLES20.glLineWidth(lineWidth);drawShape(vertexBuffer,GLES
我是OpenGL的新手。出于学术目的,我正在Android上制作色盲应用程序。我在着色器中拥有执行所需操作所需的所有代码,但我仍然必须让着色器能够看到我在Java代码中创建的数据。在我的Java代码中,我最终得到了一个大小为262144的大型int数组。我试图以任何可能的方式将这个数组传递到着色器中,但它太大了。我被告知,如果我将我的数据转换为纹理,我可以轻松地将这么多信息传递到着色器中。我已按照同事的指示将我的int数组转换为字节数组,但现在我不知道如何创建opengl纹理并将我的字节数据输入其中以供着色器查看和使用。因此,我需要创建一个opengl纹理,用我的数据填充它(字节数组最
如果我按下Android手机上的电源按钮(或等待它超时)并且手机进入休眠状态,在重新唤醒后,屏幕纵横比完全不正常。截图:坏了正确在GameActivity.onCreate()中//GrabdisplayinfoDisplayMetricsdm=newDisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);ACTUAL_SCREEN_WIDTH=(int)dm.widthPixels;ACTUAL_SCREEN_HEIGHT=(int)dm.heightPixels;ACTUAL_DENSITY=dm
编辑-添加更多代码尝试使用OpenGLES2.0正确旋转四边形时遇到很多问题。它似乎总是围绕屏幕坐标的中心旋转。我试图让它围绕它自己的中心旋转(对于2d,因此仅z轴)。我一直在试验Matrix.translate,如下所示。但是,在这里更改x或y位置只是将四边形绘制在屏幕上的不同位置,但是当它旋转时,它会再次围绕屏幕中心旋转。请有人解释一下如何让它绕着自己的z轴旋转(如轮子)?谢谢,这里是相关的代码行-如果需要更多,请询问,我会发布。(请注意,我在SO和更广泛的互联网上看过很多类似的问题,但到目前为止我还没有找到答案)。谢谢。//SetrotationMatrix.setRotateM
参数如何为它工作以及mProjMatrix从该方法中得到什么?另外,为什么“floatmProjMatrix=newfloat[16];”用16声明,我可以用另一个数字代替吗?floatmProjMatrix=newfloat[16];Matrix.frustumM(mProjMatrix,0,-ratio,ratio,-1,1,3,7); 最佳答案 视锥只是透视投影的一种视觉表示,用于将世界坐标空间中的3D点转换为屏幕上的2D点。有多种定义投影矩阵的方法(至少我个人使用过):通过指定6个裁剪平面通过指定纵横比、远近裁剪平面、视野角
我的游戏运行正常,但我按下主页按钮然后继续的情况除外。需要做什么才能再次使用纹理?我试过在GLSurfaceView上调用onPause和onResume(当调用Activity的onPause和onResume时)。知道我可能做错了什么吗? 最佳答案 如果一切都失败了,重新加载纹理:伪代码fortexintextures:ifglIsTexture(tex.opengl_name)==false:glGenTextures(1,&tex.opengl_name)glBindTexture(tex.texture_target);g
我正在Android上试验一些OpenGL,之前没有任何3D编程经验。所以很明显我在我的程序中犯了很多错误。当我遇到问题并发现glGetError产生错误代码时,我只是在每次调用绘图代码中的OpenGL命令后添加对glGetError的调用。虽然这行得通并且我以这种方式发现了我的错误,但我认为我的绘图代码现在是两倍大并且更难阅读。有没有办法摆脱所有这些对glGetError的显式调用并自动调用它?如果发生OpenGL错误,我的应用程序最好中止并显示错误指示哪个命令负责。 最佳答案 从4.2版开始,Android在手机的开发人员选项中