c++ - Cocos2d-x 着色器场景过渡效果在 iOS 上无法正常工作
问题描述
我正在开发我的第一款游戏,我终于处于开发的最后阶段,但我的一个着色器遇到了一个小问题。我根本不擅长使用着色器,所以我解决与它们相关的问题的能力仍然非常有限。
无论如何,这是一种试图模仿卡通片或马里奥游戏中经常出现的场景过渡的效果。屏幕充满黑色,里面有一个透明的整体,它变得越来越小,直到整个屏幕变黑(或相反)。
在 Windows 上,它按预期工作,但是当我尝试在我的手机(iPhone6s)上运行它时,一旦圆圈接触到屏幕边缘,效果就会被切断(参见图片以供参考)。
你认为可能是什么问题?如果无法使用着色器解决,您是否知道任何可以在视觉上相同的解决方法?
哦,差点忘了,这是着色器:
#ifdef GL_ES
precision mediump float;
#endif
const float scale = 1.0;
uniform float uAlpha;
uniform int isActive;
uniform float centerPtX;
uniform float centerPtY;
uniform float uCircleRadius;
uniform vec2 uResolution;
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
vec2 getCoordinates()
{
return vec2(
v_texCoord.x * uResolution.x,
v_texCoord.y * uResolution.y
);
}
float getDist(vec2 pt1, vec2 pt2)
{
float dx = pt1.x - pt2.x;
float dy = pt1.y - pt2.y;
return sqrt((dx*dx) + (dy*dy));
}
void main()
{
if (isActive == 0) // don't draw anything
{
gl_FragColor = v_fragmentColor;
return;
}
vec3 finalCol = vec3(0.0);
vec3 circleCol = vec3(1.0);
vec2 centerPt = vec2(centerPtX, centerPtY);
float dis = length(getCoordinates() - centerPt);
// outline
//circleCol += 1.0 * smoothstep(uCircleRadius * 0.95, uCircleRadius, dis);
// render
finalCol = circleCol.zyx * (1.0 - smoothstep(uCircleRadius * 0.99, uCircleRadius, dis));
gl_FragColor = vec4(finalCol.rgb, uAlpha);
}
解决方案
推荐阅读
- dialogflow-es - DialogFlow:所有语言的训练短语数量限制为 10 个
- api - Magento 2.4.2:如何在我的自定义模块中获取实时当前汇率?
- python - 如何在python的列表中显示以下程序的输出?
- android - 如何使用 StreamProvider 返回子集合?[颤振,火力基地]
- azure-pipelines - 如何依赖特定的天蓝色管道矩阵作业而不是全部?
- authentication - 什么可能导致同一承载身份验证请求的身份凭证发生变化?
- python-3.x - 如何在 Django 中对非主键的 PUT 请求中发送 json 对象数组?
- google-admin-sdk - 将应用发布到 Google Workspace Marketplace 以查询其他组织的目录
- python - 具有多个数据集的 sklearn 模型选择
- c++ - 错误 C2064:术语不计算为采用 0 参数的函数,并且错误 E0980 调用没有适当 operator() 的类类型的对象