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)

-=Jack=- 29.06.2009 19:54

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

Сообщение от WISHMASTER35 (Сообщение 109367)
Как идея?

Бред.

Цитата:

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

WISHMASTER35 29.06.2009 20:03

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

-=Jack=- 29.06.2009 21:09

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

Сообщение от WISHMASTER35 (Сообщение 109398)
Я использую только 2д координаты треугольника. Из них найти расстояние пикселя не возможно.

Иди копать траншеи...

WISHMASTER35 30.06.2009 00:32

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

-=Jack=- 30.06.2009 02:44

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

Сообщение от WISHMASTER35 (Сообщение 109427)
Хочеш сказать, что из 2д треугольника можно вычислить 3д координаты пикселя?

Нет. Я хочу сказать, что когда ты рисуешь 2д треугольник ты вычесляешь глубину. vec=pos*(WorldMatrix*ViewMatrix*ProjMatrix); - так вычисляется положение вершины на экране, после чего данные вершин итерполируются по пикселям. При этом значение vec.z в данной формуле и есть глубина.

WISHMASTER35 30.06.2009 10:47

Ответ: создание 3Д движка на j2me
 
Положения вершин я вычисляю умножением на одну матрицу.
А vec это что? Вершина?

-=Jack=- 30.06.2009 14:19

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

Сообщение от WISHMASTER35
Положения вершин я вычисляю умножением на одну матрицу.

Врешь. Я не пойму, ты всё ручками пишешь, или используешь какую-то библиотеку?
Цитата:

Сообщение от WISHMASTER35
А vec это что? Вершина?

Нет, китайский лётчик...
Цитата:

Сообщение от Jack
положение вершины на экране


WISHMASTER35 30.06.2009 15:25

Ответ: создание 3Д движка на j2me
 
Никаких библиотек. Вершину умножаю на одну матрицу. Зачем на несколько умножать?!
Я серьёзно vec это, что? А то не пойму смысла твоей формулы?

WISHMASTER35 30.06.2009 15:37

Ответ: создание 3Д движка на j2me
 
А какой самый быстрый алгоритм рисования треугольника?

jimon 30.06.2009 16:30

Ответ: создание 3Д движка на j2me
 
WISHMASTER35
ScreenVector = VertexPosition * WorldViewProjMatrix
где WorldViewProjMatrix = WorldMatrix * ViewMatrix * ProjectionMatrix;
в любом случае получается у тебя позиция вершины и три матрицы трансформации
ScreenVector это вектор X,Y,Z где X и Y находятся от -1 до 1 (координаты на экране), а Z это глубина в данном пикселе экрана
не высчитывать Z при этом невозможно, ты в любом случае будешь считать глубину

WISHMASTER35 01.07.2009 23:39

Ответ: создание 3Д движка на j2me
 
Не знаете в этом http://compgraphics.info/2D/triangle_rasterization.php алгоритме нет ошибки? А то пытаюсь на яву переделать, а у меня нижняя часть полигона обрезанная http://upwap.ru/474120. Весь день промучался, всё равно не могу правельно сделать.

WISHMASTER35 02.07.2009 01:41

Ответ: создание 3Д движка на j2me
 
Всё. Нашол ошибку.

WISHMASTER35 03.07.2009 01:15

Ответ: создание 3Д движка на j2me
 
Помня в MascotCapsule одну фигуру можно было рендерить во многих местах. Как это делается в движке?

jimon 03.07.2009 01:46

Ответ: создание 3Д движка на j2me
 
WISHMASTER35
несколько раз рендерить

-=Jack=- 03.07.2009 12:20

Ответ: создание 3Д движка на j2me
 
с разными матрицами...

WISHMASTER35 03.07.2009 16:37

Ответ: создание 3Д движка на j2me
 
Проблема в том, что в моём движке придётся создавать несколько Figure, a в маскоте одну Figure. Хотя там, есть FigureLayout который придётся не один создать, но как он работает я не пойму.

-=Jack=- 03.07.2009 16:44

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

Сообщение от WISHMASTER35 (Сообщение 109772)
но как он работает я не пойму.

Создай у своего класса меша список из элементов типа FigureLayout и опиши механизм добавления елементов этого типа в твой список. Пусть FigureLayout содержит конечную мировую матрицу. При рендере объекта перебирай все элементы списка и рисуй меш с матрицей данного елемента...

jimon 03.07.2009 16:45

Ответ: создание 3Д движка на j2me
 
WISHMASTER35
есть mesh, а есть entity, тут как раз один меш и несколько ентити

