Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL ES 2.0通过共享c+在ios和android上进行抗锯齿或平滑处理+;代码_Android_C++_Ios_Opengl Es 2.0_Antialiasing - Fatal编程技术网

OpenGL ES 2.0通过共享c+在ios和android上进行抗锯齿或平滑处理+;代码

OpenGL ES 2.0通过共享c+在ios和android上进行抗锯齿或平滑处理+;代码,android,c++,ios,opengl-es-2.0,antialiasing,Android,C++,Ios,Opengl Es 2.0,Antialiasing,我对OpenGL和ES2.0相当陌生。我已经分享了C++ OpenGL ES2代码,我用它来绘制iOS和Android(用ndk CMake)…它基本上是有效的,但现在我需要抗锯齿,这有点让人困惑,我看到的解决方案依赖于平台,android端更让人困惑,而且有局限性。我一直在寻找解决方案,但需要更多的澄清 什么应该对两者都起作用: 显然,描述说 Renderbuffer对象本身也支持多采样(MSAA) 但ES2.0似乎并不支持这一点。iOS有自己的方法glrenderbufferstoragem

我对OpenGL和ES2.0相当陌生。我已经分享了C++ OpenGL ES2代码,我用它来绘制iOS和Android(用ndk CMake)…它基本上是有效的,但现在我需要抗锯齿,这有点让人困惑,我看到的解决方案依赖于平台,android端更让人困惑,而且有局限性。我一直在寻找解决方案,但需要更多的澄清

什么应该对两者都起作用: 显然,描述说

Renderbuffer对象本身也支持多采样(MSAA)

但ES2.0似乎并不支持这一点。iOS有自己的方法
glrenderbufferstoragemultisampleaple
,在es 2.0上支持它,但android没有。当ios有自己的方法(再一次)
glResolveMultisampleFramebufferAPPLE
时,android也不能Blit帧缓冲区

如果这是特定于平台的操作:iOS可以执行
setDrawableMultisample:GLKViewDrawableMultisample4X
,这似乎是可行的。但是Android有局限性,有代码> EGLConfigChooser <代码> >代码>选择eCufg,但是我读过并不是所有的Android设备都支持反走样(我也不能在仿真器上测试),所以我必须在本地C++代码中再次执行。 其他:我一直在阅读,有一些方法,比如在圆形中多次绘制所有内容(精度更高),或者将整个视图放大到2倍,然后绘制,然后缩小比例以获得更平滑的线条。。。另一方面,我不确定它是否有效,但绘制到某种纹理或图像,以某种方式进行抗锯齿或支持抗锯齿(需要更好地理解这一点)


我现在需要的:我的要求是只使用
glDrawArrays
方法绘制带有颜色的顶点(我通过这个方法完成我的工作)。绘制的所有对象都应该平滑或抗锯齿。我应该如何处理这个问题?我需要更好的参考资料或教程,在那里我可以正确地阅读任何应该同时适用于这两种方法的方法。我不介意阅读和学习,但我有点被这么多的选择所困扰,而与它们没有什么关联。编辑:我在2D中绘制(z=0始终),没有深度问题。

OpenGL ES 2.0面向低端平台,因此不需要抗锯齿。但是,由于有很多硬件超过了ES 2.0的要求,因此通常会实现扩展

假设您需要在不支持它的平台上执行此操作,尽管这是一个不公平的要求(如果流浪汉希望视觉完美,他们应该购买effing硬件),根据渲染场景和开发预算,可能会有两种方法起作用:

  • 在着色器中手动计算碎片覆盖率,设置alpha,使用GL_alpha_SATURATE进行混合;在我看来,最好看的AA技术是,尽管只有不透明的表面(奇怪的是,尽管没有平滑的多边形,ES 2.0却支持这种技术?)
  • 。将几个最近渲染的帧合并在一起,并进行轻微偏移。如果展品上的东西动得太多,可能就不太好了
  • 透支使用透明线。对于任何曲面,使用透明度绘制其线框。边缘将变得更加平滑,但曲面也将增长一点
  • 在着色器中将顶点钳制到像素中心。这将略微减少近垂直/水平边缘的移动感觉,但在某些情况下可能会产生不太平滑的感觉
  • 选择更能抵抗锯齿的视觉样式。当像素对齐的四边形工作得同样好时,我避免使用圆形。当由于像素几何结构而存在颜色混叠的风险时,我会更仔细地选择背景色和前景色。从某种意义上讲,这是设计级别的,而不是渲染级别的,并且不应该低估,因为它通常是廉价的和可移植的

  • 如果您实现上述任何一项,我将对您的结果和场景的更多细节非常感兴趣。

    所以您的问题是无法在模拟器上执行抗锯齿。你们在设备上试过了吗?尤其是中端设备的GPU比几年前要好,这对你的应用程序的目标市场来说仍然是个问题吗?我已经在一台设备上试用过了,效果不错。但问题是为了避免“在某些设备上无法运行”的问题。所以我现在正在寻找替代者。但要澄清的是,如果设备运行opengl es 2.0,则不能保证它也会运行多重采样,对吗?抗锯齿将始终受到性能影响(请参阅3D PC游戏,其中AA是可选的,以提高帧速率),因此一些设备根本无法支持它,或者基于应用程序(游戏与绘图程序)的支持较差。开发一个应用程序来发布意味着在哪些设备不受支持的问题上做出权衡。再次在您的普通客户设备上进行测试,看看AA开/关是否有意义的区别。