🎉 Celebrating 25 Years of GameDev.net! 🎉

Not many can claim 25 years on the Internet! Join us in celebrating this milestone. Learn more about our history, and thank you for being a part of our community!

Orientation Vector

posted in the game for project unirule
Published December 31, 2016
Advertisement

The past couple weeks I've been working on a custom class which I call an Ovector, or Orientation Vector. It's builds off of the THREE.js Vector3() class.

With the Ovector Class I can identify any three dimensional position in the scene, and then orientate it by giving it a direction to face, and an up axis so it orientates itself accordingly. The beauty of this class is that it has an internal InheritFrom function that acts a lot like lego blocks. Each new Ovector builds off of a previous Ovector.

The inheritFrom function asks for the following:

inheritFrom( x , distance , rotation , F1 , F2 , plane )// x: is the direction GP vector for the next position// F1: is the origin GP vector for the next pointAt vector// F2: is the direction GP vecotr for the next pointAt vector// this.position and x draw a line, so do F1 and F2.
	In the following pictures each Ovector is displayed with Arrows, Blue for Up, Red for Front, White for Right.


Screenshot from 2016-12-31 09-57-48.png
The picture above was generated by the code below.


//orientationVector requires the following:
// position Vector , scale , reference plane normal ( if none provided then one is generated )

var startingOrientationVector = new orientationVector( 
    
  // quickRaycaste requires the following:
  // origin vector , destination vector , minimum length , maximum length , mesh to intersect , return index ( if -1 then all indexes )
  quickRaycaste( 
    quickVector( randomNumber() , randomNumber() , randomNumber() ).normalize().multiplyScalar(11) , 
      sphereCenter , 
      0 , 
      10 , 
      targetGeometryGlobalMesh , 
      0 
  ).point.clone() , 
  editorParameters.unitScale 
); 

var nextOrientationVector = [];

nextOrientationVector.push( startingOrientationVector.inheritFrom( startingOrientationVector.front , 100 , 1 , startingOrientationVector.position );
                           
for( var i=0; i<55; i++){ 
  nextOrientationVector.push( nextOrientationVector[i].inheritFrom( nextOrientationVector[i].front , 100 , 1 , nextOrientationVector[i].position );
}


The newly created Ovectors do not inherit an orientation Plane to align themselves to, so they align to the surface to of the sphere instead.


Screenshot from 2016-12-31 09-56-39.png
In the picture above the same Ovectors are given a plane which to fix themselves to.
All that is added to the code is the following:


nextOrientationVector.push( nextOrientationVector[i].inheritFrom( nextOrientationVector[i].front , 100 , 1 , nextOrientationVector[i].position , startingOrientationVector.plane );

The 

1 likes 0 comments

Comments

Nobody has left a comment. You can be the first!
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Profile
Author
Advertisement
Advertisement