WISHMASTER35 04.07.2009 12:44

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

-=Jack=- 04.07.2009 18:47

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

WISHMASTER35 04.07.2009 19:11

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

WISHMASTER35 04.07.2009 21:21

Ответ: создание 3Д движка на j2me
 
Нашол про аффиное текстурирование сдесь http://www.enlight.ru/faq3d/download/dd3dr2h.zip
Но я не пойму где там находятся v_start и dv_dsx ? Точнее они там вообще не находятся. Апечатка, чтоли.

-=Jack=- 04.07.2009 22:45

Ответ: создание 3Д движка на j2me
 
Тут глянь.

WISHMASTER35 05.07.2009 00:24

Ответ: создание 3Д движка на j2me
 
Все статьи про афинное текстурирование как одна.
И не очень понятна.
Ну если dv_dsx как я понял находить так же как и du_dsx только поменять u на v, x на y.
То как находить start_v там вообще не написанно. Догадываюсь, что оно равно a.u
Если не правельно,то поправте.

WISHMASTER35 05.07.2009 02:06

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

WISHMASTER35 05.07.2009 16:25

Ответ: создание 3Д движка на j2me
 
Вот http://upwap.ru/478150 кое-что получается.
Но текстура почему-то растягивается только по двум вершинам.
Делал всё как в статье.
Посмотрите, что там не правельно.
П.с. Менять вершины 1 и 3.

WISHMASTER35 05.07.2009 22:38

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

WISHMASTER35 09.07.2009 12:52

Ответ: создание 3Д движка на j2me
 
Вот http://upwap.ru/482442 исправил ту ошибку. Но почему-то часто выходит за граници массива с текстурой.
Есть ли лучше алгоритм рисоваиния текстуры? Который не будет выходить за граници текстуры.

WISHMASTER35 10.07.2009 01:20

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

Android 10.07.2009 09:18

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

WISHMASTER35 10.07.2009 11:02

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

WISHMASTER35 12.07.2009 01:10

Ответ: создание 3Д движка на j2me
 
А в аффинном текстурировании можно избавиться от пило-образного эфекта? Или в аффином методе нельзя избавиться от этого дефекта-

WISHMASTER35 17.07.2009 13:09

Ответ: создание 3Д движка на j2me
 
Вложений: 1
Избавился от пило-образного эфекта.
Но всёже алгоритм иногда выходит за границы массива-текстуры.

WISHMASTER35 17.07.2009 20:33

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

-=Jack=- 18.07.2009 02:36

Ответ: создание 3Д движка на j2me
 
Да, инвертируешь матрицу вида и умножаешь её на матрицу объекта.

WISHMASTER35 18.07.2009 06:52

Ответ: создание 3Д движка на j2me
 
допустим есть матрица моего героя и мне надо смотреть из его глаз. Как мне его матрицу приобразовать в матрицу вида?

WISHMASTER35 18.07.2009 06:54

Ответ: создание 3Д движка на j2me
 
Пардон. А инвертируеш это как? Эт находить обратную?

-=Jack=- 19.07.2009 21:45

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

WISHMASTER35 26.07.2009 17:29

Ответ: создание 3Д движка на j2me
 
Что-то я так и не понял как работают entity.
Допустим, есть один меш и два ентити. Поворачиваем меш по первой матрице и робавляем его полигоны в массив. Потом поворачиваем тот же меш по второй матрице и добавляем теже полигоны в массив. И получается, что в массиве содержится по два каждых полигона повёрнутых по второй матрице. И получится, что два меша нарисуются не в разных местах, а в одном.
Видно в моёш движке это не реализовать.
Кстате, почему надо, чтобы текстуры были или 64*64, или 128*128, или 256*256?

WISHMASTER35 27.07.2009 20:48

Ответ: создание 3Д движка на j2me
 
-=Jack=-, ты ж понимаеш в opengl ? Можеш мне разьяснить кое-что?
Я смотрю пример opengl и не понимаю почему координаты вершин, текстурные и другие задаются в пределах от 0 до 1?
Я перенёс свой движок на javaSE и теперь хочю добавить в него текстурирование с помощью openGL.
Мне надо сделать рисование текстурированного полигона по его реальным координатам на экране и uv координатам в текстуре.
А эти координаты не от 0 до 1.

jimon 27.07.2009 21:02

Ответ: создание 3Д движка на j2me
 
WISHMASTER35
думаю всё дело в представлении float числа, от 0 до 1 в нём хранится больше чисел чем на всём остальном промежутке

