小编kro*_*eml的帖子

GLSL ES中的统一与属性

我有一些参数从CPU传递到GPU,这些参数对于所有片段都是常量但在每一帧都有变化(我使用的是GLSL ES 1.1).我应该为这些价值观使用制服或属性吗?属性可以在顶点到顶点之间变化,因此我的直觉是使用在整个帧中保持不变的值的属性将是低效的.然而,我已经读过,制服是针对"相对不频繁"变化的价值,这表明在每一帧上更换制服可能效率低下.

在硬件方面,我最感兴趣的是优化iPhone 4S.

glsl fragment-shader opengl-es-1.1

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

在OpenGL ES 2.0中编写深度缓冲区/深度值的解决方法

我需要在Android设备(OpenGL ES 2.0)上写入深度缓冲区.由于gl_FragDepth在OGL ES 2.0下不可写,我必须找到一种解决方法.我实际上想通过光线投射渲染球体,类似于:http://www.sunsetlakesoftware.com/2011/05/08/enhancing-molecules-using-opengl-es-20.但是,本网站上解释的解决方案(屏幕外渲染通过使用特殊功能编写深度glBlendEquation)仅适用于Apple设备,而不适用于Android,因为GL_MIN_EXT不支持混合.

在我的Tegra3平板电脑上,我能够实现这种方法:Android GLES20.glBlendEquation无效?(顺便说一句,我建议使用线性化的深度值,它们会产生更好的结果!)它的效果非常好,但当然这只适用于Nvidia GPU.

从理论上讲,有扩展GL_EXT_frag_depth(参见OpenGL ES片段着色器可以改变片段的深度值吗?),但它在Android设备上也不可用.

最后,你当然可以只为一个球体编写深度缓冲区(在屏幕外渲染过程中),然后在第二个渲染过程中为下一个球体写入深度缓冲区,并在第三个渲染过程中将两者结合起来.这样做,你将有n*个球体的2*n + 1个渲染过程 - 这似乎是非常低效的!

因此,由于我的想法不多,我的问题是:你能想到在OpenGL ES 2.0 Android设备上编写深度缓冲区的另一种通用方式/解决方法吗?

android opengl-es-2.0

7
推荐指数
1
解决办法
2166
查看次数

如何在android中绘制球体

如何使用OpenGL ES在Android中绘制球体?

android opengl-es

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