我想要一个非常简单的解释,为什么这些变量在“Android Studio”上不起作用,以及如何解决我的问题(一些用于“TheeBookOfShaders”,一些用于“Atom”,另一些用于两者,一些仅用于“ShaderToy”,一些仅用于“Android Studio”)。
*为了真正理解,这是一个示例(来自“fragment.glsl”文件)*
uniform vec2 resolution; // [-] work on...
uniform vec2 uresolution; // [-] work on...
uniform vec2 iresolution; // [Y] work only on "ShaderToy"
uniform vec2 u_resolution; // [Y] work on "Atom" and "WebGL"
i、 e.*从“ShaderToy”到“Atom”的示例转换(实时编码)*
uniform vec2 iresolution; // is used on: "ShaderToy"
uniform vec2 u_resolution; // is used on: "Atom", "WebGL", etc.
所以:[iresolution=u_resolution]*好的,它可以工作*
*那么,现在,为什么在“Android Studio”(java code fragment.glsl)中,这些都不起作用呢*
uniform vec2 resolution; // doesn't work on "Android Studio"
uniform vec2 uresolution; // doesn't work on "Android Studio"
uniform vec2 iresolution; // doesn't work on "Android Studio"
uniform vec2 u_resolution; // doesn't work on "Android Studio"
uniform vec2 vresolution; // doesn't work on "Android Studio"
uniform vec2 v_resolution; // doesn't work on "Android Studio"
显然:
vec2 A = (gl_FragCoord.xy / u_resolution); // doesn't work on "Android Studio"
vec2 A = (gl_FragCoord.xy / uresolution); // doesn't work on "Android Studio"
vec2 A = (gl_FragCoord.xy / *SOME*resolution); // doesn't work on "Android Studio"
等。
时间变量的情况也一样:时间、utime、u_时间、itime、vtime、v_时间、全局时间等。
*在哪里可以找到在“Android Studio”GLSL着色器文件中使用RESOLUTION/TIME/其他人system-var的确切关键字?*
>
“分辨率”是否为系统库变量?
“解析”有没有一个简单的最终真实方案来理解这种混乱中的一些东西?
在这个示例中,我们可以看到Xresolution的唯一工作版本——在家试用
在另一个示例中,我们可以看到Xresolution的所有其他黄色故障版本-在家试用
“fragment.glsl”测试文件在Atom编辑器上100%可用(请在家里试用)
#ifdef GL_ES
precision highp float;
#endif
uniform vec2 resolution; // not-system var
uniform vec2 uresolution; // not-system var
uniform vec2 iResolution; // system-var WORK 100% on ShaderToy
uniform vec2 vresolution; // not-system var
uniform vec2 u_resolution; // system-var WORK 100% on Atom-Editor but NOT on Android Studio
uniform vec2 i_resolution; // not-system var
uniform vec2 v_resolution; // not-system var
void main()
{
vec2 A = (gl_FragCoord.xy / u_resolution);
gl_FragColor = vec4(A.x, A.y, 0.0, 1.0);
}
*解决方案|仅在ANDROID STUDIO上100%工作*
#ifdef GL_ES
precision highp float;
#endif
uniform vec2 u_resolution; // note: you can name it also "Pacman"...
// this mode let you can to create your
// personal var-name to access to windows view-port
void main()
{
// ---------------------------------------------------------------------------------
u_resolution = vec2(1920, 1080); // this assignment work 100% ONLY on Android Studio
// ---------------------------------------------------------------------------------
// --------------------------------------------------------------------------
vec2 A = (gl_FragCoord.xy / u_resolution); // solution 1
vec2 A = (gl_FragCoord.xy / vec2(1920, 1080)); // solution 2
vec2 A = (vec2(gl_FragCoord.x / 1920, gl_FragCoord.y / 1080)); // solution 3
// --------------------------------------------------------------------------
gl_FragColor = vec4(A.x, A.y, 0.0, 1.0);
}
最终我们找到了解决方案,总是摆在眼前。我们从一个窗口开始,其中X和Y的尺寸设置为1920x1080(在我们的例子中,我们不需要任何其他东西),我指出了设置变量“u_分辨率”的三种模式。警告-此功能仅适用于Android Studio,并且能够回答我的上述问题。问题已经解决了。费利佩通过参与表明了他解决问题的决心。当然,我们也可以通过Java或C或其他方式从主代码设置这个值;但对我们来说,在这篇文章中,唯一有趣的是通过GLSL直接设置/检索这些“u_分辨率”。
采用的解决方案完美满足出发需求,希望对所有后来者有所帮助3线解决方案等价:选择你的首选
特别感谢@felipe gutierrez的友好合作。
根据Khronos网站:“A
如果您想测试您是否拥有正确的i分辨率制服,那么您可以键入:
void main()
{
vec2 uv = gl_FragCoord.xy/u_resolution;
vec3 col = vec3( smoothstep( 0.1, 0.1 - 0.005, length( uv - 0.5 ) ) );
gl_FragColor = vec4( col, 1 );
}
您提到的GLSL变量都不是系统变量
它们是用户组成的变量。
uniform vec2 resolution;
绝对没有更多的意义比;
uniform vec2 foobar;
这些是您选择的变量。
你可以通过查找它们的位置来设置它们
在WebGL/JavaScript中
const resolutionLocation = gl.getUniformLocation(someProgram, "resolution");
const foobarLocation = gl.getUniformLocation(someProgram, "foobar");
在爪哇
int resolutionLocation = GLES20.glGetUniformLocation(mProgram, "resolution");
int foobarLocation = GLES20.glGetUniformLocation(mProgram, "foobar");
您可以在WebGL/JavaScript中设置它们
gl.useProgram(someProgram);
gl.uniform2f(resolutionLocation, yourVariableForResolutionX, yourVariableForResolutionY);
gl.uniform2f(foobarLocation, yourVariableForFoobarX, yourVariableForFoobarY);
还是Java
GLES20.glUseProgram(someProgram);
GLES20.glUniform2f(resolutionLocation, yourVariableForResolutionX, yourVariableForResolutionY);
GLES20.glUniform2f(foobarLocation, yourVariableForFoobarX, yourVariableForFoobarY);
没有神奇的系统变量,它们是应用程序的100%变量iResolution
是ShaderToy的程序员编写的一个变量u_resolution
是Atom插件作者编写的一个变量。他们可以很容易地选择renderize
或gamenHirosa
(日语的屏幕宽度)或任何东西。同样,它们不是系统变量,而是程序员选择的变量。在你的应用程序中,你也可以自行设置变量。
我建议你阅读一些关于WebGL的教程
我开始尝试将列表结构转换为字典,但遇到了一些麻烦。我正在修改我的前述语句<代码> 我现在用字典卡在这一行:
好的,我的问题对于任何玩过棋盘游戏编程的人来说都应该很熟悉,所以这里是: 我实现了MiniMax算法的一种变体(返回移动而不是最小/最大值) 我还尝试将其设置为alpha beta版,尽管最终完全失败 这是我的极大极小码: 有什么想法吗?如何调整上述内容,使其成为Alpha Beta搜索? 下面是我尝试的Alpha-Beta转换(失败得很惨): 提示(以避免任何误解): > 此- 和分别被定义为一
问题内容: 这是我的问题:鉴于这些课程 此代码编译: 并且这不: 是什么赋予了? 更新: 此代码可在Java 8中编译。显然是由于“改进的类型推断”。 问题答案: 在第一个示例中,调用的推断类型为,显然可以将其分配给相同类型的变量。 在第二个示例中,右侧的类型为。虽然 是 分配给, 不 分配给。它可以分配给。 其原因与a 不可分配给的原因相同。如果是这样,它将使以下(非类型安全的)代码成为可能:
问题内容: 我有一个要转换为SSIS程序包中PRN的Excel文件。我的问题。我的一列中有货币,所有内容都应带有小数点,但并非所有数字都具有小数点。例如,如果没有毛钱,它只会读为10425。我需要在SSIS中进行的操作是使读为10425.00,就像文件中的其他数字一样。 请帮忙。 问题答案: 您可以使用“派生列”转换来转换数据类型。我认为Currency(DT_CY)数据类型不会强制您使用小数位,
我有这种格式的数据: 100 1 2 3 4 5 我使用以下代码来加载它: 我想从数组[Int]生成对,这样一个值大于一个数(在下面的代码中为2)的数组元素就可以与数组的所有其他元素配对。然后我会用它来生成更多的统计数据。例如,对于示例数据,我应该能够首先生成: 100 (3,1), (3,2), (3,4), (3,5),(4,1), (4,2), (4,3), (4,5) 下面是我得到的o/p
我正在将我的应用程序从C2DM转换为GCM,我有一些问题。 我修改了这里的gcmquickstart示例: 在我的类,扩展应用程序,我有: 好的,这将启动服务,并且它将永远运行,或者如果操作系统关闭它,那么操作系统将重新启动它。对吗? CheckPlayServices()确保这是Android 2.3或更高版本,并且安装了Google Play Services,因为这些是使用GCM的唯一要求。