создание 3Д движка на j2me
Вложений: 1
Сделал простенький 3д движок для мобильного :) .
В движке можно рисовать полигоны(треугольники) и линии. Теперь меня интерисует как сделать определение не видимых полигонов? Знаю только, что это делается с помощью нормалей (сторона в которую смотрит полигон). Но не пойму как эта нормаль вычисляется или поворачивается или что-то еще. И кто может сделать скрипт экспорта для блендера в мой формат? Я пытался сделать, но из-за какого-то бага в блендере не смог. И питона я не знаю :dontknow: . И если знаете как еще, что-то в нём улучшить, то пишите ;) . |
Ответ: создание 3Д движка на j2me
фляг в руки и пешком по свету по моему туут явйу хорошо знают только ты и винт!
|
Ответ: создание 3Д движка на j2me
Вообще-то вопрос алгоритмический, а не конкретно по Java.
|
Ответ: создание 3Д движка на j2me
Мой движок это проект на j2me. Так что в том разделе.
Эта же http://forum.boolean.name/showthread.php?t=4621&page=8 тема не в разделе алгоритмы хотя там тоже обсуждались алгоритмы. Вообщем меня интересует тема своего 3д движка на мобильном. Хотя у меня не полностью свой движок :-D т.к. используются матрицы из м3г. |
Ответ: создание 3Д движка на j2me
Да я не тебе, а @llien'у это сказал =)
|
Ответ: создание 3Д движка на j2me
пасиб за заменчание учту
|
Ответ: создание 3Д движка на j2me
Lit}{ говорит: Слуш вишмастер мы с тобой заняты одним и тем же.
Советую пойти через углы в двух плоскостях ХУ и ХZ. Формируеш ближайшие плоскости и указываеш чтобы все что за ними не рисовалось. Позже могу текст на ВБ 6.0 выложить коли надо. |
Ответ: создание 3Д движка на j2me
если че я постараюсь переработать vb текст на midlet pascal
|
Ответ: создание 3Д движка на j2me
Тоесть ты предлогаеш сделать так: если полигон или слишком далеко, или не виден на дисплее, то не рисовать. Так? У меня, если полигон дальше чем G3D.rang или ближе чем 0 по Z оси, то полигон не добавляется в з-буфер.
Можеш показать, что у тебя получилось? |
Ответ: создание 3Д движка на j2me
Скажите нормали записуются в файл-модель? Или они уже в оперативе создаются и поворачиваются в сторону полигона.
Я так понимаю в файл-модель НАДО записать нормаль, чтобы знать с какой стороны полигона она. Вот только не пойму в каком виде она записуется туда. Просто как тремя цифрами которые означают направление. Или типа слево или справо. Или как? Есть ли какие нибудь движки на ж2ме? Или простенькие на яваСЕ? |
Ответ: создание 3Д движка на j2me
Никто ниче не знает?
Вообщем как я понял нормаль записуется в файл-модель. И при повороте модели нормали умножаются на матрицу. Правельно? |
Ответ: создание 3Д движка на j2me
На счет записи нормалей в файл - все зависит от формата файла,
на счет поворота - да, нормаль можно повернуть, умножив на матрицу поворота. |
Ответ: создание 3Д движка на j2me
Определить видимость полигона можно через вектроное произведение векторов. Тоесть если есть полигон с вершинами ABC нужно взять произведение ABxBC, и получим вектор, перпендикулярный полигону(тобиш нормаль). Потом читаем скалярное произведение вектора направления камеры и смотрим на результат. Если я не ошибаюсь, если меньше 0, то полигон видим. Кстати хорошая справка при создании своего движка без АПИ - книга Андре Ламота "ПРОГРАММИРОВАНИЕ ТРЕХМЕРНЫХ ИГР ДЛЯ WINDOWS".
|
Ответ: создание 3Д движка на j2me
Если самому вычислять направление нормали, то нормаль может оказатся не стой стороны полигона.
Наверна надо записывать нормаль в файл и при повороте умножать на матрицу. |
Ответ: создание 3Д движка на j2me
>Если самому вычислять направление нормали, то нормаль может оказатся не стой стороны полигона.
Не может. Есть 2 вида отсечения - CW(clockwise) и CCW(counter clockwise) для отсечения по часовой стрелке и против неё соответственно. Если мы найдём вектороное произведение векторов AB и BC, то получим перпендикуляр, направленый от рисунка к нам, если же умножим CB на BA - то наоботрот. Насколько я знаю, все нормальные графические редакторы записываю индексы вершин так, чтобы они шли по часовой стрелке. |
Ответ: создание 3Д движка на j2me
Если лицивая стророна моего полигона с той, что надо стороны, то должно работать.
Я не пойму, если надо рендерить полигон с обоих сторон, то создаются две нормали или два полигона? |
Ответ: создание 3Д движка на j2me
>Если лицивая стророна моего полигона с той, что надо стороны, то должно работать.
А как может быть лицевая сторона не с той стороны? Просто не отсекаешь его и всё. А если ты о случае, когда отсечение включено, но нужно отрендерить полик с обеих сторон, нужно создавать 2 полика. |
Ответ: создание 3Д движка на j2me
Я когда-то читал, что создаётся две нормали. Два полигона сортировать дольше. Хотя расматривая модель формата .bac(MascotCapsule) увидел, что на один полигон который рендерится со всех сторон в .bac'e два полигона.
А как четырёхугольный полигон разделить на два треугольных? А то в том .bac'e почти все четырёхугольный. Буду пытаться учить javaSE и делать конвертер из bac в мой формат. Там, кстати, нормали на каждую вершину, а не полигон. |
Ответ: создание 3Д движка на j2me
>Я когда-то читал, что создаётся две нормали.
Бред. >А как четырёхугольный полигон разделить на два треугольных? Если есть ABCD, создаешь ABC и CDA. >Там, кстати, нормали на каждую вершину, а не полигон. А кто сказал, что гдето по другому? Просто у всех 3х вершин полигона нормали одинаковые... |
Ответ: создание 3Д движка на j2me
разные нормали на вершинах нужны для освещения
|
Ответ: создание 3Д движка на j2me
Цитата:
А, вспомнил, типа для сглаживания углов.. |
Ответ: создание 3Д движка на j2me
Вложений: 2
Сделал новую версию. Добавил полигоны из 4 вершин и убрал линии. И сделал конвертер из .BAC в мой формат.
Модель там почти из 2000 вершин и 500 полигонов. ФПС - 19. |
Ответ: создание 3Д движка на j2me
А кто нибудь делал псевдо 3д игры?
Как там сделано, чтобы не рисовать лишнее? Только не в рейкастинге. П.с. На маскоте кто нибудь программировал? Может показать, что он сделал? |
Ответ: создание 3Д движка на j2me
в My3D.zip/dist только jad файл.
|
Ответ: создание 3Д движка на j2me
Вот jar http://upwap.ru/450211
|
Ответ: создание 3Д движка на j2me
Вот нашол формулы для вычисления нормалей треугольного и четырёхугольного полигона http://pmg.org.ru/nehe/nehe36.htm . Они под "Вот формула векторного произведения:" это правельный формулы?
А то я не пойму как вычислить нормаль четырёхугольного полигона из 3 точек. |
Ответ: создание 3Д движка на j2me
Цитата:
Цитата:
Допустим, есть 4хугольник ABCD. Считаем нормали для каждой вершины: Для вершины A: DAxAB Для вершины B: ABxBC Для вершины C: BCxCD Для вершины D: CDxDA ЗЫ: 12 фпс на эмуляторе... И Z-буфер толи вообще отсутствует, толи страшно глючит... |
Ответ: создание 3Д движка на j2me
Что значит глючит?
Z-буфер в классе G3D. |
Ответ: создание 3Д движка на j2me
Наверно точность плохая :( Ибо иногда одни полики частями пролазят через другие.
|
Ответ: создание 3Д движка на j2me
Ну это недостатки полигональной сортировки. На маскоте эта модель тоже глючит. Особенно уши глючат. Но я бы не назвал это "страшно глючит"
|
Ответ: создание 3Д движка на j2me
Цитата:
|
Ответ: создание 3Д движка на j2me
Это значит, что сортируются полигоны.
В м3г, например, пиксельная сортировка. Только это медленее. |
Ответ: создание 3Д движка на j2me
А цвет надо хранить ввиде трёх чисел или одного? Чтобы когда добавлю свет можно было делать полигоны светлее или темнее.
И как надо вычислять вершину на дисплее, чтобы при маленьком дисплее и модель была меньше? |
Ответ: создание 3Д движка на j2me
Цитата:
Цитата:
|
Ответ: создание 3Д движка на j2me
Ты представляеш, что быдет, если не сортировать полигоны?
Глаза могут быть на затылке. |
Ответ: создание 3Д движка на j2me
У меня так устроено: все полигоны добавляются в массив, а потом в этом массиве они сортируются.
А ты знаеш лучший способ? |
Ответ: создание 3Д движка на j2me
Цитата:
Цитата:
|
Ответ: создание 3Д движка на j2me
Не пойму чем твой способ отличается от моего. Можеш его описать.
|
Ответ: создание 3Д движка на j2me
Допустим есть экран некого размера. Тогда нужно кроме основной поверхности для рисования, создать ещё одну такого же размера - для глубины. При прорисовке каждого пикселя сравнивать текущее значение глубины этого пикселя с уже записаным на поверхности глубины, и, если оно больше, рисовать пиксель и записывать его глубину на ту другую поверхность. Если же глубина текущего пикселя меньше - не рисуем его и не записываем глубину. Имхо, в Java должен быть способ включить и управлять Z-буфером.
|
Ответ: создание 3Д движка на j2me
Это ты описал, то, что я назвал пиксельной сортировкой. Для мобильного и темболее своего движка это будет слишком медленно.
У меня для каждого полигона вычисляется его средняя Z координата и по ней сортируется. |
Ответ: создание 3Д движка на j2me
Кстати, я так и не понял как вычислить нормаль четырёхугольного полигона.
Я так понял: нужно просто взять первые 3 вершины и по той же формуле вычислить нормаль. Или не так? |
Ответ: создание 3Д движка на j2me
:wallbash:
Для каждой вершины свой нормаль. >Для мобильного и темболее своего движка это будет слишком медленно. А может в яве таки есть способ для этого? <_< |
Ответ: создание 3Д движка на j2me
Может где-то и есть в классах м3г, но этот метод не доступен.
Не понял. Ты имееш ввиду если полигон треугольный, то для него одна нормаль, а если четырёхугольный, то 4 нормали? Фигня какая-то. |
Ответ: создание 3Д движка на j2me
>полигон треугольный, то для него одна нормаль
Ты же сам мне говорил, что для каждой вершины своя нормаль, только для треугольника они одинаковы(если не мудрить со сглаживанием), а для четырёхугольника - разные(не всегда). |
Ответ: создание 3Д движка на j2me
И по какой из 4 нормалей мне потом определять силу света, виден или нет? По-моему на том сайте вычислялась одна нормаль, темболее из трёх вершин. А теперь ты мне говорищ, что надо 4 нормали.
|
Ответ: создание 3Д движка на j2me
Ну делай так, если хочешь... Зачем тогда спрашиваешь??
|
Ответ: создание 3Д движка на j2me
Я лучше вычислю нормаль для каждого треугольника и найду из них одну сренюю нормаль. Всё равно четырёхугольный полигоны почти плоские.
|
Ответ: создание 3Д движка на j2me
Вот так http://upwap.ru/452170 делить четырёхугольный полигон? Помоему это не правельно.
|
Ответ: создание 3Д движка на j2me
Цитата:
|
Ответ: создание 3Д движка на j2me
Я в блендере рисовал согнутый полигон и если его так делить, то он не так рисовался как в блендере.
|
Ответ: создание 3Д движка на j2me
Хотя может я не так понял. У меня сейчас так http://upwap.ru/452747 делится полигон. Вот только как потом получается, что нормаль одного треугольника смотрит в одно сторону, а другова- в другую.
|
Ответ: создание 3Д движка на j2me
И думаю, что так правельно его делить.
|
Ответ: создание 3Д движка на j2me
Замучался с этими нормалями. Одни правельно вычисляются, другие не правельно. Толи блендер в неправельном порядке вершины выставляет, толи я что-то не правельно пишу.
-=Jack=-, можеш посмотреть класс Normal. Что там не так? http://upwap.ru/453027 |
Ответ: создание 3Д движка на j2me
Цитата:
|
Ответ: создание 3Д движка на j2me
Какой трёхмерный вектор я возьму в j2me? Ну разве, что из маскота, но это будет не удобно и работать будет только на СЕ.
А можеш проверить в файле модели порядок вершин записан правельно? А то может записуется не правельно, а я мучаюсь с нормалью. |
Ответ: создание 3Д движка на j2me
Всё остальное это поворот нормали (умножение на матрицу) и рисование для наглядности.
|
Ответ: создание 3Д движка на j2me
А из четырёхугольного полигона у меня правельно вычисляется нормаль? По-моему там где-то ошибка. Т.к. почти все четырёхугольные полигоны смотрят в обратную сторону. Только где там ошибка...
П.с. Классный у тебя сайт. |
Ответ: создание 3Д движка на j2me
>Какой трёхмерный вектор я возьму в j2me?
class Vector3 { public float z, y, z; ... } Как я понял, ты раньше не работал с графическими API на ПК(OpenGL, DirectX). Советую поработать с одним из них, чтобы понять, как это делается. Java ME - специфическая платформа и начинать писать графическое апи на ней, не зная что должно получится - это, имхо, глупо.Можешь почитать книгу Андре Ламота "Программирование трёхмерных игр для Windows." Там хорошо описано, как всё работает. >П.с. Классный у тебя сайт. Спасибо. |
Ответ: создание 3Д движка на j2me
Если я создам просто три переменный для вектора в классе полигона, то придётся еще всякий код писать и потом путаться в нём. Я предпочитаю всё разделять на классы. Под комп я только конвертер написал так что можно считать, что я и не умею под комп программировать.
Книгу бы почитал, но инет мобильный. |
Ответ: создание 3Д движка на j2me
Ой, не заметел, что вектор в отдельном классе. А у меня он в классе Normal. Там всё, что надо для нормали.
Объясни как высчитывать свет на полигон, если камера находится в каких-то координатах и как делать светлее/темнее цвет полигона. |
Ответ: создание 3Д движка на j2me
Свет у меня будет направленый т.к. это легче. Вот только не пойму как цвет делать темнее или светлее, если он хранится в одном int.
|
Ответ: создание 3Д движка на j2me
Вложений: 1
Кусок главы "Основы моделирования освещения и поверхностей тел" книги Ламота:
|
Ответ: создание 3Д движка на j2me
Там расказывается как работать с цветом когда он задан тремя int. А когда он задан одним числом как его сделать темнее?
|
Ответ: создание 3Д движка на j2me
:wallbash:
Код:
public class Color { |
Часовой пояс GMT +4, время: 23:49. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot