我想用鼠标来控制我的相机位置。我们的想法是拥有一个全局变量float3 pos
,它携带当前的摄像头位置,以便下次更新来自pos
本身。
当我在global variable
声明Metal
时:
float3 pos;
并收到此错误:
全局变量必须具有常量地址空间限定符。
但是,如果我添加constant
,它将变为只读,因此我无法更新当前位置。
我能想到的另一种选择是使用struct
。但这似乎有点过头了。
这样做的最佳方式是什么?
答案 0 :(得分:1)
实际上,只有只读变量(常量)可以在MSL
中定义为全局变量。您可以通过缓冲区将主机(API)代码中的鼠标坐标发送到着色器来完成此操作。在那里更新这些坐标的值,然后更新缓冲区,以便主机代码实时查看更新的值。这是一个playground,当您在渲染区域内单击时,它会在控制台中显示鼠标坐标。