本文整理汇总了TypeScript中babylonjs/Maths/math.Vector3类的典型用法代码示例。如果您正苦于以下问题:TypeScript Vector3类的具体用法?TypeScript Vector3怎么用?TypeScript Vector3使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Vector3类的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的TypeScript代码示例。
示例1: _CalculateMinMaxPositions
/**
* Calculates the minimum and maximum values of an array of position floats
* @param positions Positions array of a mesh
* @param vertexStart Starting vertex offset to calculate min and max values
* @param vertexCount Number of vertices to check for min and max values
* @returns min number array and max number array
*/
public static _CalculateMinMaxPositions(positions: FloatArray, vertexStart: number, vertexCount: number, convertToRightHandedSystem: boolean): { min: number[], max: number[] } {
const min = [Infinity, Infinity, Infinity];
const max = [-Infinity, -Infinity, -Infinity];
const positionStrideSize = 3;
let indexOffset: number;
let position: Vector3;
let vector: number[];
if (vertexCount) {
for (let i = vertexStart, length = vertexStart + vertexCount; i < length; ++i) {
indexOffset = positionStrideSize * i;
position = Vector3.FromArray(positions, indexOffset);
if (convertToRightHandedSystem) {
_GLTFUtilities._GetRightHandedPositionVector3FromRef(position);
}
vector = position.asArray();
for (let j = 0; j < positionStrideSize; ++j) {
let num = vector[j];
if (num < min[j]) {
min[j] = num;
}
if (num > max[j]) {
max[j] = num;
}
++indexOffset;
}
}
}
return { min, max };
}
示例2: _mapGridNode
protected _mapGridNode(control: Control3D, nodePosition: Vector3) {
let mesh = control.mesh;
if (!mesh) {
return;
}
control.position = nodePosition.clone();
let target = Tmp.Vector3[0];
target.copyFrom(nodePosition);
switch (this.orientation) {
case Container3D.FACEORIGIN_ORIENTATION:
case Container3D.FACEFORWARD_ORIENTATION:
target.addInPlace(new Vector3(0, 0, 1));
mesh.lookAt(target);
break;
case Container3D.FACEFORWARDREVERSED_ORIENTATION:
case Container3D.FACEORIGINREVERSED_ORIENTATION:
target.addInPlace(new Vector3(0, 0, -1));
mesh.lookAt(target);
break;
}
}
示例3: function
let getFaceData = function(indices: any, vertices: any, i: number) {
let id = [indices[i] * 3, indices[i + 1] * 3, indices[i + 2] * 3];
let v = [
new Vector3(vertices[id[0]], vertices[id[0] + 1], vertices[id[0] + 2]),
new Vector3(vertices[id[1]], vertices[id[1] + 1], vertices[id[1] + 2]),
new Vector3(vertices[id[2]], vertices[id[2] + 1], vertices[id[2] + 2])
];
let p1p2 = v[0].subtract(v[1]);
let p3p2 = v[2].subtract(v[1]);
let n = (Vector3.Cross(p1p2, p3p2)).normalize();
return {v, n};
};
示例4: _AddKeyframeValue
/**
* Adds a key frame value
* @param keyFrame
* @param animation
* @param outputs
* @param animationChannelTargetPath
* @param basePositionRotationOrScale
* @param convertToRightHandedSystem
* @param useQuaternion
*/
private static _AddKeyframeValue(keyFrame: IAnimationKey, animation: Animation, outputs: number[][], animationChannelTargetPath: AnimationChannelTargetPath, babylonTransformNode: TransformNode, convertToRightHandedSystem: boolean, useQuaternion: boolean) {
let value: number[];
let newPositionRotationOrScale: Nullable<Vector3 | Quaternion>;
const animationType = animation.dataType;
if (animationType === Animation.ANIMATIONTYPE_VECTOR3) {
value = keyFrame.value.asArray();
if (animationChannelTargetPath === AnimationChannelTargetPath.ROTATION) {
const array = Vector3.FromArray(value);
let rotationQuaternion = Quaternion.RotationYawPitchRoll(array.y, array.x, array.z);
if (convertToRightHandedSystem) {
_GLTFUtilities._GetRightHandedQuaternionFromRef(rotationQuaternion);
if (!babylonTransformNode.parent) {
rotationQuaternion = Quaternion.FromArray([0, 1, 0, 0]).multiply(rotationQuaternion);
}
}
value = rotationQuaternion.asArray();
}
else if (animationChannelTargetPath === AnimationChannelTargetPath.TRANSLATION) {
if (convertToRightHandedSystem) {
_GLTFUtilities._GetRightHandedNormalArray3FromRef(value);
if (!babylonTransformNode.parent) {
value[0] *= -1;
value[2] *= -1;
}
}
}
outputs.push(value); // scale vector.
}
else if (animationType === Animation.ANIMATIONTYPE_FLOAT) { // handles single component x, y, z or w component animation by using a base property and animating over a component.
newPositionRotationOrScale = this._ConvertFactorToVector3OrQuaternion(keyFrame.value as number, babylonTransformNode, animation, animationType, animationChannelTargetPath, convertToRightHandedSystem, useQuaternion);
if (newPositionRotationOrScale) {
if (animationChannelTargetPath === AnimationChannelTargetPath.ROTATION) {
let posRotScale = useQuaternion ? newPositionRotationOrScale as Quaternion : Quaternion.RotationYawPitchRoll(newPositionRotationOrScale.y, newPositionRotationOrScale.x, newPositionRotationOrScale.z).normalize();
if (convertToRightHandedSystem) {
_GLTFUtilities._GetRightHandedQuaternionFromRef(posRotScale);
if (!babylonTransformNode.parent) {
posRotScale = Quaternion.FromArray([0, 1, 0, 0]).multiply(posRotScale);
}
}
outputs.push(posRotScale.asArray());
}
else if (animationChannelTargetPath === AnimationChannelTargetPath.TRANSLATION) {
if (convertToRightHandedSystem) {
_GLTFUtilities._GetRightHandedNormalVector3FromRef(newPositionRotationOrScale as Vector3);
if (!babylonTransformNode.parent) {
newPositionRotationOrScale.x *= -1;
newPositionRotationOrScale.z *= -1;
}
}
}
outputs.push(newPositionRotationOrScale.asArray());
}
}
else if (animationType === Animation.ANIMATIONTYPE_QUATERNION) {
value = (keyFrame.value as Quaternion).normalize().asArray();
if (convertToRightHandedSystem) {
_GLTFUtilities._GetRightHandedQuaternionArrayFromRef(value);
if (!babylonTransformNode.parent) {
value = Quaternion.FromArray([0, 1, 0, 0]).multiply(Quaternion.FromArray(value)).asArray();
}
}
outputs.push(value);
}
else {
Tools.Error('glTFAnimation: Unsupported key frame values for animation!');
}
}
示例5: _ConvertFactorToVector3OrQuaternion
private static _ConvertFactorToVector3OrQuaternion(factor: number, babylonTransformNode: TransformNode, animation: Animation, animationType: number, animationChannelTargetPath: AnimationChannelTargetPath, convertToRightHandedSystem: boolean, useQuaternion: boolean): Nullable<Vector3 | Quaternion> {
let property: string[];
let componentName: string;
let value: Nullable<Quaternion | Vector3> = null;
const basePositionRotationOrScale = _GLTFAnimation._GetBasePositionRotationOrScale(babylonTransformNode, animationChannelTargetPath, convertToRightHandedSystem, useQuaternion);
if (animationType === Animation.ANIMATIONTYPE_FLOAT) { // handles single component x, y, z or w component animation by using a base property and animating over a component.
property = animation.targetProperty.split('.');
componentName = property ? property[1] : ''; // x, y, or z component
value = useQuaternion ? Quaternion.FromArray(basePositionRotationOrScale).normalize() : Vector3.FromArray(basePositionRotationOrScale);
switch (componentName) {
case 'x': {
value[componentName] = (convertToRightHandedSystem && useQuaternion && (animationChannelTargetPath !== AnimationChannelTargetPath.SCALE)) ? -factor : factor;
break;
}
case 'y': {
value[componentName] = (convertToRightHandedSystem && useQuaternion && (animationChannelTargetPath !== AnimationChannelTargetPath.SCALE)) ? -factor : factor;
break;
}
case 'z': {
value[componentName] = (convertToRightHandedSystem && !useQuaternion && (animationChannelTargetPath !== AnimationChannelTargetPath.SCALE)) ? -factor : factor;
break;
}
case 'w': {
(value as Quaternion).w = factor;
break;
}
default: {
Tools.Error(`glTFAnimation: Unsupported component type "${componentName}" for scale animation!`);
}
}
}
return value;
}