标签: opengl-es

iPad上的3D旋转木马效果

我正在尝试在iPad上实现3D Carousel,包括UIViews,这里的效果就像这里所示.

我在SO上经历了许多类似的问题,但没有找到任何令人满意的答案或根本没有答案.

我试图通过修改coverflow动画来实现效果,但它只是没有给出光滑的效果.

有没有人实现过这个?(通过quartz和openGL打开建议)

opengl-es quartz-graphics ipad ios ios-4.2

13
推荐指数
2
解决办法
2万
查看次数

Android"cpu可能挂钩"的bug

前言:此严重错误可导致Android设备锁定(无法按Home/Back按钮,需要硬重置).它与OpenGL表面和音频播放相关联.Logcat重复了一些效果

W/SharedBufferStack( 398): waitForCondition(LockCondition) timed out (identity=9, status=0). CPU may be pegged. trying again.
Run Code Online (Sandbox Code Playgroud)

每秒一次,因此这个错误的名称.造成这种情况的根本原因可能是缓冲数据时的死锁,无论是声音还是图形.

我在Asus EEE Transformer平板电脑上测试我的应用时偶尔会遇到这个错误.当声音线程MediaPlayer使用填充对象MediaPlayer.create(context, R.raw.someid);并且GLSurface线程使用位图加载纹理时发生崩溃

Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(),
                R.drawable.textureMap,opts);
gl.glGenTextures(1, texAtlas, 0);
gl.glBindTexture(GL10.GL_TEXTURE_2D, texAtlas[0]);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
bitmap.recycle();
Run Code Online (Sandbox Code Playgroud)

我不认为原因是音频,因为音频实际上仍在播放(加载音频的线程然后在x时间后播放它).如果是这样,原因在于使用上述代码进行OpenGL ES缓冲.

相关材料

  • 这个SO帖子引用了这个bug.他们使用OpenGL ES 2.0和NDK.我使用OpenGL ES 1.1(虽然大多数设备模拟1.1到2.0,所以从技术上讲它们使用的是2.0)并且我不使用NDK.此外,他们使用Android 2.1,我的崩溃发生在Android 3.2.1上.
  • 该站点将错误链接到AudioTrack对象.但是,我不在我的应用程序中使用它.
  • Android Bug Tracker将此列为已知错误,但截至目前还没有解决方案(并且在Honeycomb +中没有修复).

共同元素

  • 缓冲时发生冻结.被缓冲的东西通常非常大,因此图像(图像越大则出现错误)或音频通常受到影响.
  • 冻结仅在某些设备上发生.
  • 冻结与特定的Android版本无关 - 已记录在2.1和3.2.1等等.
  • 冻结与使用NDK无关.
  • 冻结与单个编程习惯无关(缓冲顺序,文件类型等)

我的问题非常简单.这个问题有解决方法吗?如果你无法阻止它,有没有办法优雅地失败并防止整个设备被砖砌?

android opengl-es

13
推荐指数
1
解决办法
3350
查看次数

2D精灵的OpenGL ES阴影

我有一个用一堆精灵渲染的OpenGL场景,我想自动为它们添加阴影.这是一张显示我的意思的图片:

在此输入图像描述

场景使用正交投影,精灵是纹理四边形,我使用深度缓冲区从前到后绘制它们.我正在使用OpenGL ES 2.0,但是来自iOS或非ES世界的想法也会受到赞赏.我在脑子里想了几个关于如何解决这个问题的想法,我想知道哪个最有希望.

  1. 绘制每个精灵两次,第一次正常,第二次使用某种投影着色器在场景中更深一些.不确定这是否可行?
  2. 绘制一个精灵,然后再次绘制,变暗,并使用一些alpha,几次,并将一些随机抖动应用于顶点.这可能看起来很傻,完全不像阴影.
  3. 在没有背景的情况下绘制基础场景到纹理,然后模糊并使其变暗以创建一个大的投影.然后在阴影纹理上绘制基本场景,最后在背景上绘制.但是,这会失去精灵之间的阴影.
  4. SSAO在后处理过程中.可能是最动态和最自动的,但可能看起来模糊/颗粒状,真的很慢.
  5. 在创建时,为每个sprite生成阴影纹理.对于渲染,绘制一个精灵,然后在场景中绘制更深的阴影文本.我想我想避免这种情况,因为加载时间和额外的内存要求,但这可能是最快和最好看的?

我不想对外部纹理进行任何阴影处理,因为我在不同的比例下使用相同的精灵纹理,并且预先烘焙的阴影会不自然地缩放.

那么这些比其他更好吗?还有其他我没想过的选择吗?谢谢!

graphics android opengl-es ios

