我试图根据某些逻辑将碎片输出指定到设置纹理(渲染目标)。
总结我的着色器: 我正在进行一种Texture3D光线投射方法,允许用户在纹理3D数据中“看到”。
当我想要对这个主要纹理的一个区域进行采样并将其转换为另一个较小的分辨率(允许最终的“缩放”效果)时,我的问题出现了
到目前为止,我的研究已经让我使用了多个渲染目标。 (根据我的理解)我会将这个frag函数输出发送到另一个函数,然后输出以设置不同的目标。
反馈赞赏;特别是如果有一种更简单的方法将区域采样到另一个纹理(我尝试过各种计算着色器方法 - CPU方法太慢)基于CPU的类比是Unity的: GetPixels功能
摘录:
.float alpha 实际上是一个光线投射步骤结果
.float4 t 输入Texture3D映射时的颜色加alpha
._ sample 用于采样的伪布尔标志
.texture3Dsampler (在注释if语句中)是我想写的较小分辨率的Texture3D;给定像素被评估输入Texture3D在texture3Dsampler范围内,从某个起点开始 - 如if语句逻辑所示。
float a = (1 - alpha);
float4 t = float4(t3d, a);
//Cn = Current pixel
int Cx = start.x;
int Cy = start.y;
int Cz = start.z;
if(_sample == 1 &&
((Cx >= _XSS) && (Cx <= (_XSS+_Tex3DSampled.x))) &&
((Cy >= _YSS) && (Cy <= (_XSS+_Tex3DSampled.y))) &&
((Cz >= _ZSS) && (Cz <= (_YSS+_Tex3DSampled.z)))
)
{
//render t into BOTH texture3D to screen output and texture3Dsampler output
}
else //if not sampling into other Texture3d, simple return to render t onto screen
{
return t; //returning into t
}
}