Android 和 Planet 渲染

标签 android opengl-es glsl rajawali

我正在学习如何在 Android 上进行 3D 开发。我从一个带有一些云的简单旋转行星开始。在过去的 2 天里,我一直在尝试为地球添加大气辉光。我在网上查看并尝试使用着色器,但无法走得更远。

我的问题是,实现此目标的最佳方法是什么?我可能只需要朝着正确的方向轻推。

我附上了到目前为止我拥有的星球的屏幕截图,以及我正在拍摄的最终目标。

感谢您的帮助。

目前进展:

enter image description here

最终目标: http://25.media.tumblr.com/tumblr_m06q7l7BpO1qk01v6o1_500.png

最佳答案

您通常需要在后期渲染过程中完成。例如:

Pass -1 : 将行星模型渲染到 FBO 纹理附件中。 Pass- 2 : 设置 screen quad ,并附加上一个 pass 的纹理作为 sampler uniform。

然后在 fragment 着色器中应用发光效果。 对于发光,有很多方法可以做到。例如,您可以在第一遍中绘制行星的轮廓,为其发光填充颜色,然后使用 smoothstep() 对其进行模糊处理。然后在后期处理中传递给您把它放在主行星纹理下。 事实上here您可以看到很多关于如何为圆形物体发光的代码示例。

还有一件事。添加基于模糊的发光可以极大地影响移动设备上的性能。有一种称为“距离场”的技术。 Valve用它来抗锯齿字体。但它也可以用来做发光。你创建一个你的星球轮廓的距离场纹理纹理副本一次,然后在后期处理过程中使用它来做平滑的发光效果。幸运的是你有生成它的功能。 Here您可以找到如何完成它的论文和代码。

关于Android 和 Planet 渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14289591/

相关文章:

android - 用于 Gingerbread ICS 的端口 apk

android - 在 linux 上找不到 ionic 路径

android - 了解 Android 中的 android.graphics.Camera 对象

android - 在 Android 中跟踪 opengl 纹理内存

java - 如何修复 OpenGLES glDrawElements

c++ - 如何将应用于所有顶点的顶点着色器动态数据传递?

android - 使用 Retrofit2 的补丁请求无法在 Android 上运行

android - 正方形ImageView

glsl - Vulkan 特化常数可以用 GLSL 表示吗?

opengl - glDrawBuffers 如何关联到深度纹理的绘制