13
推荐指数
1
解决办法
4837
查看次数

如何在GLSL(OpenGL ES 2.0)中定义常量数组?

我只想存储每个片段计算所需的权重数组.

这个:

float weights[5] = float[5](3.4, 4.2, 5.0, 5.2, 1.1);
Run Code Online (Sandbox Code Playgroud)

只是抛出这个:

ERROR: 0:30: ']' : syntax error syntax error
ERROR: 0:30: ';' : syntax error syntax error
Run Code Online (Sandbox Code Playgroud)

iphone opengl-es glsl fragment-shader

13
推荐指数
2
解决办法
3万
查看次数

Android中SurfaceView和GLSurfaceView的区别

谁能告诉我SurfaceView和GLSurfaceView之间的基本区别是什么?我什么时候应该使用SurfaceView,何时应该使用GLSurfaceView?

我在Stack Overflow上阅读了一些已经回答的问题,但它们并不能满足我的疑问.

任何帮助,将不胜感激.

android opengl-es surfaceview

13
推荐指数
3
解决办法
2万
查看次数

用glReadPixels读取纹理字节?

我想将原始纹理数据转储到磁盘上(稍后再回读),我不确定glReadPixel会从当前绑定的纹理中读取.

如何从纹理中读取缓冲区?

textures opengl-es glreadpixels ios

13
推荐指数
1
解决办法
1万
查看次数

在x86 Linux上用C++编写的任何GLES示例?

我在X86的x86 Linux上寻找C++(或C)的GLES2样本的良好来源.我可以找到的样本都是针对iOS的Objective C,或针对Android的Java,或针对WebGL的JavaScript.Kronos网站有一个"教程"部分,其中包含两行"我们的教程索引将在此处".鉴于GLES2已有5年历史,我对那里的内容突然激增并不抱太大希望.

我已经非常了解OpenGL了.我真的想要一些方便的复制粘贴上下文设置代码源.我在哪里可以找到类似的东西?

linux opengl-es xorg opengl-es-2.0

13
推荐指数
2
解决办法
1万
查看次数

如何在GLSL(WebGL)中将int转换为float?

我的代码是(在void main中):

float res;

for(int i=0; i<15; i++) {

    res = float(i)/15.0;

    //...

}
Run Code Online (Sandbox Code Playgroud)

不幸的是我收到了语法错误 float(i)/15.0

如果我只是写i/15.0,那么错误是:

wrong operand types  no operation '/' exists that takes a left-hand operand of type 'mediump int' and a right operand of type 'const float' (or there is no acceptable conversion)
Run Code Online (Sandbox Code Playgroud)

如果我只是尝试i/15然后结果是一个整数,但我想得到一个浮点数.

这怎么可能投intfloat

opengl-es glsl webgl

13
推荐指数
1
解决办法
2万
查看次数

+(Class)layerClass不起作用

我正在构建一个OpenGL应用程序,并且在eaglview.m上+ (Class)layerClass无法工作.

如果我尝试运行它,我得到:

"Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_CAEAGLLayer", referenced from:
      objc-class-ref in GLView.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status"
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

iphone opengl-es objective-c

12
推荐指数
1
解决办法
3378
查看次数

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

到目前为止,我们已经能够成功地将静态OBJ文件(转换为.h)加载到我们的OpenGL应用程序中.

然后,我们可以将变换应用于这些对象,以便为它们设置动画.

我们项目的下一步是让专业的3D动画师在Maya中完成动画制作,并创建一个"Loader",使用OpenGL在3D中显示动画.

我们在网上找到了许多处理视频游戏和加载静态模型的例子,但我们的动画将由动画师完全预先定义,我们只需要加载它们.

重要的是要提到我们无法在视频中呈现它,因为我们正在AR库上构建它,这将让用户逐字地绕过动画,该部分已经解决,我们只需要使用OpenGL来渲染动画.

关于动画师用来从Maya导出的适当格式,我已经研究了这个问题.

.dae(COLLADA)文件格式似乎是封装模型和动画信息的好方法,并使用Assimp加载它但我们还没有找到为iOS或Android编译的这个加载器(这是我们正在开发的平台).

我们在网上推荐的另一种方法是导出一系列OBJ文件并为每个帧加载相应的OBJ.

我们看到的另一种方法是使用"引擎",但是有很多方法很难知道我们应该关注哪一个.

我们不介意支付引擎但我们怎么知道哪一个最好?

我们找到了这些例子,但我们没有看到明确的"赢家".

有没有人在iOS或Android设备上得到这样的东西?

你的建议是什么?

3d animation android opengl-es ios

12
推荐指数
1
解决办法
1696
查看次数