Jump to content

  • Log In with Google      Sign In   
  • Create Account

Banner advertising on our site currently available from just $5!


1. Learn about the promo. 2. Sign up for GDNet+. 3. Set up your advert!


#ActualAllEightUp

Posted 19 May 2013 - 11:58 AM

Can you provide a little bit of code so I can understand you better?

 

Let's see if I can modify your code (trying to remember D3DX, forgive any goofs please. smile.png):

 

 

D3DXVECTOR3 GetRandomVector()

{
  // Set these to normalized vectors as appropriate.
 // We'll use +z as direction and +y as up vector.
  D3DXVECTOR3 dirVec( 0.0f, 0.0f, 1.0f );
  D3DXVECTOR3 upVec( 0.0f, 1.0f, 0.0f );


  D3DXVECTOR3 vVector;
 
  const float  angleRange = D3DX_PI/2.0f; // 45 degree's.
 
  float angle  = GetRandMinMax( 0.0f, 2.0f * D3DX_PI );  // Anywhere in the full circle.
  float range = GetRandMinMax( 0.0f, tan( angleRange ) );
 
  D3DXVECTOR3 offset = upVector * range;
 
  // Hmm.  No D3DX for vector around vector rotation.  Bah..
  float s = sin( angle );
  float c = cos( angle );
  D3DXVECTOR3 temp(
    offset.x*(dirVec.x*dirVec.x*(1-c)+c) + offset.y * (dirVec.x*dirVec.y*(1-c)-dirVec.z*s) + offset.z*(dirVec.x*dirVec.z*(1-c)+dirVec.y*s),
   offset.x*(dirVec.x*dirVec.y*(1-c)+dirVec.z*s) + offset.y*(dirVec.y*dirVec.y*(1-c)+c) + offset.z*(dirVec.y*dirVec.z*(1-c_-dirVec.x*s),
   offset.x*(dirVec.x*dirVec.z*(1-c)-dirVec.y*s) + offset.y*(dirVec.y*dirVec.z*(1-c)+dirVec.x*s)+offset.z*(dirVec.z*dirVec.z*(1-c)+c)
 );
 
  temp += dirVec;
  D3DXVec3Normalize( vVector, &temp );
 
  return vVector;

}

 

I probably goofed something up in there but it should be pretty close.

 

In general though, you really should learn the math bits a better, it takes time but everything you do is going to be math related eventually.


#2AllEightUp

Posted 19 May 2013 - 10:26 AM

Can you provide a little bit of code so I can understand you better?

 

Let's see if I can modify your code (trying to remember D3DX, forgive any goofs please. smile.png):

 

 

D3DXVECTOR3 GetRandomVector()

{
  // Set these to normalized vectors as appropriate.
 // We'll use +z as direction and +y as up vector.
  D3DXVECTOR3 dirVec( 0.0f, 0.0f, 1.0f );
  D3DXVECTOR3 upVec( 0.0f, 1.0f, 0.0f );


  D3DXVECTOR3 vVector;
 
  const float  angleRange = D3DX_PI/2.0f; // 45 degree's.
 
  float angle  = GetRandMinMax( 0.0f, 2.0f * D3DX_PI );  // Anywhere in the full circle.
  float range = GetRandMinMax( 0.0f, tan( angleRange ) );
 
  D3DXVECTOR3 offset = upVector * range;
 
  // Hmm.  No D3DX for vector around vector rotation.  Bah..
  float s = sin( angle );
  float c = cos( angle );
  D3DXVECTOR3 temp(
    offset.x*(dirVec.x*dirVec.x*(1-c)+c) + offset.y * (dirVec.x*dirVec.y*(1-c)-dirVec.z*s) + offset.z*(dirVec.x*dirVec.z*(1-c)+dirVec.y*s),
   offset.x*(dirVec.x*dirVec.y*(1-c)+axis.z*s) + offset.y*(dirVec.y*dirVec.y*(1-c)+c) + offset.z*(dirVec.y*dirVec.z*(1-c_-dirVec.x*s),
   offset.x*(dirVec.x*dirVec.z*(1-c)-axis.y*s) + offset.y*(dirVec.y*dirVec.z*(1-c)+dirVec.x*s)+offset.z*(dirVec.z*dirVec.z*(1-c)+c)
 );
 
  temp += dirVec;
  D3DXVec3Normalize( vVector, &temp );
 
  return vVector;

}

 

I probably goofed something up in there but it should be pretty close.

 

In general though, you really should learn the math bits a better, it takes time but everything you do is going to be math related eventually.


#1AllEightUp

Posted 18 May 2013 - 08:19 PM

Can you provide a little bit of code so I can understand you better?

 

Let's see if I can modify your code (trying to remember D3DX, forgive any goofs please. :)):

 

D3DXVECTOR3 GetRandomVector()

{
  // Set these to normalized vectors as appropriate.
 // We'll use +z as direction and +y as up vector.
  D3DXVECTOR3 dirVec( 0.0f, 0.0f, 1.0f );
  D3DXVECTOR3 upVec( 0.0f, 1.0f, 0.0f );


  D3DXVECTOR3 vVector;
 
  const float  angleRange = D3DX_PI/2.0f; // 45 degree's.
 
  float angle  = GetRandMinMax( 0.0f, 2.0f * D3DX_PI );  // Anywhere in the full circle.
  float range = GetRandMinMax( 0.0f, tan( angleRange ) );
 
  D3DXVECTOR3 offset = upVector * range;
 
  // Hmm.  No D3DX for vector around vector rotation.  Bah..
  float s = sin( angle );
  float c = cos( angle );
  D3DXVECTOR3 temp(
    offset.x*(dirVec.x*dirVec.x*(1-c)+c) + offset.y * (dirVec.x*dirVec.y*(1-c)-dirVec.z*s) + offset.z*(dirVec.x*dirVec.z*(1-c)+dirVec.y*s),
   offset.x*(dirVec.x*dirVec.y*(1-c)+axis.z*s) + offset.y*(dirVec.y*dirVec.y*(1-c)+c) + offset.z*(dirVec.y*axis.z*(1-c_-dirVec.x*s),
   offset.x*(dirVec.x*dirVec.z*(1-c)-axis.y*s) + offset.y*(dirVec.y*dirVec.z*(1-c)+dirVec.x*s)+offset.z*(dirVec.z*dirVec.z*(1-c)+c)
 );
 
  temp += dirVec;
  D3DXVec3Normalize( vVector, &temp );
 
  return vVector;

}

 

I probably goofed something up in there but it should be pretty close.

 

In general though, you really should learn the math bits a better, it takes time but everything you do is going to be math related eventually.


PARTNERS