Articles of opengl es

适用于Android的OpenGL ES中的透明纹理

我试图在opengl中设置四边形纹理的透明度,使用混合函数进行游戏并没有帮助他们在谷歌上做任何事情。 有什么建议么?

在同一着色器中混合具有不同坐标和大小的两个纹理

我的片段着色器中有两个不同坐标 和 大小的纹理: varying highp vec2 v_currentTextureCoords; varying highp vec2 v_backgroundTextureCoords; uniform sampler2D u_currentTexture; uniform sampler2D u_backgroundTexture; void main() { vec4 currentColor = texture2D(u_currentTexture, v_currentTextureCoords); vec4 backgroundColor = texture2D(u_backgroundTexture, v_backgroundTextureCoords); gl_FragColor = backgroundColor; } 这是相应的顶点着色器: attribute vec4 a_position; attribute vec2 a_currentTextureCoords; attribute vec2 a_backgroundTextureCoords; varying vec2 v_currentTextureCoords; varying vec2 v_backgroundTextureCoords; void main() { gl_Position = […]

使用Grafika CameraCapture代码拉伸Android相机预览

我正在寻找帮助解决我使用Grafika的CameraCaptureActivity代码所面临的问题。 我想构建一个可以记录相机并显示预览的应用程序,所以这个样本和代码看起来就像我想要的那样,到目前为止它很棒,这个问题appart。 我遇到的问题是,当相机预览尺寸与用于显示预览的GLSurfaceView的确切尺寸不匹配时,它会显示拉伸的预览。 这是它的外观: 你可以看到它是水平拉伸的,因为音符表是一个完美的正方形。 对于三星Galaxy S4的精确示例,相机预览尺寸为1280×720 (使用Camera2 API从可用的预览尺寸中提取), GLSurfaceView为1920×1080以覆盖整个屏幕。 什么时候出现? 当SurfaceView与Camera输出相比进行放大时,即使我始终确保比率保持正确( 1920×1080 = 1,5 * 1280×720 ),也会出现此问题。 你用的是什么代码? 我使用Grafika的代码,包括: CameraCaptureActivity AspectFrameLayout FullFrameRect Drawable2d EglCore EglBaseSurface 有些日志? 这是SurfaceFlinger转储的样子: Hardware Composer state (version 01030000): mDebugForceFakeVSync=0 Display[0] configurations (* current): * 0: 1080×1920, xdpi=442.450989, ydpi=439.351013, secure=1 refresh=16666667 numHwLayers=3, flags=00000000 type | handle | hint | flag | […]

视差XY和旋转 – 平铺计算

我有这个代码用于绘制我的视差背景 pGLState.pushModelViewGLMatrix(); final float cameraWidth = pCamera.getWidth(); final float cameraHeight = pCamera.getHeight(); final float shapeWidthScaled = this.mShape.getWidthScaled(); final float shapeHeightScaled = this.mShape.getHeightScaled(); //reposition float baseOffsetX = (pParallaxValueX * this.mParallaxFactorX); if (this.mRepeatX) { baseOffsetX = baseOffsetX % shapeWidthScaled; while(baseOffsetX > 0) { baseOffsetX -= shapeWidthScaled; } } float baseOffsetY = (pParallaxValueY * this.mParallaxFactorY); if (this.mRepeatY) { […]

Android 2.2 Webview导致OpenGL ES API没有当前上下文(每个线程记录一次)

首先,感谢您阅读这篇文章,并提前帮助我解决这个问题。 我正在为Android运行Webapps创建一个webshel​​l,它运行在Android 2.2 SDK上。 当我调试我的应用程序时出现问题(这是通过USB在Android 4.0手机上完成的): 09-28 11:32:32.415: D/dalvikvm(25629): Debugger has detached; object registry had 576 entries 09-28 11:32:36.355: W/ActivityThread(25764): Application com.android_api8_webshell is waiting for the debugger on port 8100… 09-28 11:32:36.375: I/System.out(25764): Sending WAIT chunk 09-28 11:32:36.380: I/dalvikvm(25764): Debugger is active 09-28 11:32:36.575: I/System.out(25764): Debugger has connected 09-28 11:32:36.575: I/System.out(25764): waiting for debugger to […]

GL壁纸示例仅显示模拟器中的绿色屏幕,但它在设备中工作

运行OpenGL应用程序是否需要任何特殊的模拟器设置? 我已经将“GPU仿真”属性设置为“是”。 我正在尝试使用从此链接中find的示例源运行Android示例动态壁纸,所需的输出是旋转三角形。 经过一点点的努力,我得到了应用程序运行,但它没有在模拟器中绘制任何东西,但是当我在设备中测试它工作,但在模拟器中它仍然只是显示绿屏,我在这里find了谷歌组中的讨论。 我试图设置视口如上所述。 但它仍然没有显示任何结果,表面改变我添加了这一行 gl.glViewport(0,0,width,height); 这是设置视口的正确方法吗? 这是我的渲染类, public class MyRenderer implements GLWallpaperService.Renderer { GLTriangle mTriangle; public void onDrawFrame(GL10 gl) { gl.glClearColor(0.2f, 0.4f, 0.2f, 1f); gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); gl.glMatrixMode(GL10.GL_MODELVIEW); autoRotate(gl); gl.glColor4f(.2f, 0f, .5f, 1f); mTriangle.draw(gl); } public void onSurfaceChanged(GL10 gl, int width, int height) { gl.glViewport(0, 0, width, height); gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); GLU.gluPerspective(gl, 60f, (float)width/(float)height, […]

使用具有curl/翻转效果的muPDF

我正在使用muPDF在我的应用程序中阅读PDF。 我不喜欢它的默认animation(水平切换)。 在另一方面,我发现这个辉煌的库对图像的curl效果, 这个项目的翻转翻盖效果布局。 在curl示例项目中,在CurlActivity ,所有数据都是图像并在PageProvider设置如下: private class PageProvider implements CurlView.PageProvider { // Bitmap resources. private int[] mBitmapIds = { R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4}; 并像这样使用它: private CurlView mCurlView; mCurlView = (CurlView) findViewById(R.id.curl); mCurlView.setPageProvider(new PageProvider()); CurlView从CurlView扩展并实现View.OnTouchListener, CurlRenderer.Observer 但是在muPDF中如果我没有弄错的话,数据就是core对象。 core是MuPDFCore实例。 并使用它像这样: MuPDFReaderView mDocView; MuPDFView pageView = (MuPDFView) mDocView.getDisplayedView(); mDocView.setAdapter(new MuPDFPageAdapter(this, this, core)); MuPDFReaderView扩展了ReaderView , ReaderView扩展了AdapterView并实现了GestureDetector.OnGestureListener, ScaleGestureDetector.OnScaleGestureListener, Runnable […]

用于2D精灵的OpenGL ES阴影

我有一个用一堆精灵渲染的OpenGL场景,我想自动为它们添加阴影。 这是一张显示我的意思的图片: 场景使用正交投影,精灵是纹理四边形,我使用深度缓冲区从前到后绘制它们。 我正在使用OpenGL ES 2.0,但是来自iOS或非ES世界的想法也会受到赞赏。 我在脑子里想了几个想法,我想知道哪个最有希望。 绘制每个精灵两次,第一次正常,第二次使用某种投影着色器在场景中更深一些。 不确定这是否可行? 绘制一个精灵,然后再次绘制,变暗并使用一些alpha,几次将一些随机抖动应用于顶点。 这可能看起来很傻,而且根本不像阴影。 将没有背景的基本场景绘制到纹理,然后模糊并使其变暗以创建一个大的投影。 然后在投影纹理上绘制基础场景,最后在背景上绘制。 但是,这会失去精灵之间的阴影。 SSAO在后处理过程中。 可能是最动态和自动的,但可能看起来模糊/颗粒状,真的慢下来。 在创建时,为每个sprite生成阴影纹理。 对于渲染,绘制一个精灵,然后在场景中绘制更深的阴影文本。 我想我想避免这种情况,因为加载时间和额外的内存需求,但这可能是最快和最好看的? 我不想对外部纹理进行任何阴影处理,因为我在不同的比例下使用相同的精灵纹理,并且预先烘焙的阴影会不自然地缩放。 那么这些比其他更好吗? 还有其他我没想过的选择吗? 谢谢!

Androidvideofilter

我正在尝试创建一个应用程序,我可以在录制的video中添加filter。 基本上,我想复制Instagramvideo或Viddy中存在的function。 我做过研究,我不能把它拼凑起来。 我已经研究过使用GLSurfaceView播放录制的video,我知道我可以使用NDK进行像素操作并将其发送回SurfaceView或以某种方式保存。 问题是,我不知道如何发送像素数据,因为似乎没有访问它的function。 这个想法来自Camera函数“onPreviewFrame”。 该函数返回一个字节数组,允许我操纵像素并显示它。 另一个想法是使用GLSurfaceView并使用OpenGL来渲染filter。 GLSurfaceView有一个你可以设置的渲染器,但我对OpenGL不是很熟悉。 但同样,这又回到了实际获取每个video帧的像素。 我还读到了将每个帧作为纹理进行翻录,然后在OpenGL中操作纹理,但我遇到的答案并不十分详细。 最后,我研究了JavaCV。 试图使用FFmpegFrameGrabber,但我也没有多少。 我想只抓一帧,但是当我尝试将帧的ByteBuffer写入ImageView时,我得到一个“不足以容纳像素的缓冲区”错误。 任何指导都会很棒。

建议在iOS和Android上将(非交互式)animation(使用Maya制作)加载到OpenGL ES中

到目前为止,我们已经能够成功地将静态OBJ文件(转换为.h)加载到我们的OpenGL应用程序中。 然后,我们可以将变换应用于这些对象,以便为它们设置animation。 我们项目的下一步是让专业的3Danimation师在Maya中制作animation,并创建一个“Loader”,使用OpenGL以3D方式显示它们。 我们在网上find了许多处理video游戏和加载静态模型的例子,但我们的animation将完全由animation师预先定义,我们只需要加载它们。 重要的是要提到我们无法在video中呈现它,因为我们正在AR库上构建它,这将让用户逐字地绕过animation,该部分已经解决,我们只需要使用OpenGL来渲染animation。 我已经研究过这个问题,关于animation师应该用来从Maya导出的适当格式。 .dae(COLLADA)文件格式似乎是封装模型和animation信息的好方法,并使用Assimp加载它但我们还没有find为iOS或Android编译的这个加载器(这是我们正在开发的平台)。 我们在网上推荐的另一种方法是导出一系列OBJ文件并为每个帧加载相应的OBJ。 我们看到的另一种方法是使用“引擎”,但是有很多方法很难知道我们应该关注哪一个。 我们不介意支付引擎费用,但我们怎么知道哪一个最适合? 我们find了这些例子 ,但我们没有看到明确的“赢家”。 有没有人在iOS或Android设备上得到这样的东西? 你的建议是什么?