Giter VIP home page Giter VIP logo

kgproject's People

Contributors

noviyblock avatar polyarnost avatar corodod avatar

Stargazers

Daria Merkushina avatar  avatar

Watchers

 avatar

kgproject's Issues

3.3 Текстура и освещение

Используя уже написанный метод, можно легко дополнить программу наложением текстуры (её как картинку следует подгружать в меню). А после следует реализовать простейшую модель освещения. Источник освещения можно привязывать к текущей камере. Используя сглаживание нормалей, вы сможете мягко опоясывать объекты светом.

Доработки


1

public static Point2f vertexToPoint(final Vector3f vertex, final int width, final int height) {

По названию vertexToPoint не очевидно, что именно делает метод. Возможно, название projectedPointToScreenCoordinates или ndcToScreenCoordinates отражало бы смысл метода лучше.


2

Можно использовать уже готовые векторы для хранения параметров преобразований вместо скаляров. Например,

    private Vector3f rotationAngles;
    private Vector3f scale;

3

public void offset(int index) {

Неочевидное название метода.


4

Лучше не сравнивать вещественные числа оператором ==. Кроме того, метод может быть упрощён.
То же самое касается некоторых других сравнений с float'ами.


5

В проекте есть несколько очень похожих методов рисования линий. Можно вынести в общий метод.


6

Два метода отрисовки (сетки и растеризованных полигонов) содержат почти одинаковый код. Можно их объединить.

7

private HashMap<AffineModelTransformer, ModelSceneOptions> models;

Нерационально используется словарь. Можно, например, объединить данные модели в отдельном классе, а ключом словаря сделать название модели.

1.6 Деплой

Провести финальную работу по деплою приложения. При последней сдаче его следует запускать не из среды разработки, а как самостоятельное портативное приложение.

1.2 Сцена

Сейчас в программе только одна модель. Нужно добавить работу с несколькими. При этом должна остаться возможность перемещать, вращать и как-то изменять (см. работу другого студента) только одну из них. Продумайте, как можно пользователю выбирать, какая/какие (множественный вариант сложнее в реализации, но интереснее) из моделей сейчас активные, т.е. выбраны для применения разных трансформаций, сохранения и т.д. В этом пункте очень важен выбор грамотной архитектуры внутри приложения. Можно обсудить её с товарищами.

3.2 Растеризация полигонов

Добавить заполнение полигонов одним цветом, используя растеризацию треугольников, написанную студентом во втором задании. Учтите, что вам потребуется алгоритм Z-буффера, чтобы при рендере задние полигоны не вылезали на передние.

2.2 Вектора-столбцы

На данный момент во всех матричных преобразованиях в коде предполагается, что мы работаем с векторами-строками. Необходимо переделать методы так, чтобы векторы были столбцами. Помните, что вам придётся транспонировать матрицы и поменять порядок их перемножения.

3.5 Несколько камер

Нужно добавить поддержку нескольких камер в сцене. Задание похоже на добавление нескольких моделей, так что имеет смысл обсудить архитектуру приложения с однокурсниками. Должна быть возможность создавать, удалять камеры, а также переключаться между ними. Сами камеры тоже могут быть видны на сцене в виде трехмерных моделей.

2.5 Управление камерой

Сейчас взаимодействие с камерой не очень удобное, используется только клавиатура. Но можно переделать его, добавив в систему мышь. За основу можете взять управление из компьютерной игры или приложения для работы с трехмерной графикой. Здесь хорошо бы продумать горячие клавиши и заодно упростить управление моделями.

1.5 Обработка ошибок

Пока это касается только ObjReader, но вы можете продумать и другие случаи. Модуль выплёвывает exception’ы, если приходит некорректный файл. Эти исключения пока никак не используются. А нужно выводить окошко с ошибкой, чтобы пользователь мог обдумать свое поведение и щелкнуть “ок”, а не получить зависание или падение программы.

1.1 Загрузка и чтение моделей

Вместо сырого ObjReader должна быть качественная протестированная реализация: ваша или другого студента, если вы ее не делали в третьей задаче. А также должна быть возможность сохранения модели с помощью ObjWriter по кнопке в меню.

3.4 Режимы отрисовки

Когда все описанные выше пункты будут готовы, надо добавить в программу возможность переключения между режимами. Чтобы легко перебирать все возможные случаи, предлагается оформление в виде галочек (ваши названия могут отличаться):

  • Рисовать полигональную сетку
  • Использовать текстуру
  • Использовать освещение
    Так, например, если не выбрана ни одна галочка, модель окрашивается статическим цветом, выбор которого, кстати, можно вынести в меню. В этом режиме для оптимизации можно вызывать не наш метод отрисовки треугольника, а библиотечный. Если добавляется галочка использовать освещение, цвет по модели становится то ярче, то темнее. При добавлении использовать
    текстуру он подменяется на те значения пикселей, что были на текстуре. А галочка рисовать полигональную сетку нарисует поверх всего контуры полигонов. Тут необязательно, но тоже было бы хорошо добавить Z-буффер (для этого придется вставить самостоятельную растеризацию прямых).

1.3 Удаление части модели

На основе кода других студентов добавьте возможность удалять вершины и полигоны внутри программы. Интерфейс продумайте самостоятельно.

2.4 Трансформация модели

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

1.4 Интерфейс

Эти пункты, а также то, что выполняют другие члены команды, обязывает развивать интерфейс программы. В вашу зону ответственности входит написание его таким, чтобы с ним было удобно работать. А еще хорошо бы продумать стиль приложения: добавить цвета, оформление. При желании можно сделать динамическое переключение тем: например, "светлая/темная".

2.1 Модуль для математики

В программе в качестве библиотеки для работы с линейной алгеброй используется javax.vecmath. А нужно использовать свой модуль, либо то, что реализовал ваш однокурсник, если у вас не было такого варианта в третьей задаче. То есть нужно переделать всю работу с математикой на наш собственный пакет Math.

2.3 Аффинные преобразования

В программе реализована только часть графического конвейера. Нет перегонки из локальных координат в мировые координаты сцены. Вам нужно реализовать её, то есть добавить аффинные преобразования: масштабирование, вращение, перенос. Можете использовать наработки студентов из предыдущей задачи. И не забудьте про тесты, без них визуально может быть сложно отследить баги.

3.1 Подготовка к отрисовке

Добавить возможность триангуляции модели и вычисления её нормалей после загрузки. Можно использовать код однокурсников из третьей задачи. Нормали следует пересчитывать даже если те сохранены в файле, потому что мы не можем им доверять.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.