问题描述
如果另一个对象在里面,我试图让一个统一的游戏对象对声音做出反应。我希望游戏对象使用输入对象的位置来查看最接近的体素,然后根据体素强度/颜色播放音频。有没有人有任何想法?我正在处理一个 512x256x512 体素的数据集。如果对象也被调整大小,我希望它能够工作。非常感谢任何帮助:)
我使用的数据集是身体的 3d .mhd 医学扫描。以下是在启动时将纹理添加到渲染器的方式:
for (int k = 0; k < NumberOfFrames; k++) {
string fname_ = "T" + k.ToString("D2");
Color[] colors = LoadData(Path.Combine (imageDir,fname_+".raw"));
_volumeBuffer.Add (new Texture3D (dim [0],dim [1],dim [2],TextureFormat.RGBAHalf,mipmap));
_volumeBuffer[k].SetPixels(colors);
_volumeBuffer [k].Apply ();
}
GetComponent<Renderer>().material.SetTexture("_Data",_volumeBuffer[0]);
对象的大小是通过使用 mdh 头文件间距以及体素尺寸来定义的:
transform.localScale = new Vector3(mhdheader.spacing[0] * volScale,mhdheader.spacing[1] * volScale * dim[1] / dim[0],mhdheader.spacing[2] * volScale * dim[2] / dim[0]);
我尝试制作我自己的函数,通过将它偏移到渲染网格的开头来从世界中获取索引(不确定这是否正确)。然后,按局部比例缩放。然后,乘以每个维度的体素数量。但是,我不确定我的逻辑是否正确......这是我尝试过的代码:
public Vector3Int GetIndexFromWorld(Vector3 worldPos)
{
Vector3 startOfTex = gameObject.GetComponent<Renderer>().bounds.min;
Vector3 localPos = transform.InverseTransformPoint(worldPos);
Vector3 localScale = gameObject.transform.localScale;
Vector3 OffsetPos = localPos - startOfTex;
Vector3 VoxelPosFloat = new Vector3(OffsetPos[0] / localScale[0],OffsetPos[1] / localScale[1],OffsetPos[2] / localScale[2]);
VoxelPosFloat = Vector3.Scale(VoxelPosFloat,new Vector3(voxelDims[0],voxelDims[1],voxelDims[2]));
Vector3Int voxelPos = Vector3Int.FloorToInt(VoxelPosFloat);
return voxelPos;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)