Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Навигация в трехмерном пространстве от первого лица

Автор:   •  Май 27, 2023  •  Лабораторная работа  •  2,689 Слов (11 Страниц)  •  124 Просмотры

Страница 1 из 11

МИНОБРНАУКИ РОССИИ

Федеральное государственное бюджетное образовательное учреждение

высшего образования «Ижевский государственный технический университет

имени М.Т. Калашникова»

Институт «Информатика и вычислительная техника»

Кафедра «Автоматизированные системы обработки информации и управления»

Отчет

по лабораторной работе №4

по дисциплине «Компьютерная графика»

на тему «Навигация в трехмерном пространстве от первого лица. Часть 2».

Выполнил:

студент гр. Б20-782-2

Р. А. Соловьев  

Принял:

к.т.н., доцент кафедры АСОИУ

А. Н. Соловьева

Ижевск 2023

  1. Постановка задачи

Для выполнения лабораторной работы используется библиотека Three.js и элемент управления PointerLockControls, предоставляющий доступ к Pointer Lock API. Трехмерная сцена содержит горизонтальную поверхность, на которой размещены несколько параллелепипедов. Камера размещена над центром поверхности. Перемещение мыши задает поворот камеры. Нажатие пробела запускает прыжок.

  1. Перемещение камеры
  1. Прыжок камеры

Входные данные: координаты камеры, время delta, g, состояние isJumping, состояние isOnFloor, Vy = 20.

Выходные параметры: новые координаты камеры.

Шаги алгоритма:

  1. пересчитать соотношение сторон;
  2. isJumping = true?

2.1 если да, то:

2.1.1 вычислить новую координату y = Vy*delta – 1/2*g*delta^2

3. проверить, находится ли камера на полу;

3.1 если да, то:

3.1.1 Vy = 20;

3.1.2 y = -10;

3.1.3 isJumping = false

  1. Перемещение камеры

Входные данные: координаты камеры, время delta, ray_origin, dir, raycaster

Выходные параметры: новые координаты камеры

Шаги алгоритма:

1. ray_origin = текущая позиция камеры

2. dir = направление взгляда камеры

3. если движение вперед:

3.1 преобразовать dir для движения вперед вектором (x, 0, z)

4. если движение назад

4.1 преобразовать dir для движения назад вектором (-x, 0, -z)

5. если движение вправо

5.1 преобразовать dir для движения назад вектором (-z, 0, x)

6. если движение влево

6.1 преобразовать dir для движения назад вектором (z, 0, -x)

7. установить объекту raycaster векторы ray_origin и dir

8. найти ближайшее пересечение

9. если расстояние до объекта > 2.5:

9.1 переместить камеру в нужном направлении

  1. Текст программы

На листинге 3.1 приведен текст программы, написанной на языке JavaScript.

<!DOCTYPE html>

<html>

  <head>

    <meta charset="utf-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">

    <title>Лабораторная работа №4</title>

  </head>

  <body>

<canvas id="c" width="600" height="400"

></canvas>

<!-- Для совместимости с браузерами, в которых не поддерживаются карты импортов (import map) -->

<script async src="https://unpkg.com/es-module-shims@1.3.6/dist/es-module-shims.js"></script>  

<script  type="importmap">{

  "imports": {

      "three": "https://threejs.org/build/three.module.js",

      "three/addons/": "https://threejs.org/examples/jsm/"

  }

}</script>

  </body>

<script type="module">

    import * as THREE from 'three';

    import {PointerLockControls} from 

...

Скачать:   txt (12.3 Kb)   pdf (195.5 Kb)   docx (110.9 Kb)  
Продолжить читать еще 10 страниц(ы) »
Доступно только на Essays.club