unity ComputeShader里结构体变量初始化如何不用分支判断
init 是一个int 类型 在跑完第一帧之后会被设置成其他值
现在想求助各位大神
如何在不使用标志位的情况下初始化这个结构体里的成员变量
dataBuffer[f].pos = pos;
dataBuffer[f].velocity = float3(0, 0, 0);
(补充说明:如果没有这个if分支初始化变量会导致不显示,直接初始化没有标志位分支表现结果和预期不符)
// Each #kernel tells which function to compile; you can have many kernels
#pragma kernel CSMain
// Create a RenderTexture with enableRandomWrite flag and set it
// with cs.SetTexture
RWTexture2D<float4> Result;
float3 mousePos;
float3 originPos;
float deltaTime;
int init;
float radius;
struct Data
{
float3 pos;
float3 velocity;
float3 uv;
};
RWStructuredBuffer<Data> dataBuffer;
//[numthreads(32, 32, 1)]
[numthreads(32, 32, 1)]
void CSMain(uint3 id : SV_DispatchThreadID)
{
// TODO: insert actual code here!
//id.x 第X列的线程ID
//id.y 第Y行的线程ID
uint f = id.x + id.y * 32 * 64;
// uint f = id.x + id.y * 32 * 64;
float3 pos = float3(id.x, id.y, id.z) / 2 + originPos; //计算出原始坐标
dataBuffer[f].uv = ((pos - originPos) / 2048) * 2; //计算出每个点的uv
//dataBuffer[f].uv = ((pos - originPos) / 2048) * 2; //计算出每个点的uv
if (init == 0)//初始化点
{
dataBuffer[f].pos = pos;
dataBuffer[f].velocity = float3(0, 0, 0);
}else
{
float3 dis = dataBuffer[f].pos - mousePos; //计算出当前坐标与鼠标点间的向量
float vel = clamp(radius - length(dis), 0.01, radius) * deltaTime * 20; //计算出力
dataBuffer[f].velocity += normalize(dis) * vel; //加上力
dataBuffer[f].velocity = normalize(dataBuffer[f].velocity) * clamp((length(dataBuffer[f].velocity) - deltaTime * 2), 0, radius); //限制力的范围,并且加上指向原始点的力
dataBuffer[f].pos = pos + dataBuffer[f].velocity; //根据力计算出坐标
}
}