gpt4 book ai didi

android - 点 Sprite 在我的 Galaxy S4 屏幕边缘消失(Nexus 7 没有)

转载 作者:太空宇宙 更新时间:2023-11-03 11:13:50 25 4
gpt4 key购买 nike

我正在试验基于以下代码的粒子发射器:https://code.google.com/p/sravan-work/source/browse/trunk/OpenGL+ES2/es2particles/src/es2/learning/ParticleRenderer.java

目前,粒子发射器在我的 Nexus 7 上运行良好;点 Sprite 在屏幕中央生成,并且 1) 淡出或 2) 飞过屏幕边缘。

不幸的是,在我的 Galaxy S4 上,当点 Sprite 的中点到达屏幕边缘时,它们就会从显示屏上消失。这会导致非常不愉快的视觉效果。

两台设备都运行 Android 4.3

问题:为什么 Sprite 会在(华硕)Nexus 7 上滑出屏幕,但在 Galaxy S4 上却突然消失了?有什么办法可以防止突然失踪吗?

补充说明:

对于 Galaxy S4,logcat 中会打印以下内容:

12-03 00:29:15.288: I/Adreno-EGL(31137): <qeglDrvAPI_eglInitialize:316>: EGL 1.4 QUALCOMM build:  (CL4169980) 
12-03 00:29:15.288: I/Adreno-EGL(31137): OpenGL ES Shader Compiler Version: 17.01.10.SPL
12-03 00:29:15.288: I/Adreno-EGL(31137): Build Date: 09/26/13 Thu

对于 Nexus 7,在 logcat 中打印以下内容:

12-03 00:14:38.144: D/libEGL(25303): loaded /system/lib/egl/libEGL_tegra.so
12-03 00:14:38.154: D/libEGL(25303): loaded /system/lib/egl/libGLESv1_CM_tegra.so
12-03 00:14:38.174: D/libEGL(25303): loaded /system/lib/egl/libGLESv2_tegra.so
12-03 00:14:38.194: D/OpenGLRenderer(25303): Enabling debug mode 0

最佳答案

Sprite 基于其中心的单个点,围绕该点绘制纹理。如果这一点超出渲染区域,它们将被剪裁,因为从技术上讲,它们的整个几何图形都在 View 之外。

可能有一些解决方法可以避免突然消失:

  1. 在 Sprite 接近屏幕边缘时手动淡化 Sprite 。
  2. 扩展 View /渲染区域,使其“超出”屏幕(不确定是否可行)。
  3. 使用有四个顶点的正方形而不是 Sprite (只要一个顶点在屏幕上,相关的三角形就不会被剪裁)

对于选项 3:
首先,您必须定义一个正方形而不是每个粒子一个点:

float verts[] = {-1, 1, 0,  1, 1, 0,  1,-1, 0,  -1,-1, 0};

根据您希望粒子的行为方式,您可以移除每个顶点的第三个坐标,并在顶点着色器中也将其设置为适当的值。

其次,您必须绘制三角形而不是绘制 GLES20.GL_POINTS,使用我发布的数组,GLES20.GL_TRIANGLE_FAN 将创建一个正方形。

您还必须在顶点着色器中设置粒子的位置和大小。像这样的 a_Position*size*0.5 + translate 应该可以解决问题。如果您使用较小的尺寸或使 verts[] 数组中的顶点值更小,您当然可以避免尺寸减半。 translate 将是粒子的计算位置。

注意 1:记住 glPointSize以像素为单位设置大小,但在此示例中,大小以世界空间单位为单位。大小为 10 可能会比本例中的屏幕大

注意 2:由于您现在使用的是实际几何而不是点,因此您可以使用 perspective matrix使更远的粒子看起来更小。

关于android - 点 Sprite 在我的 Galaxy S4 屏幕边缘消失(Nexus 7 没有),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20346246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com