影像输入投影

这是内核的一个示例,该内核使用图像输入投影到粒子系统上,根据粒子的位置为它们着色。假定图像位于XZ平面上,并且提供了两个旋钮以在该平面上设置图像的左上角和右下角。

产生的效果ColorWheel图像投影到带有velocity0

 

产生的效果ColorWheel图像投影到带有velocity0.05

图像投影内核的示例节点图

kernel ParticleImageProjectKernel : ImageComputationKernel<ePixelWise>

{

Image<eRead,eAccessRandom,eEdgeClamped> image_texture;

Image<eReadWrite> p_position;

Image<eReadWrite> p_color;

param:

float _amount;

float _dt;

float2 _imageTL;

float2 _imageBR;

local:

float2 _imageSize;

void define() {

defineParam(_imageTL, "pa_imageTL", float2(0.0f));

defineParam(_imageBR, "pa_imageBR", float2(1.0f));

defineParam(_dt, "_dt", 1.0f);

}

void init() {

_imageSize = float2(image_texture.bounds.width(), image_texture.bounds.height());

}

void process() {

float3 p = p_position();

float2 xz = float2(p.x, p.z);

float2 uv = xz = (xz-_imageTL)/(_imageBR-_imageTL);

float2 st = uv*_imageSize;

float4 c = bilinear(image_texture, st.x, st.y);

p_color() = float4(c.x, c.y, c.z, 1.0f);

}

};