forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты на JavaME (http://forum.boolean.name/forumdisplay.php?f=114)
-   -   создание 3Д движка на j2me (http://forum.boolean.name/showthread.php?t=8365)

WISHMASTER35 23.05.2009 23:05

создание 3Д движка на j2me
 
Вложений: 1
Сделал простенький 3д движок для мобильного :) .
В движке можно рисовать полигоны(треугольники) и линии.
Теперь меня интерисует как сделать определение не видимых полигонов? Знаю только, что это делается с помощью нормалей (сторона в которую смотрит полигон). Но не пойму как эта нормаль вычисляется или поворачивается или что-то еще.
И кто может сделать скрипт экспорта для блендера в мой формат? Я пытался сделать, но из-за какого-то бага в блендере не смог. И питона я не знаю :dontknow: .
И если знаете как еще, что-то в нём улучшить, то пишите ;) .

@llien 24.05.2009 17:04

Ответ: создание 3Д движка на j2me
 
фляг в руки и пешком по свету по моему туут явйу хорошо знают только ты и винт!

Phantom 24.05.2009 18:53

Ответ: создание 3Д движка на j2me
 
Вообще-то вопрос алгоритмический, а не конкретно по Java.

WISHMASTER35 24.05.2009 19:25

Ответ: создание 3Д движка на j2me
 
Мой движок это проект на j2me. Так что в том разделе.
Эта же http://forum.boolean.name/showthread.php?t=4621&page=8 тема не в разделе алгоритмы хотя там тоже обсуждались алгоритмы.
Вообщем меня интересует тема своего 3д движка на мобильном. Хотя у меня не полностью свой движок :-D т.к. используются матрицы из м3г.

Phantom 24.05.2009 19:42

Ответ: создание 3Д движка на j2me
 
Да я не тебе, а @llien'у это сказал =)

@llien 25.05.2009 10:54

Ответ: создание 3Д движка на j2me
 
пасиб за заменчание учту

@llien 27.05.2009 11:00

Ответ: создание 3Д движка на j2me
 