хитрость с entity и mesh простая
mesh это набор вершин у которых координаты заданы в локальной системе модели (относительно её центра)
а entity это просто матрица которая трансформирует этот центр

ты не должен при изменении матрицы изменять координаты которые хранятся в меше
просто при каждом кадре рисования ты должен заного умножать все вершины меша на матрицу entity и получать глобальные координаты вершин
и вот уже их рисовать, а не сохранять в масив

WISHMASTER35 27.07.2009 21:58

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

jimon 27.07.2009 22:33

Ответ: создание 3Д движка на j2me
 
WISHMASTER35
всё зависит от матрицы проекции, расположения камеры и формы полигона
такая задача называется рисование тексель в пиксель
если задать ортографическую проекцию с размерами в viewport, камеру в 0,1,0 смотрящую в 0,0,0, то можно рисовать тексель в пиксель в плоскости XZ, тогда у тебя координаты будут 40.0f,0,40.0f и это превратится в 40,40 на экране

так что не всё так просто как тебе кажется

WISHMASTER35 27.07.2009 23:39

Ответ: создание 3Д движка на j2me
 
Я хочю для полигона задовать координаты вершин только двумя координатами: Х и Y т.е. gl.glVertex2f(x, y); думаю в током случае матрица, форма полигона и камера не на что не повлияют.
Так каким методом сделать, чтобы при gl.glVertex2f(50, 50); и на экране были эти х50 и у50 ?
Нету ли примера такого текстурирования или просто рисования полигона? Желательно для jogl.

jimon 28.07.2009 00:26

Ответ: создание 3Д движка на j2me
 
WISHMASTER35
а ты не думал что glVertex2f(x,y) это тоже самое что glVertex3f(x,y,0) ?
в любом случае прийдется настраивать ортографическую матрицу проекции и правильно ставить камеру

WISHMASTER35 28.07.2009 11:29

Ответ: создание 3Д движка на j2me
 
Не пойму зачем писать glVertex3f(x,y,0), если можно glVertex2f(x,y).
Можеш написать как повернуть матрицу и камеру в нужную мне плоскость.
Хотя не понимаю как на это влияет поворот камеры вниз.
Может лучше будет разделить мои координаты на какое-то число, чтобы они тоже стали от 0 до 1?

WISHMASTER35 28.07.2009 13:41

Ответ: создание 3Д движка на j2me
 
Нашол один урок http://pmg.org.ru/nehe/nehe17.htm
Там рисуется именно так как мне и нужно.
Вот нужный мне метод glVerter2i(int x, int y); а я раньше думал, что значит f, а это оказывается был тип. Мне надо не f, a i.
Надеюсь я правельно понял.

jimon 28.07.2009 15:02

Ответ: создание 3Д движка на j2me
 
WISHMASTER35
glVertex2f и glVerter2i отличаются только какие типы параметров они принимают, для рендера никакого отличия

в 17 примере nehe тоже идет работа с матрицами, не знаю чем ты смотришь
Цитата:

glMatrixMode(GL_PROJECTION); // Выбираем матрицу проекции
glPushMatrix(); // Сохраняем матрицу проекции
glLoadIdentity(); // Сбрасываем матрицу проекции
glOrtho(0,640,0,480,-1,1); // Устанавливаем плоский экран
...
glMatrixMode(GL_MODELVIEW); // Выбираем матрицу модели просмотра
glPushMatrix(); // Сохраняем матрицу модели просмотра
glLoadIdentity(); // Сбрасываем матрицу модели просмотра
glTranslated(x,y,0); // Позиция текста (0,0 - Нижняя левая)
как видишь - матрица проекции как я и говорил, матрица камеры - единичная, матрица модели - со смещением текста
просто в OpenGL матрицу камеры и матрицу модели обьеденили в одну, в прочем работу с матрицами вырезали из OpenGL 3.x :)

WISHMASTER35 28.07.2009 16:20

Ответ: создание 3Д движка на j2me
 
Теоретически я могу и своей матрицей также повернуть вершины и рисовать уже полигон с повёрнутой вершиной.
Если я так glVertex2f(1f, 1f); задам координаты, то на экране точка где будет?
Нету ли статьи где бы это объяснялось?

jimon 28.07.2009 16:45

Ответ: создание 3Д движка на j2me
 
WISHMASTER35
обьясняется оно тут
http://www.glprogramming.com/red/chapter03.html



1) glVertex2f(1f, 1f);
это вектор 1,1,0,1

2) множим вектор на ModelView матрицу
получаем вектор в системе координат камеры

