草庐IT

android - OpenGL - 为什么 normalize() 不是幂等的?

我正在使用OpenGLES2.0用Ja​​va开发Android游戏。目前我正在编写自己的顶点和fragment着色器。我在fragment着色器中遇到了一个奇怪的问题:normalize(u_LightPos-v_Position)与normalize(normalize(u_LightPos-v_Position))是不同,其中u_LightPos是统一的,v_Position是变化的。为什么normalize()不是幂等的?为什么我必须调用它两次才能得到一个真正正常的(长度为1)向量?这非常令人困惑。编辑:这是顶点着色器:uniformmat4u_MVPMatrix;unifor

android - Android 上的 JOGL 与 OpenGL ES API。优点缺点

我们正在尝试将我们的项目从PC版本迁移到Android。PC版使用JOGL。谁能解释在Android应用程序中使用JOGL而不是OpenGLESAPI的主要优点?例如,JOGL的PCpro是:理论上您可以在任何平台上使用它。它或多或少与AWT、Swing和SWT集成在一起。此外,它还是某种包装器,因此理论上有一些抽象可以更轻松地使用OpenGL。但我看不到在Android中使用它的优点,从我的角度来看,这是缺点:它是另一个依赖,APK大小会更大。一些影响JOGL和OpenGLES的问题需要更多是时候查明并修复了。这不是不需要一些时间的Elixir重构,因为在Android中我们应该使用

Android OpenGL es 2.0 无法重新加载对象上的纹理。

多亏了这里提出的几个教程、问题和答案,我已经设法加载纹理并自由旋转球体,但我偶然发现需要在运行时重新加载纹理(获取位图图像,对其进行处理,然后将其作为对象的新纹理)。我没有为我的特定问题找到任何有效的解决方案(我已经阅读了所有相关的问题和答案)。我对OpenGL很陌生。这是我的第二个项目,我的第一个3D项目,也是我在这里提出的第一个问题。所以这里是:基本上纹理加载是在以下函数中完成的:publicvoidloadGLTexture(finalContextcontext,finalinttexture){GLES20.glGenTextures(1,mTextures,0);if(mT

android - 无法在三星设备上分配变量 [OpenGL ES]

在三星设备上编译模糊着色器失败并出现错误:无法分配变量着色器代码如下:#ifdefGL_ESprecisionmediumpfloat;#endifvaryingvec2v_texCoord;varyingvec2v_blurTexCoords[14];varyingvec2pixel_size;uniformvec2v_resolution;uniformsampler2Du_texture;uniformmat4u_projTrans;voidmain(){...}在其他设备上运行良好,三星设备可能有什么问题? 最佳答案 看起来

Android OpenGL ES 图像失真

我正在开发一个Android应用程序,它使用OpenGL在草地上渲染3D球。用户可以与球互动(通过触摸旋转球)。问题如下:在我的SamsungGalaxyS2上一切正常,但是当我在其他设备(HTCincredibleS、HTCsensation等)上尝试时,我在屏幕上看到一个带有多个裁剪视口(viewport)的扭曲图像(参见attachedimage)。我已经尝试了所有我能想到的方法:禁用纹理、禁用灯光等……似乎没有任何效果。我知道如果没有实际代码很难提供帮助,但我真的不知道代码的哪一部分导致了这个问题。所以我想问是否有人知道可能导致此问题的原因。我的猜测是与GLSurfaceVie

android - XML FrameLayout 降低了我的 OpenGL SurfaceView 帧速率 (fps)

我已经扩展了GLSurfaceView并实现了我自己的GLSurfaceView.Renderer来创建我的第一个相对简单的Android2DOpenGLES游戏。我一直在将表面View设置为内容View的ActivityonCreate方法上使用以下代码测试我的游戏,从中我获得了恒定的60fps。60fpsActivity:mGLView=newOpenGLTest1SurfaceView(this);setContentView(mGLView);但是现在我已经移动到XML布局,所以我可以在屏幕的右下角放置一个admob覆盖层,admobxml:admobActivity:setC

Android OpenGL ES 纹理大小 2 的幂

我已经知道许多硬件需要具有两倍大小的纹理。但是平方图像大小是强制性的吗?我的意思是32x3264x64512x512。我可以在每个硬件中使用512x256大小的纹理吗? 最佳答案 是的,纹理可以是非方形的,这没问题。只要您保持宽度和高度的二次方。 关于AndroidOpenGLES纹理大小2的幂,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/11510194/

android - OpenglES 2.0 PNG alpha 纹理重叠

我试图在屏幕上绘制多个具有alphachannel的六边形。图片是这样的:所以,我将纹理加载到程序中,没关系。当它运行时,alphachannel会与背景颜色混合,这没问题,但是当两个六边形自身重叠时,重叠部分会变成背景颜色!图片下方:当然,这不是我期望的效果。我希望它们重叠,而不是将此背景绘制在其他纹理上。这是我的绘图代码:GLES20.glUseProgram(Program);hVertex=GLES20.glGetAttribLocation(Program,"vPosition");hColor=GLES20.glGetUniformLocation(Program,"vCo

android - 安装并运行 - Android 上的 OpenGL ES 3.0

我刚刚看到有关OGLES3发布的消息。有些人知道在Android智能手机上安装它并使用它来开发3D应用程序是否已经可行?或者这只有到2013年才有可能?这是一篇关于它的文章:http://www.khronos.org/news/press/khronos-releases-opengl-es-3.0-specification欢迎所有评论。 最佳答案 假设您想要OpenGL的硬件加速上下文,如果目标硬件不支持特定版本的OpenGL,您不能简单地将它更新到下一个版本,因为驱动程序和硬件。

android - NDK OpenGL 未定义对 glVertexPointer 的引用

在终端中使用ndk-build编译以下C代码时(我正在运行Ubuntu):#include#include#include#include"org_opengldrawinjni_DrawinJNI.h"JNIEXPORTvoidJNICALLJava_org_opengldrawinjni_DrawinJNI_Draw(JNIEnv*envptr,jobjectjobj){GLfloatvertices[]={1.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.0};GLubyteindices[]={0,1,2};glVertexPointer(3,GL_FLOAT