最新代码
This commit is contained in:
68
public/sdk/three/jsm/nodes/utils/RotateNode.js
Normal file
68
public/sdk/three/jsm/nodes/utils/RotateNode.js
Normal file
@ -0,0 +1,68 @@
|
||||
import TempNode from '../core/TempNode.js';
|
||||
import { addNodeClass } from '../core/Node.js';
|
||||
import {
|
||||
addNodeElement,
|
||||
nodeProxy,
|
||||
vec4,
|
||||
mat2,
|
||||
mat4,
|
||||
} from '../shadernode/ShaderNode.js';
|
||||
import { cos, sin } from '../math/MathNode.js';
|
||||
|
||||
class RotateNode extends TempNode {
|
||||
|
||||
constructor( positionNode, rotationNode ) {
|
||||
|
||||
super();
|
||||
|
||||
this.positionNode = positionNode;
|
||||
this.rotationNode = rotationNode;
|
||||
|
||||
}
|
||||
|
||||
getNodeType( builder ) {
|
||||
|
||||
return this.positionNode.getNodeType( builder );
|
||||
|
||||
}
|
||||
|
||||
setup( builder ) {
|
||||
|
||||
const { rotationNode, positionNode } = this;
|
||||
|
||||
const nodeType = this.getNodeType( builder );
|
||||
|
||||
if ( nodeType === 'vec2' ) {
|
||||
|
||||
const cosAngle = rotationNode.cos();
|
||||
const sinAngle = rotationNode.sin();
|
||||
|
||||
const rotationMatrix = mat2(
|
||||
cosAngle, sinAngle,
|
||||
sinAngle.negate(), cosAngle
|
||||
);
|
||||
|
||||
return rotationMatrix.mul( positionNode );
|
||||
|
||||
} else {
|
||||
|
||||
const rotation = rotationNode;
|
||||
const rotationXMatrix = mat4( vec4( 1.0, 0.0, 0.0, 0.0 ), vec4( 0.0, cos( rotation.x ), sin( rotation.x ).negate(), 0.0 ), vec4( 0.0, sin( rotation.x ), cos( rotation.x ), 0.0 ), vec4( 0.0, 0.0, 0.0, 1.0 ) );
|
||||
const rotationYMatrix = mat4( vec4( cos( rotation.y ), 0.0, sin( rotation.y ), 0.0 ), vec4( 0.0, 1.0, 0.0, 0.0 ), vec4( sin( rotation.y ).negate(), 0.0, cos( rotation.y ), 0.0 ), vec4( 0.0, 0.0, 0.0, 1.0 ) );
|
||||
const rotationZMatrix = mat4( vec4( cos( rotation.z ), sin( rotation.z ).negate(), 0.0, 0.0 ), vec4( sin( rotation.z ), cos( rotation.z ), 0.0, 0.0 ), vec4( 0.0, 0.0, 1.0, 0.0 ), vec4( 0.0, 0.0, 0.0, 1.0 ) );
|
||||
|
||||
return rotationXMatrix.mul( rotationYMatrix ).mul( rotationZMatrix ).mul( vec4( positionNode, 1.0 ) ).xyz;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default RotateNode;
|
||||
|
||||
export const rotate = nodeProxy( RotateNode );
|
||||
|
||||
addNodeElement( 'rotate', rotate );
|
||||
|
||||
addNodeClass( 'RotateNode', RotateNode );
|
Reference in New Issue
Block a user