I need to rotate an 3D mesh object on an axis in C#.
Could you show me how this is done?
What is the use of default keyword in C#? Is it introduced in C# 3.0 ?
I need to rotate an 3D mesh object on an axis in C#.
Could you show me how this is done?
Multiply all vertexes by rotation matrix
It depends what API you want to use:
In WPF you could do it like this:
<Viewport3D>
<Viewport3D.Camera>
<PerspectiveCamera Position="-40,40,40" LookDirection="40,-40,-40 "
UpDirection="0,0,1" />
</Viewport3D.Camera>
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup>
<DirectionalLight Color="White" Direction="-1,-1,-3" />
<GeometryModel3D>
<Model3DGroup.Transform>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<!-- here you do the rotation -->
<AxisAngleRotation3D x:Name="rotation" Axis="0 0 1" Angle="45" />
</RotateTransform3D.Rotation>
</RotateTransform3D>
</Model3DGroup.Transform>
<GeometryModel3D.Geometry>
<MeshGeometry3D Positions="0,0,0 10,0,0 10,10,0 0,10,0 0,0,10
10,0,10 10,10,10 0,10,10"
TriangleIndices="0 1 3 1 2 3 0 4 3 4 7 3 4 6 7 4 5 6
0 4 1 1 4 5 1 2 6 6 5 1 2 3 7 7 6 2"/>
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial Brush="Red"/>
</GeometryModel3D.Material>
</GeometryModel3D>
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D>
Or in codebehind c#:
this.rotation.Angle = 90;
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.
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.
public void RotateMesh(MeshGeometry3D mesh, Vector3D axis, double angle)
{
var transform = new RotateTransform3D();
transform.Rotation = new AxisAngleRotation3D(axis, angle);
for (int i = 0; i < mesh.Positions.Count; ++i)
mesh.Positions[i] = transform.Transform(mesh.Positions[i]);
}
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).)
What is the use of default keyword in C#? Is it introduced in C# 3.0 ?
I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...
I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...
I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...
I have two EF entities. One has a property called HouseNumber. The other has two properties, one called StartHouseNumber and one called EndHouseNumber. I want to create a many to many association ...
How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...
Since I cannot order my dictionary, what is the best way of going about taking key value pairs and also maintaing an index?
Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...