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=- 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


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

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