3) множим вектор на Projection матрицу
получаем 4-мерный вектор x,y,z,w в гомогенной системе координат

4) делаем перспективное деление
получаем 3-мерный вектор в viewport координатах (от -1 до 1 по X,Y)

5) делаем viewport преобразования
получаем координаты пикселят в экранных координатах

так что если ты хочешь совместить 3д и 2д то сначала рисуй 3д в перспективной проекции
а потом 2д поверх в ортографической проекции

WISHMASTER35 28.07.2009 18:01

Ответ: создание 3Д движка на j2me
 
Короче ты мне предложил находить 2д проекции вершин для системы координат opengl(т.е. от -1 до 1), а не моей. Я уже тоже думал, что это будет проще всего.

Наткнулся на этот форум http://forum.vingrad.ru/act-ST/f-95/t-170504.html там написано, что можно просто установить перспективную проекцию.

jimon 28.07.2009 18:14

Ответ: создание 3Д движка на j2me
 
WISHMASTER35
ну можно рисовать и в перспективной в Near Plane

WISHMASTER35 08.08.2009 21:50

Ответ: создание 3Д движка на j2me
 
Вот http://upwap.ru/515371 улучшил качество текстурирования и скорость. Но всё равно, если треугольник сжать в тонкую полоску, то много пикселей выходят за приделы текстуры. Как сделать, чтобы не выходили? Может нужна субпиксельная или тексельная точност?

WISHMASTER35 14.08.2009 13:28

Ответ: создание 3Д движка на j2me
 
Вот http://upwap.ru/520686 сделал, чтобы даже, если пиксель выйдет за массив текстуры, то с помощью "&" зашол обратно в предел массива.

Скажите как в opengl включить з-буфер? Т.е. Чтобы не видемые пикселы не рисовались.

jimon 14.08.2009 13:39

Ответ: создание 3Д движка на j2me
 
glEnable(GL_DEPTH_TEST)

Tronix 01.09.2009 17:11

Ответ: создание 3Д движка на j2me
 
Вложений: 5
Может немного не в тему, но тут на днях мне вспомнилась старенькая игрушка Stunts http://en.wikipedia.org/wiki/Stunts_(video_game)

Смысл в том, что ее движок построен на 3d полигонах _без текстурирования_ и частично спрайтах. И я думаю, что такой движок будет летать на мобильнике. Да и вообще игра сама по себе - можно сказать хит прошлых лет. Когда уже вышли NFS I и NQ Rally, многие по прежнему продолжали в нее рубать.

Я с удовольствием бы сам занялся написанием подобного движка, но с 3d графикой никогда не работал, да и скилл не позволит наверное. Поэтому просто как говорится мысли вслух. Вдруг кого-то на идею натолкну?

С позволения приложу к сообщению архив с игрой, благо всего 1 мб. У меня на Win XP запускаеться без проблемм, файл STUNTS.BAT

WISHMASTER35 04.09.2009 11:42

Ответ: создание 3Д движка на j2me
 
Впервые увидел игру с не текстрированными полигонами.

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

-=Jack=- 04.09.2009 18:57

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

Цитата:

Сообщение от WISHMASTER35 (Сообщение 117548)
А как правельно находить нормаль четырёхугольного полигона?

опять двадцать пять...

WISHMASTER35 04.09.2009 21:16

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

WISHMASTER35 06.09.2009 16:12

Ответ: создание 3Д движка на j2me
 
Сделал версию 1.3
http://www.mcplayer.wen.ru/iceberg/iceberg.html
Наконец-то сделал матрици на fixed point.

_Nox_ 13.10.2009 16:26

Ответ: создание 3Д движка на j2me
 
А адаптировать данный движок под MidletPascal можно (сделать ввиде либы)?

Tronix 13.10.2009 22:21

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

Сообщение от _Nox_ (Сообщение 121450)
А адаптировать данный движок под MidletPascal можно (сделать ввиде либы)?

Не думаю. Можно использовать это: http://forum.boolean.name/showthread.php?t=4621

WISHMASTER35 21.10.2009 19:20

Ответ: создание 3Д движка на j2me
 
В аффинном текстурировании U и V координаты в одномерном массиве(текстуре) изменяются на одно и тоже число. Но как не пытался обьеденить DU и DV (приращения для UиV) обьеденить в одно число ничего не получалось.
Кто нибудь знает это возможно сделать? И как?

jimon 21.10.2009 19:22

Ответ: создание 3Д движка на j2me
 
WISHMASTER35
ну на одно и тоже число только если стороны равны, или я что-то путаю ?


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

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