Я хотел бы повернуть меня sh вокруг оси Y, и я использую этот код для генерации меня sh:
const coinMaterial = new THREE.ShaderMaterial({
uniforms: {
rotationMatrix: { type: 'mat4', value: SHADERS.COIN_ROTATION_MATRIX }
},
wireframe: false,
side: THREE.DoubleSide,
vertexShader: SHADERS.coinRotationShader(),
fragmentShader: SHADERS.coinFragmentShader()
});
const coinGeometry = new THREE.TorusGeometry(5, 2, 8, 30);
const coinMesh = new THREE.Mesh(coinGeometry, coinMaterial);
И здесь вы можете увидеть модуль SHADERS, который генерирует матрицу вращения, и шейдеры:
export function coinRotationShader() { //vertex shader
return " \
uniform mat4 rotationMatrix; \
void main() { \
vec4 rotatedPosition = rotationMatrix * vec4(position, 1.0); \
gl_Position = projectionMatrix * modelViewMatrix * rotatedPosition; \
} \
";
}
export function coinFragmentShader() { //just applies yellow color
return " \
void main() { \
gl_FragColor = vec4(0.8, 0.8, 0, 1.0); \
} \
";
}
const ROTATION_ANGLE = (2*Math.PI) / 60.0; //angle of rotation
export const COIN_ROTATION_MATRIX = createCoinRotationMatrix();
function createCoinRotationMatrix() { //rotates around Y axis
const rotationMatrix = new THREE.Matrix4();
rotationMatrix.makeRotationY(ROTATION_ANGLE);
return rotationMatrix;
}
Объект, однако, не вращается . Он отображается в правильном положении и имеет желтый цвет, поэтому фрагментный шейдер работает. Я неправильно строю матрицу или неправильно использую ее в вершинном шейдере?