Пт, 29 Мар 2024
Механоиды 3
Приветствую Вас Гость | RSS
Главная страница | Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Форум "Механоиды 3" » Рабочий раздел. » Графика » Графика: 3D модели и OpenGL (свой движок)
Графика: 3D модели и OpenGL (свой движок)
PA3UJIbДата: Вт, 21 Июл 2009, 08:58 | Сообщение # 81
1 Поколение
Группа: Основной состав
Сообщений: 105
Замечания: 0%
Статус: Offline
Quote (smt005)
хочу разобраться с PhysX

А я в ODE хочу разобраться. И враппер более толковый написать к ОГРУ.
 
smt005Дата: Вт, 21 Июл 2009, 10:24 | Сообщение # 82
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
PA3UJIb, вроде ты разобрался с PhysX. Да?
 
YandersenДата: Вт, 21 Июл 2009, 14:33 | Сообщение # 83
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
Quote (smt005)
GLfloat GetVer(int i) {return Vertex[i];}

Совет: лучше
inline GLfloat GetVer(int i) {return Vertex[i];}
Так будет во много раз быстрее работать, бо вызов обычной функции почему-то много времени занимает, как я проверял, но ключевое слово inline превращает функцию в макрос (автокодозамнитель), так что функционаворотов тормозных не будет, а они тут и не к чему. Вообще, не все функции можно объинлайнить. Во всяком случае, компиллер даст тебе предупреждение (не ошибку), если решит, что инлайн для той или иной функции невозможен. К примеру, если в функции есть циклы for,while и т.д., то мой борландовский компиллер мне на их инлайнование фигу показывает. Но коротенькие простые функции стопудово нуна инлайнать.

Добавлено (21 Июл 2009, 14:33)
---------------------------------------------

Quote (smt005)
.x, .y, .z легче воспринимаются по сравнению с [0], [1], [2].
Дело времени. Тебя ещё не околдовала Святая Компилляция. biggrin


[Беженец со Скаев]
 
smt005Дата: Вт, 21 Июл 2009, 15:02 | Сообщение # 84
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
Quote (Yandersen)
Дело времени.

Как раз я перешёл на XYZ через некоторое время, но ещё не конец и может ты правл.

Quote (Yandersen)
GLfloat GetVer(int i) {return Vertex[i];}

Так было в примере учебника, и я уже давно это не использую. Ща я использую DrawElement.
 
YandersenДата: Вт, 21 Июл 2009, 22:00 | Сообщение # 85
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
Quote (smt005)
Ща я использую DrawElement.
Я вообще-то про С++, про ключевое слово (keyword) "inline", который добавляют перед маленькими функциями, чтобы компиллер их макросами считал, и тормозной функциоидной байды там где не надо не наворачивал... dry


[Беженец со Скаев]
 
smt005Дата: Вт, 21 Июл 2009, 23:59 | Сообщение # 86
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
Я тебя понял и имел в виду что для DrawElement не нужен никакой GetVer.
 
PA3UJIbДата: Ср, 22 Июл 2009, 18:33 | Сообщение # 87
1 Поколение
Группа: Основной состав
Сообщений: 105
Замечания: 0%
Статус: Offline
Quote (smt005)
PA3UJIb, вроде ты разобрался с PhysX. Да?

Нет.
Насколько я знаю ФизХ мануалы платные имеет. Бесплатных мануалов к нему нет, можно только уже разобравшихся тормошить.

Yandersen, спасибо за самопальные классы текстуры и модели, как только удасться впарю их к ОГРу.

 
smt005Дата: Ср, 22 Июл 2009, 18:50 | Сообщение # 88
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
Кто-то же говорил что разобрался в PhysX, эй отзовитесь!

Чуть чуть, начинаю в него вникать, но пока только способом copyPast.

Quote (PA3UJIb)
Бесплатных мануалов к нему нет
Ты имееш в виду русскоязычные или какие то особо подробные, на английском ?
Есть "NVIDIA PhysX SDK 2.8" и в нём есть "Introduction", но я с английским не особо хорошо владею...

Quote (PA3UJIb)
самопальные классы текстуры
Я тоже рад, но может лучше загрузчик JPG ? Я бы его точно использовал.
Quote (PA3UJIb)
и модели
Где ? surprised
 
