Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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
Glsl 如何在godot空间着色器上获得分辨率?_Glsl_Godot - Fatal编程技术网

Glsl 如何在godot空间着色器上获得分辨率?

Glsl 如何在godot空间着色器上获得分辨率?,glsl,godot,Glsl,Godot,屏幕\像素\大小不适用于空间着色器?如何获得分辨率?正如您所注意到的SCREEN\u PIXEL\u SIZE在空间着色器中不存在(它存在于画布着色器中) 空间着色器的SCREEN\u PIXEL\u SIZE等效于1.0/VIEWPORT\u SIZE。也就是说,视口大小=1.0/屏幕像素大小 由于1.0/SCREEN\u PIXEL\u SIZE是您想要的,因此您可以直接使用VIEWPORT\u SIZE。它提供视口(绘制着色器的位置,无论是屏幕、窗口还是纹理)的像素大小 此外,如果要执行F

屏幕\像素\大小不适用于空间着色器?如何获得分辨率?

正如您所注意到的
SCREEN\u PIXEL\u SIZE
在空间着色器中不存在(它存在于画布着色器中)

空间着色器的
SCREEN\u PIXEL\u SIZE
等效于
1.0/VIEWPORT\u SIZE
。也就是说,
视口大小=1.0/屏幕像素大小

由于
1.0/SCREEN\u PIXEL\u SIZE
是您想要的,因此您可以直接使用
VIEWPORT\u SIZE
。它提供视口(绘制着色器的位置,无论是屏幕、窗口还是纹理)的像素大小

此外,如果要执行
FRAGCOORD.xy/VIEWPORT\u SIZE
,可以使用
SCREEN\u UV
。即
SCREEN\u UV=FRAGCOORD.xy/VIEWPORT\u SIZE
。正如您所料,
FRAGCOORD
是以像素为单位的片段坐标,而
SCREEN\u UV
则提供标准化坐标(0到1)

顺便说一下,如果您不希望材质依赖于屏幕上的位置,您可以将
screen\u UV
替换为
UV

顺便说一下,是的,我知道
SCREEN\u UV
说的是“SCREEN”而不是“viewport”。有些命名可能会令人困惑


在空间着色器中,您不会写入
COLOR
,而是写入
ALBEDO
ALPHA
。Godot会注意到您是否写入ALPHA,并在决定渲染顺序时考虑到这一点(因此潜在的透明材质在不透明材质之后渲染)


说到令人困惑的命名



有关内置(包括上面提到的)和渲染模式的列表,请参阅。

谢谢,godot将glgs转换为gdscript着色器使我感到困惑:/I坚持使用c#
shader_type spatial;
void fragment ()

{
    vec2 i_resolution = 1.0 / SCREEN_PIXEL_SIZE ;

    ...
    //fragColor = ...; 
    COLOR = ...; 'Constants cannot be modified' And this is other problem on spatial shader
}
mat4 ModelToWorld  = WORLD_MATRIX;              // Common name: Model Matrix
mat4 WorldToModel  = inverse(WORLD_MATRIX);     // Common name: Inverse Model Matrix
mat4 WorldToCamera = INV_CAMERA_MATRIX;         // Common name: View Matrix
mat4 CameraToWorld = CAMERA_MATRIX;             // Common name: Inverse View Matrix
mat4 ModelToCamera = MODELVIEW_MATRIX;          // Common name: View Model Matrix
mat4 CameraToModel = inverse(MODELVIEW_MATRIX); // Common name: Inverse View Model Matrix
mat4 CameraToClip  = PROJECTION_MATRIX          // Common name: Projection Matrix
mat4 ClipToCamera  = INV_PROJECTION_MATRIX      // Common name: Inverse Projection Matrix