Lit}{ говорит: Слуш вишмастер мы с тобой заняты одним и тем же.
Советую пойти через углы в двух плоскостях ХУ и ХZ. Формируеш ближайшие плоскости и указываеш чтобы все что за ними не рисовалось.
Позже могу текст на ВБ 6.0 выложить коли надо.

@llien 27.05.2009 12:00

Ответ: создание 3Д движка на j2me
 
если че я постараюсь переработать vb текст на midlet pascal

WISHMASTER35 27.05.2009 14:05

Ответ: создание 3Д движка на j2me
 
Тоесть ты предлогаеш сделать так: если полигон или слишком далеко, или не виден на дисплее, то не рисовать. Так? У меня, если полигон дальше чем G3D.rang или ближе чем 0 по Z оси, то полигон не добавляется в з-буфер.
Можеш показать, что у тебя получилось?

WISHMASTER35 02.06.2009 22:22

Ответ: создание 3Д движка на j2me
 
Скажите нормали записуются в файл-модель? Или они уже в оперативе создаются и поворачиваются в сторону полигона.
Я так понимаю в файл-модель НАДО записать нормаль, чтобы знать с какой стороны полигона она. Вот только не пойму в каком виде она записуется туда. Просто как тремя цифрами которые означают направление. Или типа слево или справо. Или как?
Есть ли какие нибудь движки на ж2ме?
Или простенькие на яваСЕ?

WISHMASTER35 03.06.2009 22:43

Ответ: создание 3Д движка на j2me
 
Никто ниче не знает?
Вообщем как я понял нормаль записуется в файл-модель. И при повороте модели нормали умножаются на матрицу. Правельно?

ViNT 04.06.2009 01:47

Ответ: создание 3Д движка на j2me
 
На счет записи нормалей в файл - все зависит от формата файла,
на счет поворота - да, нормаль можно повернуть, умножив на матрицу поворота.

-=Jack=- 04.06.2009 14:05

Ответ: создание 3Д движка на j2me
 
Определить видимость полигона можно через вектроное произведение векторов. Тоесть если есть полигон с вершинами ABC нужно взять произведение ABxBC, и получим вектор, перпендикулярный полигону(тобиш нормаль). Потом читаем скалярное произведение вектора направления камеры и смотрим на результат. Если я не ошибаюсь, если меньше 0, то полигон видим. Кстати хорошая справка при создании своего движка без АПИ - книга Андре Ламота "ПРОГРАММИРОВАНИЕ ТРЕХМЕРНЫХ ИГР ДЛЯ WINDOWS".

WISHMASTER35 04.06.2009 15:58

Ответ: создание 3Д движка на j2me
 
Если самому вычислять направление нормали, то нормаль может оказатся не стой стороны полигона.
Наверна надо записывать нормаль в файл и при повороте умножать на матрицу.

-=Jack=- 04.06.2009 17:32

Ответ: создание 3Д движка на j2me
 
>Если самому вычислять направление нормали, то нормаль может оказатся не стой стороны полигона.

Не может.

Есть 2 вида отсечения - CW(clockwise) и CCW(counter clockwise) для отсечения по часовой стрелке и против неё соответственно. Если мы найдём вектороное произведение векторов AB и BC, то получим перпендикуляр, направленый от рисунка к нам, если же умножим CB на BA - то наоботрот. Насколько я знаю, все нормальные графические редакторы записываю индексы вершин так, чтобы они шли по часовой стрелке.

WISHMASTER35 04.06.2009 18:23

Ответ: создание 3Д движка на j2me
 
Если лицивая стророна моего полигона с той, что надо стороны, то должно работать.
Я не пойму, если надо рендерить полигон с обоих сторон, то создаются две нормали или два полигона?

-=Jack=- 04.06.2009 19:29

Ответ: создание 3Д движка на j2me
 
>Если лицивая стророна моего полигона с той, что надо стороны, то должно работать.
А как может быть лицевая сторона не с той стороны?

Просто не отсекаешь его и всё. А если ты о случае, когда отсечение включено, но нужно отрендерить полик с обеих сторон, нужно создавать 2 полика.

WISHMASTER35 05.06.2009 00:26

Ответ: создание 3Д движка на j2me
 
Я когда-то читал, что создаётся две нормали. Два полигона сортировать дольше. Хотя расматривая модель формата .bac(MascotCapsule) увидел, что на один полигон который рендерится со всех сторон в .bac'e два полигона.
А как четырёхугольный полигон разделить на два треугольных? А то в том .bac'e почти все четырёхугольный.
Буду пытаться учить javaSE и делать конвертер из bac в мой формат.
Там, кстати, нормали на каждую вершину, а не полигон.

-=Jack=- 05.06.2009 01:15

Ответ: создание 3Д движка на j2me
 
>Я когда-то читал, что создаётся две нормали.
Бред.
>А как четырёхугольный полигон разделить на два треугольных?
Если есть ABCD, создаешь ABC и CDA.
>Там, кстати, нормали на каждую вершину, а не полигон.
А кто сказал, что гдето по другому? Просто у всех 3х вершин полигона нормали одинаковые...

jimon 05.06.2009 01:20

Ответ: создание 3Д движка на j2me
 
разные нормали на вершинах нужны для освещения

-=Jack=- 05.06.2009 10:01

Ответ: создание 3Д движка на j2me
 
Цитата:

Сообщение от jimon (Сообщение 106727)
разные нормали на вершинах нужны для освещения

Но зачем на один плоский треугольник разные нормали? Для придания вида выпуклости?

А, вспомнил, типа для сглаживания углов..

WISHMASTER35 09.06.2009 23:28

Ответ: создание 3Д движка на j2me
 
Вложений: 2
Сделал новую версию. Добавил полигоны из 4 вершин и убрал линии. И сделал конвертер из .BAC в мой формат.
Модель там почти из 2000 вершин и 500 полигонов. ФПС - 19.

WISHMASTER35 10.06.2009 00:05

Ответ: создание 3Д движка на j2me
 
А кто нибудь делал псевдо 3д игры?
Как там сделано, чтобы не рисовать лишнее? Только не в рейкастинге.
П.с. На маскоте кто нибудь программировал? Может показать, что он сделал?

-=Jack=- 10.06.2009 00:50

Ответ: создание 3Д движка на j2me
 
в My3D.zip/dist только jad файл.

WISHMASTER35 10.06.2009 01:53

Ответ: создание 3Д движка на j2me
 
Вот jar http://upwap.ru/450211

WISHMASTER35 10.06.2009 01:59

Ответ: создание 3Д движка на j2me
 
Вот нашол формулы для вычисления нормалей треугольного и четырёхугольного полигона http://pmg.org.ru/nehe/nehe36.htm . Они под "Вот формула векторного произведения:" это правельный формулы?
А то я не пойму как вычислить нормаль четырёхугольного полигона из 3 точек.

-=Jack=- 10.06.2009 10:31

Ответ: создание 3Д движка на j2me
 
Цитата:

Сообщение от WISHMASTER35 (Сообщение 107134)
Они под "Вот формула векторного произведения:" это правельный формулы?

Да! Я же тебе писал про векторное произведение!

Цитата:

Сообщение от WISHMASTER35 (Сообщение 107134)
А то я не пойму как вычислить нормаль четырёхугольного полигона из 3 точек.

А думать не пробовал?
Допустим, есть 4хугольник ABCD. Считаем нормали для каждой вершины:
Для вершины A: DAxAB
Для вершины B: ABxBC
Для вершины C: BCxCD
Для вершины D: CDxDA



ЗЫ: 12 фпс на эмуляторе... И Z-буфер толи вообще отсутствует, толи страшно глючит...

WISHMASTER35 10.06.2009 12:11

Ответ: создание 3Д движка на j2me
 
Что значит глючит?
Z-буфер в классе G3D.

-=Jack=- 10.06.2009 12:17

Ответ: создание 3Д движка на j2me
 
Наверно точность плохая :( Ибо иногда одни полики частями пролазят через другие.

WISHMASTER35 10.06.2009 12:26

Ответ: создание 3Д движка на j2me
 
Ну это недостатки полигональной сортировки. На маскоте эта модель тоже глючит. Особенно уши глючат. Но я бы не назвал это "страшно глючит"

-=Jack=- 10.06.2009 12:33

Ответ: создание 3Д движка на j2me
 
Цитата:

Сообщение от WISHMASTER35 (Сообщение 107154)
полигональной сортировки.

Что это? о_О

WISHMASTER35 10.06.2009 12:45

Ответ: создание 3Д движка на j2me
 
Это значит, что сортируются полигоны.
В м3г, например, пиксельная сортировка. Только это медленее.

WISHMASTER35 10.06.2009 13:42

Ответ: создание 3Д движка на j2me
 
А цвет надо хранить ввиде трёх чисел или одного? Чтобы когда добавлю свет можно было делать полигоны светлее или темнее.
И как надо вычислять вершину на дисплее, чтобы при маленьком дисплее и модель была меньше?

-=Jack=- 10.06.2009 13:52

Ответ: создание 3Д движка на j2me
 
Цитата:

Сообщение от WISHMASTER35 (Сообщение 107160)
Это значит, что сортируются полигоны.
В м3г, например, пиксельная сортировка. Только это медленее.

Чё за бред? Нафига сортировать полигоны??? И что за пиксельная сортировка? о_О Для этого вполне эффективно используется Z-буферизация о_О

Цитата:

Сообщение от WISHMASTER35 (Сообщение 107160)
А цвет надо хранить ввиде трёх чисел или одного?

int будет достаточно...

WISHMASTER35 10.06.2009 14:49

Ответ: создание 3Д движка на j2me
 
Ты представляеш, что быдет, если не сортировать полигоны?
Глаза могут быть на затылке.

WISHMASTER35 10.06.2009 14:52

Ответ: создание 3Д движка на j2me
 
У меня так устроено: все полигоны добавляются в массив, а потом в этом массиве они сортируются.
А ты знаеш лучший способ?

-=Jack=- 10.06.2009 15:19

Ответ: создание 3Д движка на j2me
 
Цитата:

Сообщение от WISHMASTER35 (Сообщение 107177)
А ты знаеш лучший способ?

Уже писал:
Цитата:

Сообщение от Jack
Для этого вполне эффективно используется Z-буферизация о_О


WISHMASTER35 10.06.2009 15:23

Ответ: создание 3Д движка на j2me
 
Не пойму чем твой способ отличается от моего. Можеш его описать.

-=Jack=- 10.06.2009 17:33

Ответ: создание 3Д движка на j2me
 
Допустим есть экран некого размера. Тогда нужно кроме основной поверхности для рисования, создать ещё одну такого же размера - для глубины. При прорисовке каждого пикселя сравнивать текущее значение глубины этого пикселя с уже записаным на поверхности глубины, и, если оно больше, рисовать пиксель и записывать его глубину на ту другую поверхность. Если же глубина текущего пикселя меньше - не рисуем его и не записываем глубину. Имхо, в Java должен быть способ включить и управлять Z-буфером.

WISHMASTER35 10.06.2009 18:15

Ответ: создание 3Д движка на j2me
 
Это ты описал, то, что я назвал пиксельной сортировкой. Для мобильного и темболее своего движка это будет слишком медленно.
У меня для каждого полигона вычисляется его средняя Z координата и по ней сортируется.

WISHMASTER35 10.06.2009 18:18

Ответ: создание 3Д движка на j2me
 
Кстати, я так и не понял как вычислить нормаль четырёхугольного полигона.
Я так понял: нужно просто взять первые 3 вершины и по той же формуле вычислить нормаль. Или не так?

-=Jack=- 10.06.2009 18:24

Ответ: создание 3Д движка на j2me
 
:wallbash:
Для каждой вершины свой нормаль.

>Для мобильного и темболее своего движка это будет слишком медленно.
А может в яве таки есть способ для этого? <_<

WISHMASTER35 10.06.2009 18:46

Ответ: создание 3Д движка на j2me
 
Может где-то и есть в классах м3г, но этот метод не доступен.
Не понял. Ты имееш ввиду если полигон треугольный, то для него одна нормаль, а если четырёхугольный, то 4 нормали? Фигня какая-то.

-=Jack=- 10.06.2009 23:05

Ответ: создание 3Д движка на j2me
 
>полигон треугольный, то для него одна нормаль
Ты же сам мне говорил, что для каждой вершины своя нормаль, только для треугольника они одинаковы(если не мудрить со сглаживанием), а для четырёхугольника - разные(не всегда).

WISHMASTER35 10.06.2009 23:57

Ответ: создание 3Д движка на j2me
 
И по какой из 4 нормалей мне потом определять силу света, виден или нет? По-моему на том сайте вычислялась одна нормаль, темболее из трёх вершин. А теперь ты мне говорищ, что надо 4 нормали.

-=Jack=- 11.06.2009 10:23

Ответ: создание 3Д движка на j2me
 
Ну делай так, если хочешь... Зачем тогда спрашиваешь??

WISHMASTER35 11.06.2009 14:09

Ответ: создание 3Д движка на j2me
 
Я лучше вычислю нормаль для каждого треугольника и найду из них одну сренюю нормаль. Всё равно четырёхугольный полигоны почти плоские.

WISHMASTER35 11.06.2009 23:01

Ответ: создание 3Д движка на j2me
 
Вот так http://upwap.ru/452170 делить четырёхугольный полигон? Помоему это не правельно.

-=Jack=- 12.06.2009 10:13

Ответ: создание 3Д движка на j2me
 
Цитата:

Сообщение от WISHMASTER35 (Сообщение 107359)
Помоему это не правельно.

Причина?

WISHMASTER35 12.06.2009 10:39

Ответ: создание 3Д движка на j2me
 
Я в блендере рисовал согнутый полигон и если его так делить, то он не так рисовался как в блендере.

WISHMASTER35 12.06.2009 15:43

Ответ: создание 3Д движка на j2me
 
Хотя может я не так понял. У меня сейчас так http://upwap.ru/452747 делится полигон. Вот только как потом получается, что нормаль одного треугольника смотрит в одно сторону, а другова- в другую.

WISHMASTER35 12.06.2009 15:44

Ответ: создание 3Д движка на j2me
 
И думаю, что так правельно его делить.

WISHMASTER35 12.06.2009 19:29

Ответ: создание 3Д движка на j2me
 
Замучался с этими нормалями. Одни правельно вычисляются, другие не правельно. Толи блендер в неправельном порядке вершины выставляет, толи я что-то не правельно пишу.
-=Jack=-, можеш посмотреть класс Normal. Что там не так? http://upwap.ru/453027

-=Jack=- 12.06.2009 21:12

Ответ: создание 3Д движка на j2me
 
Цитата:

Сообщение от WISHMASTER35 (Сообщение 107434)
-=Jack=-, можеш посмотреть класс Normal. Что там не так?

Класс Normal o_O. Для нормали вполне успешно используется простой трёхмерный вектор <_<. ПОсмотрел конструктор, формула вроде правильная. Назначение всего остального мне неизвестно.

WISHMASTER35 12.06.2009 21:50

Ответ: создание 3Д движка на j2me
 
Какой трёхмерный вектор я возьму в j2me? Ну разве, что из маскота, но это будет не удобно и работать будет только на СЕ.
А можеш проверить в файле модели порядок вершин записан правельно? А то может записуется не правельно, а я мучаюсь с нормалью.

WISHMASTER35 12.06.2009 21:52

Ответ: создание 3Д движка на j2me
 
Всё остальное это поворот нормали (умножение на матрицу) и рисование для наглядности.

WISHMASTER35 12.06.2009 22:45

Ответ: создание 3Д движка на j2me
 
А из четырёхугольного полигона у меня правельно вычисляется нормаль? По-моему там где-то ошибка. Т.к. почти все четырёхугольные полигоны смотрят в обратную сторону. Только где там ошибка...
П.с. Классный у тебя сайт.

-=Jack=- 13.06.2009 10:11

Ответ: создание 3Д движка на j2me
 
>Какой трёхмерный вектор я возьму в j2me?
class Vector3
{
public float z, y, z;
...
}

Как я понял, ты раньше не работал с графическими API на ПК(OpenGL, DirectX). Советую поработать с одним из них, чтобы понять, как это делается. Java ME - специфическая платформа и начинать писать графическое апи на ней, не зная что должно получится - это, имхо, глупо.Можешь почитать книгу Андре Ламота "Программирование трёхмерных игр для Windows." Там хорошо описано, как всё работает.

>П.с. Классный у тебя сайт.
Спасибо.

WISHMASTER35 13.06.2009 10:47

Ответ: создание 3Д движка на j2me
 
Если я создам просто три переменный для вектора в классе полигона, то придётся еще всякий код писать и потом путаться в нём. Я предпочитаю всё разделять на классы. Под комп я только конвертер написал так что можно считать, что я и не умею под комп программировать.
Книгу бы почитал, но инет мобильный.

WISHMASTER35 13.06.2009 10:50

Ответ: создание 3Д движка на j2me
 
Ой, не заметел, что вектор в отдельном классе. А у меня он в классе Normal. Там всё, что надо для нормали.
Объясни как высчитывать свет на полигон, если камера находится в каких-то координатах и как делать светлее/темнее цвет полигона.

WISHMASTER35 13.06.2009 17:26

Ответ: создание 3Д движка на j2me
 
Свет у меня будет направленый т.к. это легче. Вот только не пойму как цвет делать темнее или светлее, если он хранится в одном int.

-=Jack=- 13.06.2009 17:49

Ответ: создание 3Д движка на j2me
 
Вложений: 1
Кусок главы "Основы моделирования освещения и поверхностей тел" книги Ламота:

WISHMASTER35 13.06.2009 19:51

Ответ: создание 3Д движка на j2me
 
Там расказывается как работать с цветом когда он задан тремя int. А когда он задан одним числом как его сделать темнее?

-=Jack=- 13.06.2009 20:53

Ответ: создание 3Д движка на j2me
 
:wallbash:

Код:

public class Color {
    public int value;
    public Color(){
        value = 0;
    }
    public Color(int value){
        this.value = value;
    }
    public Color(int r, int g, int b, int a){
        value=a;
        value<<=8;
        value|=r;
        value<<=8;
        value|=g;
        value<<=8;
        value|=b;

    }
    public short getR(){
        return (short)((value>>16)&255);
    }
    public short getG(){
        return (short)((value>>8)&255);
    }
    public short getB(){
        return (short)((value)&255);
    }
    public short getA(){
        return (short)((value>>24)&255);
    }
}



Часовой пояс GMT +4, время: 23:49.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot