Spec-Zone.ru › Web APIs

Анимация объектов с помощью WebGL

  • Предыдущая
  • Следующая

Поворот квадрата

В этом примере мы будем вращать камеру. Таким образом, будет казаться, что мы вращаем квадрат. Сначала нам понадобятся переменные для отслеживания текущего вращения камеры.

Примечание: Добавьте этот код в начало скрипта "webgl-demo.js":

let squareRotation = 0.0;
let deltaTime = 0;

Теперь нам нужно обновить функцию drawScene(), чтобы при отрисовке применять текущее вращение к камере. После перемещения камеры в начальную позицию для отрисовки квадрата, мы применяем вращение.

Примечание: В модуле "draw-scene.js" обновите объявление функции drawScene(), чтобы она могла принимать вращение:

function drawScene(gl, programInfo, buffers, squareRotation) {

Примечание: В функции drawScene(), сразу после строки mat4.translate(), добавьте этот код:

mat4.rotate(
  modelViewMatrix, // destination matrix
  modelViewMatrix, // matrix to rotate
  squareRotation, // amount to rotate in radians
  [0, 0, 1],
); // axis to rotate around

Это вращает матрицу modelView на текущее значение squareRotation, вокруг оси Z.

Для анимации нам нужно добавить код, который будет изменять значение squareRotation со временем.

Примечание: Добавьте этот код в конец функции main(), заменив существующий вызов drawScene():

let then = 0;

// Draw the scene repeatedly
function render(now) {
  now *= 0.001; // convert to seconds
  deltaTime = now - then;
  then = now;

  drawScene(gl, programInfo, buffers, squareRotation);
  squareRotation += deltaTime;

  requestAnimationFrame(render);
}
requestAnimationFrame(render);

Этот код использует requestAnimationFrame, чтобы попросить браузер вызывать функцию render в каждом кадре. requestAnimationFrame передаёт нам время в миллисекундах с момента загрузки страницы. Мы преобразуем его во секунды, а затем вычитаем из него последнее время, чтобы вычислить deltaTime, количество секунд, прошедших с момента рендеринга предыдущего кадра.

Наконец, мы обновляем squareRotation.

Посмотреть весь код | Открыть демонстрацию в новой странице

  • Предыдущая
  • Следующая

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Tutorial/Animating_objects_with_WebGL

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API