| Poster | : vipix | | Posts | : 1 | | Country | : USA | | City | : Winston |
| | | | Posted by vipix on 29/10/2006 at 18:49:55
| | How do you draw a cylinder between two known 3d points. I get the distance and calculate the angles x and y. I draw the cylinders half are drawn right the other half are wrong. I rotate Y then X. Here is my code for calculating the distance and angles:
private void CalculateDistance(Atom one, Atom two){
Vector3 AtoB = Vector3.Subtract(two.Origin, one.Origin);
_bondDistance = Vector3.Length(AtoB);}
private void CalculateOrigin(Atom one, Atom two){
_angleY = (float)Math.Atan2(two.Origin.X - one.Origin.X, two.Origin.Z - one.Origin.Z);
_angleX = (float)Math.Asin((two.Origin.Y - one.Origin.Y) / _bondDistance);
float x = ((two.Origin.X + one.Origin.X) / 2);
float y = ((two.Origin.Y + one.Origin.Y) / 2);
float z = ((two.Origin.Z + one.Origin.Z) / 2);
_origin = new Vector3(x, y, z);} |
what am I doing wrong?
| |
|
|
| |
| |
| Poster | : riemer | | Posts | : 1392 | | Country | : Belgium | | City | : Antwerp |
| | | | Posted by riemer on 30/10/2006 at 05:35:36
| | What's wrong, the size or the angle ?
If its the angle, I would say you need Y/X for an atan, instead of X/Y | |
|
|
| |
| |
| Poster | : riemer | | Posts | : 1392 | | Country | : Belgium | | City | : Antwerp |
| | | | Posted by riemer on 30/10/2006 at 05:36:33
| | | You don't post the code where you create the mesh, or where you set the world transform, so I cannot say a lot | |
|
|
| |
| |
| Poster | : Anonymous | | Posts | : | | Country | : | | City | : |
| | | | Posted by Anonymous on 04/11/2006 at 17:31:20
| | I create the clinders:
foreach (Bond bt in m.bc)
{
if (bt.BondType == BondType.S)//single bonds
{
Mesh hg = Mesh.Cylinder(device, bt.BondRadius/2, bt.BondRadius/2, bt.RenderDistance, 10, 10+count);
bt.BondMesh = hg;
bb.SetValue(hg, count);
}
count++;
}
|
Draw Cylinders like this:
Matrix mainM = Matrix.Identity;
Rotato.RotateY(by);
Rotato.RotateX(bx);
device.Transform.World = mainM * Rotato * Matrix.Translation(bo);
bb[count].DrawSubset(0);
|
I tried the switch and that did not work! Please Help!!
| |
|
|
| |
| |
| Poster | : riemer | | Posts | : 1392 | | Country | : Belgium | | City | : Antwerp |
| | | | Posted by riemer on 05/11/2006 at 09:10:00
| | I see you're using a combination of multiple rotations and a translation. I think this causes the problem. You're first translating your object, and afterwards you're rotating the whole thing, which is usually the opposite of what you want. Remember that in matrix maths M1*M2 is NOT the same as M2*M1. Also, multiplying a matrix by matrix.identity, is the same as multiplying a scalar (a number) by 1, which means you can leave it away.
I would first try to rotate to the correct angle (one angle at a time), and after that translate. | |
|
|