YandersenДата: Ср, 22 Июл 2009, 23:48 | Сообщение # 89
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
Quote (smt005)
Я тоже рад, но может лучше загрузчик JPG ? Я бы его точно использовал.
А чем тебя BMP-формат не устраивает? Забил хард порнухой и на несжатые изображения уже места не осталось? happy Я вообще такого мнения - картинки для игры - в bmp, звуки - в wav. Нафик все эти кодировки - чтоб при многократных подрихтовках исходников качество терять каждый раз? Или чтобы грузилось дальше? Всё равно ведь аппаратура требует сырого формата - твои закодированные mp3шки да jpegи перед использованием придётся так или иначе конвертировать в bmpы да wavы (Loading... Please wait... 5%... 10%... Idi pokuri... 15%... Popey chay... 20%... Ty escho tut?... ... ... wacko ). Я бы выбрал быстродействие при загрузке игры в противовес большому размеру распакованной гули на харде.


[Беженец со Скаев]
 
smt005Дата: Чт, 23 Июл 2009, 00:34 | Сообщение # 90
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
Quote (Yandersen)
А чем тебя BMP-формат не устраивает?
Quote (Yandersen)
Я вообще такого мнения - картинки для игры - в bmp, звуки - в wav.
DDS (вроде лучше) и OGG(бесплатно).

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

А точно, время загрузки и конвертирования (т.е. весь путь) BMP быстрее JPG (объём файла меньше) ?
Может провести опыты ?

Quote (Yandersen)
абил хард порнухой и на несжатые изображения уже места не осталось?
Нее, вся порнуха на Blue-Ray. cool
 
YandersenДата: Чт, 23 Июл 2009, 00:49 | Сообщение # 91
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
Quote (PA3UJIb)
Yandersen, спасибо за самопальные классы текстуры и модели, как только удасться впарю их к ОГРу
Раз решил юзнуть, держи свежие версии хеадеров "Textures.h" и "Materials.h" (в прикреплении). Я там добавил функции PassChunk, чтобы можно было проскочить соответствующую классу область данных без загрузки оттуда. А в TTexture ещё добавил операторы "=" и "==", чтобы можно было присваивать и сравнивать номерное имя текстуры:

unsigned int TexName = FuncLoadSomeTexture();
TTexture Texture1;
Texture1 = TexName;
bool TexExists = (Texture1 == 0);

Добавлено (23 Июл 2009, 00:49)
---------------------------------------------

Quote (smt005)
JPG нужно для того чтобы потом демки в инет загружать, и текстуры места маньше занимали.
А не проще ли всю папку целиком заrarирить? Есть подозрение, что куча сырых файлов, зарареных оптом будет весить меньше, чем куча зажатозакодированных незараренных... cool
Прикрепления: 9614776.h (12.3 Kb) · 3547019.h (12.0 Kb)


[Беженец со Скаев]
 
smt005Дата: Сб, 08 Авг 2009, 23:52 | Сообщение # 92
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
Yandersen, как определить координату куда указывает курсор ?
Нужно для редактора карты.
 
YandersenДата: Пн, 10 Авг 2009, 06:41 | Сообщение # 93
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
Quote (smt005)
Yandersen, как определить координату куда указывает курсор ?
Нужно для редактора карты.
Оуч... dry Я эту задачу решал, когда ковырялся с самопальным моделлером, так что где-то функциовины у меня есть, но отрывать их и приводить в человеческий вид... wacko
В общем, функциовине нужны координаты всех треугольников карты. Она их всех переберёт, почавкает каждый, и выдаст координаты точки пересечения луча от курсора мышки с ближайшим треугольником, если пересечение имеется, конечно. Ещё нужны размеры вьюпорта и координаты курсора мыши на нём.
Если такие входные данные сможешь предоставить, на днях займусь. Устраивает?


[Беженец со Скаев]
 
smt005Дата: Пн, 10 Авг 2009, 19:53 | Сообщение # 94
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
В принципе, мне надо знать только как найти луч от камеры по неаправлению курсора.
Остальное у меня уже есть.

Добавлено (10 Авг 2009, 19:53)
---------------------------------------------
Требуется найти координаты от курсора на "бемсконечной" плоскости при z=0 (сетка карты).

 
YandersenДата: Вт, 11 Авг 2009, 14:27 | Сообщение # 95
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
В glu уже есть готовая функция glUnProject! Щас протестировал, у меня всё правильно получается. Короче, пишешь так:

double P[16]; glGetDoublev(GL_PROJECTION_MATRIX,P); //Пиздим матрицу проекции
double M[16]; glGetDoublev(GL_MODELVIEW_MATRIX,M); //Пиздим модельно-видовую матрицу
int xywh[4]; glGetIntegerv(GL_VIEWPORT,xywh); //Пиздим координаты и размеры вьюпорта (на форме)
double nearX,nearY,nearZ; //Это будут координаты ближней точки (конкретно координаты курсора в 3D)
double farX,farY,farZ; //Это будут координаты дальней точки (координаты курсора на задней плоскости отсечения)
gluUnProject(X,Y,0, M,P,xywh, &nearX,&nearY,&nearZ); //Вычисляем реальные координаты курсора (на ближней плоскости отсечения)
gluUnProject(X,Y,1, M,P,xywh, &farX,&farY,&farZ); //Вычисляем координаты курсора на дальней плоскости отсечения

Тебе только нужны координаты курсора (X,Y) на вьюпорте. Т.е. если у тебя 3D на форме выводится, то X и Y - это координаты курсора на форме. Если в твоей доморошенной вижуалке можно узнать лишь координаты курсора на экране, то тебе нужно будет сначала отнять от них координаты верхнего левого угла формы, потом ещё толшину бордюра, и ещё дополнительно от Y высоту шапки формы. wacko А в моём прекрасном билдере - двойной щелчок по полю OnMouseDown в разделе Events формы - и я получаю шаблон функции с входящими X и Y, так что мне парится много не надо. Ну а ты - получай удовольствие от вижуалки, получай. biggrin

Добавлено (11 Авг 2009, 14:27)
---------------------------------------------

Quote (smt005)
Требуется найти координаты от курсора на "бемсконечной" плоскости при z=0 (сетка карты).
Карту плоскую делать собираешься? happy А почему бы тебе всё же не перибирать все треугольники карты? Может быть долго, да, но ведь это нужно будет делать лишь по щелчку мыши...
Если нужна функциовина, проверяющая пересечение отрезка прямой (две точки) с треугольником (три точки), то у меня в наборе такие есть, причём проверенные и минздравом одобренные. Около 70+ простейших операций на треугольник получится. ИМХО, немного, если у тебя проц не от калькулятора... smile


[Беженец со Скаев]

Сообщение отредактировал Yandersen - Вт, 11 Авг 2009, 14:21
 
smt005Дата: Ср, 12 Авг 2009, 01:02 | Сообщение # 96
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
Quote (Yandersen)
В glu уже есть готовая функция glUnProject!......
Спассибо попробую...
Quote (Yandersen)
Ну а ты - получай удовольствие от вижуалки, получай.

Я буду получать удовльствие от большого FPS, с давно решённой проблемой в 1,5 строчки.

Quote (Yandersen)
Карту плоскую делать собираешься?
Карта будет делаться в 3dMax-е, а редактор нужет будет только для того чтобы расставлять объекты. Ещё в дальнейшем, задавать объекту параметры и текстуры.
Quote (smt005)
А почему бы тебе всё же не перибирать все треугольники карты?

Требуется возможность елозить объекты на карте в плоскости XY.
 
YandersenДата: Ср, 12 Авг 2009, 14:29 | Сообщение # 97
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
А, понимаю, что ты хочешь. Луч, от курсора ты уже знаешь, как находить, да? Т.е. это будут 2 точки (float F[3] и float N[3]).
Итак:
1) Найдём кой-какую промежуточную переменную:
float t = -N[2] / (F[2]-N[2]);
2) Вычислим координаты точки пересечения (X,Y,Z) луча от курсора с плоскостью z=0:
float X = N[0] + (F[0]-N[0])*t;
float Y = N[1] + (F[1]-N[1])*t;
float Z = N[2] + (F[2]-N[2])*t;

Добавлено (12 Авг 2009, 14:29)
---------------------------------------------
Тока учти, что если ты камеру вверх задерёшь, у тебя всё равно будет точка пересечения (где-то сзади внизу за камерой). Подозреваю, что контролировать это можно, проверяя знак переменной t. Возможно, если она будет отрицательна, то пересечение ЗА камерой, а если положительна, то впереди. Или наоборот. Поиграйся, попробуй в общем.
Ах да, и ещё. Если луч от курсора будет идти параллельно плоскости XY, то точку пересечения, как ты понимаешь, найти будет невозможно, но программно это выльется в ошибку деления на ноль и вылет. Так что сперва ты должен ещё проверять, не равно ли значение (F[2]-N[2]) нулю. Если да, то луч параллелен плоскости, и пересечения нет. Усё.


