Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

物体负缩放产生镜面状态 #3

Open
alindas opened this issue Jul 12, 2023 · 0 comments
Open

物体负缩放产生镜面状态 #3

alindas opened this issue Jul 12, 2023 · 0 comments

Comments

@alindas
Copy link
Owner

alindas commented Jul 12, 2023

物体的变换(缩放、旋转、平移)在计算机图形学中由一种叫做变换矩阵实现,这个矩阵包含了物体在空间中的位置、方向和大小信息。物体的世界变换矩阵是由物体的局部变换矩阵和它的所有父对象的变换矩阵相乘得到的。Three.js 中的 Object3D(所有物体的基类)的 getWorldScale()getWorldQuaternion()getWorldPosition() 方法,就是从这个世界变换矩阵中提取出来的信息。

当你对一个物体只应用负缩放(即缩放系数小于0),比如 object.scale.x = -1,你会注意到物体是“倒置”的,或者说看起来像是被“镜像”了。然而,这是由于变换矩阵的行列式(一个数学指标)为负值导致的。正常的空间(也就是“右手法则”下的空间)被变为了镜像空间(左手法则的空间)。在镜像空间中,所有的物体看起来都好像被镜像了,因为所有的面都是反向的。

getWorldScale()getWorldQuaternion() 返回的都是物体在世界坐标系中的缩放和旋转信息。如果你只是简单地设置了负缩放(导致了镜像效果),然后又调用 setWorldScale()setWorldQuaternion() 去设置物体的缩放和旋转,这样实际上是让物体保留了镜像空间的状态,同时也应用了正确的旋转。这样,物体就能保持预期的方向和大小,不会被镜像。

总的来说,只设置负缩放会导致物体看起来像是“被镜像了”,同时设置世界坐标系下的缩放和旋转可以消除这种镜像效果。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant