Forum
Contact





DirectX using C#
DirectX using C++
DirectX using Visual Basic



Latest Forum posts

 Tutorial 3 for Windows Phone 7
  Posted by: Anonymous
  When: 20/05/2013 at 02:30:13

 No download link for 2d series: shooter
  Posted by: zaboleq
  When: 07/05/2013 at 15:46:28

 Collision Class?
  Posted by: Anonymous
  When: 05/05/2013 at 19:03:59

 stack overflow
  Posted by: cityguy
  When: 07/04/2013 at 01:58:38

 Meshes looks strange.
  Posted by: ab_saratov
  When: 01/04/2013 at 04:31:08

 Lamppost Not loaded
  Posted by: Anonymous
  When: 22/03/2013 at 06:43:52

 Collision Class?
  Posted by: Da_Boom
  When: 21/03/2013 at 01:23:09

 Math boggles me
  Posted by: cityguy
  When: 17/03/2013 at 03:44:48

 Collision Class?
  Posted by: Da_Boom
  When: 16/03/2013 at 03:44:42

 Tree update
  Posted by: Anonymous
  When: 15/03/2013 at 21:11:22

 XNA 4.0
  Posted by: Anonymous
  When: 15/03/2013 at 19:43:57

 Error when I try to run.
  Posted by: Anonymous
  When: 15/03/2013 at 19:21:06

 Error With the Effect File
  Posted by: Anonymous
  When: 15/03/2013 at 18:21:01

 Can only get shadowmap
  Posted by: Anonymous
  When: 15/03/2013 at 15:48:52

 Vertex and Pixel Shader Versions?
  Posted by: Anonymous
  When: 15/03/2013 at 15:07:16

 Unsupported properties
  Posted by: Anonymous
  When: 15/03/2013 at 14:23:00

 Problem Loading Skybox
  Posted by: Rana
  When: 15/03/2013 at 10:34:45

 Black Screen Of Death - Help!
  Posted by: Anonymous
  When: 15/03/2013 at 03:43:43

 2.0 anyone?
  Posted by: Anonymous
  When: 15/03/2013 at 02:19:48

 Defitinition of tha rotation axis
  Posted by: Anonymous
  When: 15/03/2013 at 00:55:14




Topic: Cylinders



  
Goto parent category
  
Create a new user account


   Cylinders
 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.

  
Post a new reply
 





Google
 
Web www.riemers.net
If you appreciate the amount of time I spend creating and updating
these pages, feel free to donate -- any amount is welcome !
- Website design & DirectX code : Riemer Grootjans -
©2006 Riemer Grootjans


News
Home
Forum
XNA 2.0 Recipes Book (8)
XNA 3.0 Recipes Book (8)
Downloads
Extra Reading (3)
Matrices: geometrical
Matrix Mathematics
Homogenous matrices
Community Projects (1)
Tutorials (160)
XNA 4.0 using C# (89)
DirectX using C# (54)
Series 1:Terrain (14)
Opening a window
Linking to the Device
Drawing a triangle
Camera
Rotation - Translation
Indices
Terrain creation
Terrain from file
DirectInput
Importing bmp files
Colored vertices
DirectX Light basics
Mesh creation
Mesh lighting
Series 2: Flightsim (19)
Series 3: HLSL (19)
Short Tuts (2)
Resizing problem
Checking Device caps
DirectX using C++ (15)
DirectX using VB (2)