이미지 입력 투사

이것은 이미지 입력을 사용하여 입자 시스템에 투영하고 위치에 따라 입자를 채색하는 커널의 예입니다. 이미지는 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);

}

};