gpt4 book ai didi

directx - 在CG/HLSL中计算屏幕纹理坐标

转载 作者:行者123 更新时间:2023-12-04 05:16:26 40 4
gpt4 key购买 nike

在 OpenGL 中,有时在进行多 channel 渲染和后处理时,我需要将纹素应用于作为全屏纹理组合一部分的图元的组件片段。当当前 channel 来自屏幕的 FBO 纹理时,通常就是这种情况四边形在之前的过程中已经渲染过。为了实现这一点,我在 SCREEN SPACE 中计算对象的 UV 坐标。在 GLSL 中,我这样计算:

     vec2 texelSize = 1.0 / vec2(textureSize(TEXTURE, 0));
vec2 screenTexCoords = gl_FragCoord.xy * texelSize;

现在我正在试验使用 CG 的 Unity3D/HLSL。这些语言的文档很差。如何在 CG/HLSL 中计算屏幕 uv 坐标?

最佳答案

要计算屏幕 texcoords,您通常将屏幕分辨率或其倒数( resrcpres )传递给着色器,然后使用由这些修改的全屏四边形(假设范围为 [0,1] )中的 texcoords。

编辑:请注意,在许多情况下,您同时需要 resrcpres可用。 res对于计算当前位置很有用(你不想使用 rcpres,因为它需要除法),但是 rcpres可以在 CPU 上计算一次,对于移动单个纹素很有用((res * uv) + rcpres) 是离原点多一个纹素)。

类似的东西:

float2 res; // contains the screen res, ie {640, 480}

void postEffect(in float2 uv : TEXCOORD, ...)
{
float2 pos = uv * res; // pos now contains your current position

逻辑是来自 fs quad 的坐标是 0,0在 texel 0,01,1在 texel maxX,maxY ,所以知道尺寸,你可以乘以。

您必须提供 res 的值但是,对于每种效果,这取决于您的着色器系统(Unity3D 可能已经做到了)。

关于directx - 在CG/HLSL中计算屏幕纹理坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14204364/

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