[Беженец со Скаев]

Сообщение отредактировал Yandersen - Ср, 12 Авг 2009, 14:32
 
smt005Дата: Ср, 12 Авг 2009, 20:08 | Сообщение # 98
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
Quote (Yandersen)
Луч, от курсора ты уже знаешь, как находить, да?
Ещё пока нет - времени не было.
Quote (Yandersen)
Итак: 1) Найдём кой-как.................
Это я уже давно сделал...
Quote (Yandersen)
Тока учти, что если ты камеру вверх задерёшь, у тебя всё равно будет точка пересечения
Это не критично для редактора.
 
YandersenДата: Ср, 12 Авг 2009, 22:56 | Сообщение # 99
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
Quote (Yandersen)
Луч, от курсора ты уже знаешь, как находить, да?

Quote (smt005)
Ещё пока нет - времени не было.

dry
Quote (Yandersen)
Дата: Вт, Вчера, 14:27 | Сообщение # 96

dry


[Беженец со Скаев]
 
smt005Дата: Ср, 02 Сен 2009, 22:04 | Сообщение # 100
Admin
Группа: Администраторы
Сообщений: 936
Статус: Offline
Quote (Yandersen)
dry

?..

з.ы.: smile

Добавлено (02 Сен 2009, 22:04)
---------------------------------------------
Yandersen, а как у тебя с твоим классом ?..

 
YandersenДата: Чт, 03 Сен 2009, 02:29 | Сообщение # 101
1 Поколение
Группа: Доверенные
Сообщений: 196
Замечания: 0%
Статус: Offline
Quote (smt005)
Yandersen, а как у тебя с твоим классом ?..
Классом модели? Только на днях добил основной камень преткновения анимации твёрдых частей модели.
...Суть такой анимации ведь в чём? Каждая деталь модели относительно-независимая негнущаяся пофиговина, которая может смещаться и/или вращаться относительно другой детали. К примеру, такая модель, скажем, как холодильник. Главная деталь - рама, к ней прикреплены две дверцы (морозилка и большая дверца). Какие анимации можно применить к холодильнику? "Открыть морозилку", "закрыть морозилку", "открыть б.дверцу", "закрыть б.дверцу".
...Анимации заключаются в чём? В положении частей модели относительно друг друга в начале и в конце анимации. Точнее, в положении дочерних объектов (дверец) относительно главных (рама). У каждого из этих объектов своя система координат и положение. Как рисуется вся модель? Из мировой системы координат переходим в систему координат наблюдателя (glLookAt), оттуда в систему координат модели (glRotate/glTranslate), затем рисуем главную деталь модели (рама), затем поочерёдно переходим в систему координат каждой из дочерних деталей (glRotate/glTranslate), рисуя каждую из них (дверцы). Так вот реализовывать анимацию я собираюсь так: располагаем детали на сцене редактора, обзываем эту комбинацию как "начало анимации". Затем двигаем, вращаем детали и после этого называем комбинацию "конец анимации". Детали, положение которых было изменено, входят в список данной анимации, и их крайние положения запоминаются (как два крайних значения модельно-видовой матрицы). Так вот, я изобрёл (как обычно, переоткрыл велосипед, разумеется) формулу, находящую вектора смещения, поворота и угол поворота детали. С её помощью, зная крайние значения модельно-видовой матрицы, полное время анимации и истёкшее с начала анимации время (процент прохождения анимационной дорожки), можно находить ось вращения, просчитывать текущий угол поворота и смещение, и плавно анимировать детали.
Эти значения лучше, конечно, заранее просчитывать в редакторе, и в файл анимации писать их, а не значения матриц.
Ну, в общем, тут я пока. happy Векторочки две недели крутил, пока методом направленного научного тыка, наконец, не нашёл интуитивно-наметившуюся формулу. Проверил - вычисляет всё, вроде, правильно... umnik Ну я её скоро в "Матрицах" выложу... smile


[Беженец со Скаев]
 
Форум "Механоиды 3" » Рабочий раздел. » Графика » Графика: 3D модели и OpenGL (свой движок)
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Поиск:


Хостинг от uCoz