gpt4 book ai didi

unity-game-engine - 简单地获取 Cg 着色器内对象的缩放

转载 作者:行者123 更新时间:2023-12-02 20:08:19 25 4
gpt4 key购买 nike

假设您有一个简单的 Unity 着色器。它根本不使用任何纹理。它只是简单地占据了位置..

void vert (inout appdata_full v, out Input o) 
{
UNITY_INITIALIZE_OUTPUT(Input,o);
o.localPos = v.vertex.xyz;
}

然后画一个正方形..

enter image description here

示例中的四边形已使用变换拉伸(stretch)约 3:1。

如果在着色器中我们只知道缩放比例(或者只是比率),我们就可以很容易地绘制“正方形”

enter image description here

对于广告牌、2D 图像和背景等,这显然是一种常见的日常技术。

在当前的统一(2018)中,你到底如何简单地获取对象的当前缩放比例(以 Cg 为单位)?

这是那些疯狂的 Unity 事物之一,它 (1) 完全没有记录 (2) 唯一可用的信息是 13 岁,我的意思是一些参与其中的人可能已经死了 (3) 它在不同的 Unity 版本中发生了巨大的变化,所以经常讨论它是完全错误的。叹息。

怎么做呢?你可以吗?

目前我只是在值中传递了一个简单的脚本,这还可以,但有点粗制滥造。

最佳答案

变换的比例被烘焙到世界矩阵中。如果你的对象没有旋转,那么你可以通过一点点调整直接获取它,但很可能你想做这样的事情:

half3 ObjectScale() {
return half3(
length(unity_ObjectToWorld._m00_m10_m20),
length(unity_ObjectToWorld._m01_m11_m21),
length(unity_ObjectToWorld._m02_m12_m22)
);

}

注意:此实现依赖于 API,您可能需要在 DX/OGL 中使用一些 DEFINE 来处理此问题,因为矩阵格式不同(行顺序与列顺序)。

还有不同的方式来访问矩阵组件:https://learn.microsoft.com/en-us/windows/desktop/direct3dhlsl/dx-graphics-hlsl-per-component-math

就像这个线程中的例子 https://forum.unity.com/threads/can-i-get-the-scale-in-the-transform-of-the-object-i-attach-a-shader-to-if-so-how.418345/

关于unity-game-engine - 简单地获取 Cg 着色器内对象的缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54170722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com