如何在 C# 3D 中旋转对象?
我需要在 C# 中的轴上旋转 3D 网格对象。
你能告诉我这是如何做到的吗?
I need to rotate an 3D mesh object on an axis in C#.
Could you show me how this is done?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
将所有顶点乘以旋转矩阵
Multiply all vertexes by rotation matrix
这取决于您想要使用什么 API:
在 WPF 中您可以这样做:
或者在代码隐藏 c# 中:
如果您使用 XNA,您将使用类似 Matrix.CreateRotationY 并将其应用到您ModelMesh 实例。
当然,您可以使用大量的第三方引擎和 API。一个有趣的选择可能是 SlimDX,它是 Direct3D 的一个薄包装,有点像以前的 Managed DirectX。
It depends what API you want to use:
In WPF you could do it like this:
Or in codebehind c#:
If you use XNA you would use soemthing like Matrix.CreateRotationY and apply that to you ModelMesh instance.
Of course there are tons of 3rd party engines and apis that you could utilize. AN interesting choice might be SlimDX which is a slim wrapper around Direct3D sort of like Managed DirectX once was.
我有类似的问题。我不确定您想要旋转什么,但假设您想要变换 MeshGeometry3D。这是我的解决方案。
I had a similar problem. I'm not sure what you want to rotate, but lets assume you want to transform a MeshGeometry3D. Here is my solution.
让我们对此进行更多详细说明。
给定旋转角度和旋转轴的规格,我们可以通过几个步骤完成旋转。
该代码对读者来说是一个练习,因为这对我来说是一次大脑训练(计算机图形学已经是很久以前的事了:d)。也许当我准备好时,我会发布更多内容。
我相信它是这样的:
R(θ) = T^-1 。 Rx^-1(α) 。 Ry^-1(测试版)。 Rz(θ) 。 Ry(测试版)。接收(阿尔法)。 T
其中:
大脑训练器编辑
O 我们可以简化(即使不使用四分法)
(来源:gamedev.net)
且 (x,y,z) 是旋转轴上的单位向量,是旋转角度。
如果我可以相信谷歌的话。该证明留给读者作为练习,但据我所知,我相信它是正确的(来源:Graphics Gems(Glassner,Academic Press,1990)。)
Lets put some more detail in this.
Given the specifications for the rotation angle and rotation axis we can accomplish the rotation in a few steps.
The code is an exercise for the reader as this is a brain training for me (computer graphics is a long time ago :d). Maybe when I'm up for it I'll post a bit more.
I believe it was something like:
R(theta) = T^-1 . Rx^-1(alpha) . Ry^-1(Beta) . Rz(theta) . Ry(beta) . Rx(alpha) . T
Where:
Brain trainer edit
O we can simplify (even without using quarternations)
(source: gamedev.net)
and (x,y,z) is a unit vector on the axis of rotation and is the angle of rotation.
if I may believe google. The prove is left as an exercise to the reader but I believe it is correct as far as I can see (source: Graphics Gems (Glassner, Academic Press, 1990).)
您可以使用 Skiasharp ,开源库
检查这个代码 了解如何执行此操作。
You can use Skiasharp, the open source library
Check this code for how to do it.