Форумы Homeworld3.RU  

Go Back   Форумы Homeworld3.RU > Сделай сам! > Ангар > Игры мечты
Register Forum Rules FAQ Members List Calendar Search Today's Posts Mark Forums Read

Reply
 
Thread Tools
Quote
Old 03-30-2011, 08:12 PM   #101
KUPRUM
Адмирал флотаАдмирал флота
 
Faction:
Хиигаряне

Join Date: Nov 2008
Posts: 1,092
Re: Внутри корабля

Все будит - и ствол и жизнь, дайте времени вагон)))
KUPRUM is offline   Reply With Quote
Old 04-11-2011, 11:30 AM   #102
KUPRUM
Адмирал флотаАдмирал флота
 
Faction:
Хиигаряне

Join Date: Nov 2008
Posts: 1,092
Re: Внутри корабля

Отсюда я беру идеи по оборудованию корвета:

Военное-дело -- Корабли-будущего

Военное-дело -- Эсминцы
KUPRUM is offline   Reply With Quote
Old 04-11-2011, 01:58 PM   #103
Джаспер
Адмирал флотаКомандир отряда
 
Джаспер's Avatar
 
Faction:
Кушане - киит Сомтау

Join Date: Dec 2010
Location: Хиигара
Posts: 1,557
Re: Внутри корабля

Интересный материал. Правда в роликах почти не упоминался внутренний дизайн кораблей, за исключением нескольких сравнительно коротких кадров.

P.S. Музыка в роликах взята из C&C3.
Джаспер is offline   Reply With Quote
Old 04-11-2011, 02:50 PM   #104
KUPRUM
Адмирал флотаАдмирал флота
 
Faction:
Хиигаряне

Join Date: Nov 2008
Posts: 1,092
Радость Re: Внутри корабля

Да сори нужно уточнить, идея того что внутри корвета могут быть шаттлы это аналог того, что на современном судне есть вертолеты. Плюс круговой радар на американском дестроере.

Никогда не задумывался над музыкой

Вот новый обзор. Это конечно еще не ИИ, но и не чистая анимация. Два манипулятора определяют место положения очередного блока, смещается к нему и запускает ответствующие анимации. В полном корабле отключения блоков компьютера будит влиять на работоспособность систем управляемых теми или иными блоками.
ссылка для стачивания 12.rar
пароль: KUPRUM 2

Управление то же,
Как и прежде понадобится вивер - вот ссылка: Viewer.rar, пароль: viewer

Управление:
Передвижение так же и осталось при помощи стрелочек.
LShift - фиксация курсора
зажатая ЛКМ - вращение камеры
щелчке ЛКМ иногда и ПКМ - кнопки действия
F12 - рестарт сцены
Пробел - ускорение в 3 раза
R - скринсшот
ESC - выход из программы

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

Last edited by KUPRUM : 04-11-2011 at 08:06 PM.
KUPRUM is offline   Reply With Quote
Old 04-12-2011, 04:20 PM   #105
Джаспер
Адмирал флотаКомандир отряда
 
Джаспер's Avatar
 
Faction:
Кушане - киит Сомтау

Join Date: Dec 2010
Location: Хиигара
Posts: 1,557
Re: Внутри корабля

Неплохо. Надо будет тебе космосимулятор делать.

Да не просто симулятор, а с элементами шутера при абордаже!

P.S.
Джаспер is offline   Reply With Quote
Old 04-12-2011, 04:27 PM   #106
KUPRUM
Адмирал флотаАдмирал флота
 
Faction:
Хиигаряне

Join Date: Nov 2008
Posts: 1,092
Re: Внутри корабля

А кто сказал, что я не делаю
KUPRUM is offline   Reply With Quote
Old 04-14-2011, 08:06 PM   #107
KUPRUM
Адмирал флотаАдмирал флота
 
Faction:
Хиигаряне

Join Date: Nov 2008
Posts: 1,092
Re: Внутри корабля

Ребят кто знает математику - помогите.
Необходима формула коррекции угла направленности вектора.

Нашел следующий пример:



Dy1,dx1, dy2,dx2 – координаты объектов на плоскости. Вроде как определяем координаты гипотенузы.
dx=(dx1-dx2)
dy=(dy1-dy2)
Рассчитываем поправку
Y=atan(dy/dx)
Вот дальше я совсем не понимаю что это
x2<x1 and y2>y1 Quad=0
x2<x1 and y2<y1 Quad=0
x2>x1 and y2<y1 Quad=pi
x2>x1 and y2>y1 Quad=pi

Проблемам в том, что это только для оси Z, а как его адаптировать для других осей без понятия уже. Или подскажите где взять такую теорему.
KUPRUM is offline   Reply With Quote
Old 04-14-2011, 09:09 PM   #108
Agronom
РядовойВ запасе
 
Join Date: Sep 2008
Posts: 29
Re: Внутри корабля

Ничего не понял.
Какая коррекция нужна? Какого конкретно угла?

p.s. В чём заключается задача? Может подскажу решение.
Agronom is offline   Reply With Quote
Old 04-14-2011, 09:15 PM   #109
KUPRUM
Адмирал флотаАдмирал флота
 
Faction:
Хиигаряне

Join Date: Nov 2008
Posts: 1,092
Re: Внутри корабля

Есть два объекта - объект один это цель, объект два это ну пусть ракета, как определить куда должна лететь ракета что бы попасть в цель. Приведенная выписка формул мне встречается уже дважды, в учебнике по action script, и в примерах по esp creator. Проблемам в том, что эти формулы работают только для оси z.
KUPRUM is offline   Reply With Quote
Old 04-14-2011, 09:20 PM   #110
Agronom
РядовойВ запасе
 
Join Date: Sep 2008
Posts: 29
Re: Внутри корабля

Я так понимаю, нужно плавно повернуть 3-мерный вектор к цели?
Agronom is offline   Reply With Quote
Old 04-14-2011, 09:22 PM   #111
KUPRUM
Адмирал флотаАдмирал флота
 
Faction:
Хиигаряне

Join Date: Nov 2008
Posts: 1,092
Re: Внутри корабля

Да хотя бы просто выяснить сколько и куда поворачивать, а дальше как нибудь сам))))
KUPRUM is offline   Reply With Quote
Old 04-14-2011, 09:48 PM   #112
Agronom
РядовойВ запасе
 
Join Date: Sep 2008
Posts: 29
Re: Внутри корабля

Я бы посоветовал, для наилучшего результата:
  1. Преобразовать векторы в кватернионы: http://www.rossprogrammproduct.com/t...%20FAQ.htm#Q56
  2. Произвести сферическую линейную интерполяцию (slerp): http://wat.gamedev.ru/articles/quate...nterpolyatsiya
  3. Получить обратно вектор: http://www.rossprogrammproduct.com/t...%20FAQ.htm#Q57
    Или матрицу вращения: http://www.rossprogrammproduct.com/t...%20FAQ.htm#Q54
ИМХО ещё лучше хранить ориентацию сразу в кватернионах, т.к. у них не бывает "Gimbal lock": http://www.rossprogrammproduct.com/t...%20FAQ.htm#Q34
Agronom is offline   Reply With Quote
Old 04-14-2011, 10:03 PM   #113
KUPRUM
Адмирал флотаАдмирал флота
 
Faction:
Хиигаряне

Join Date: Nov 2008
Posts: 1,092
Re: Внутри корабля

Спасибо, я опробую в этом разобраться, а представленные выше формулы тебе не знакомы? Там очень простой алгоритм с их применением выходит.

Как читается вот такое выражение p1[2] = p->z; ? ну то есть что значит знак ">" в нем? Это из "Произвести сферическую линейную интерполяцию (slerp)".

Last edited by KUPRUM : 04-14-2011 at 10:20 PM.
KUPRUM is offline   Reply With Quote
Old 04-14-2011, 10:27 PM   #114
Agronom
РядовойВ запасе
 
Join Date: Sep 2008
Posts: 29
Re: Внутри корабля

Quote:
Originally Posted by KUPRUM View Post
а представление выше формулы тебе не знакомы?
Нет. Я не понял для чего нужны эти вычисления.
Такое ощущение, что это обрывки всего алгоритма.

Может быть достаточно, в этом случае, простой интерполяции векторов.
Но с кватернионами поворот происходит по кратчайшей дуге, с учетом вращения вокруг оси.

Добавлено через 12 минут
Quote:
Originally Posted by KUPRUM View Post
Как читается вот такое выражение p1[2] = p->z; ?
Считай написано: "p1[2] = p.z".

"->" - это оператор для косвенного доступа к переменным и методам объекта в C++.
То есть:
Если "p" - объект, то получить "z" можно так: "p.z".
А если указатель на него, то так: "p->z".

Last edited by Agronom : 04-14-2011 at 10:42 PM. Reason: добавлено сообщение
Agronom is offline   Reply With Quote
Old 04-14-2011, 10:40 PM   #115
KUPRUM
Адмирал флотаАдмирал флота
 
Faction:
Хиигаряне

Join Date: Nov 2008
Posts: 1,092
Сообщение Re: Внутри корабля

Это чисто формулы, пример полного алгоритма такой (это Common Lisp)

Code:
(setq  Xbase (nth 0(getobjectlocation Follower 1))) ; Позиция объекта который будит двигается за курсором
(setq  Ybase (nth 1(getobjectlocation Follower 1)))


	(setobjectlocation "CamTracker" Xbase Ybase 0) ; это фиксация камеры

получение положения курсора в пиксилях
Code:
	(setq x (nth 0 (getcursorpos)))
	(setq y (nth 1 (getcursorpos)))

Ниже различные варианты проигрывания анимации, в зависимости от условий
Code:
	(if (/= (pickobjectatpoint x y ) MeshName)(progn
		(animationonoff FollowerControls Run 1 2)
		(triggeranimation Leader "Set as Cursor01") ; use cheese wedge as cursor
		(objectshowhide Leader 0)
		)
		(progn
		(animationonoff FollowerControls Stand 1 2)
		(triggeranimation Leader "Set as Cursor01" 1)  ; stop cheese wedge as cursor
		(objectshowhide Leader 1)
		)
	)

Получаем координаты куда кликнул пользователь
Code:
	(setq worldPoint  (pickpointonplane x y '( 0 0 1 0)))
Считываем эти координаты в переменные
Code:
	(setq Xpos1 (nth 0 worldPoint)) ; cursor position
	(setq Ypos1 (nth 1 worldPoint))
	;we know z is 0
Здесь какой то объект переносится в точку куда щелкнул пользователь
Code:
	(setobjectlocation Leader Xpos1 Ypos1 0) ; set cursor position object
вот определении координат вектора где Xpos1 Ypos1 координаты щелчка
Code:
Xbase Ybase координаты следящего объекта
	(setq Xvector1 (- Xpos1 Xbase)) ; get vector displacement using the planar position with base point (0,0)
	(setq Yvector1 (- Ypos1 Ybase)) ;
Определении между ними дистанции
Code:
	(setq mag1 (sqrt (+ (pow Xvector1 2)(pow Yvector1 2)))) ; get magnatude/length of vector
ну это движение объекта в зависимости от его удаления от места щелчка
Code:
	(if (< mag1 12) ;if teapot is getting close to the cursor, slow it down (using the distance + 2), else keep it fast
		(setanimationvarbydesc Follower "Object Key Move01" "X Dist Per Sec" (+ mag1 2))
		(setanimationvarbydesc Follower "Object Key Move01" "X Dist Per Sec" 12)
	)
вот вычисление угла поправки, результат в радианах
Code:
	(setq dir (atan (/ Yvector1 Xvector1))) ; get direction in radians


	; figure out which quadrant it's in to correct direction in radians
вот тут не понятно, это что вроде в какую четверть попадает точка но черт его знает
Code:
	(if (and (< Xbase Xpos1)(> Ybase Ypos1))(progn
		;(princ "quad 1\n")
		(setq Quad 0)
		)
	) ; quad1
	(if (and (< Xbase Xpos1)(< Ybase Ypos1))(progn
		;(princ "quad 4\n")
		(setq Quad 0)
		)
	); quad 4
	(if (and (> Xbase Xpos1)(< Ybase Ypos1))(progn
		;(princ "quad 3\n")
		(setq Quad pi)
		)
	) ; quad 3
	(if (and (> Xbase Xpos1)(> Ybase Ypos1))(progn
		;(princ "quad 2\n")
		(setq Quad pi)
		)
	); quad 2
вот собственно окончательная поправка
Code:
(setq CorrectedRadian (+ quad dir))

; try to slow rotation when too close

это замедление ротации, но почему то оно отключено
Code:
;(if (and (< mag1 3)(> mag1 1.5))(setq CorrectedRadian (min (abs(+ OldRadian 1)) (abs CorrectedRadian))))
Вот собственно сама функция ротации
Code:
(setobjectrotation Leader 0 0 CorrectedRadian)
(setobjectrotation Follower 0 0 CorrectedRadian)
сохраняем предыдущий результат.
Code:
(setq OldRadian CorrectedRadian)
конец кода
Code:
(exit T)
Вот собственно сам пример работы этого алгоритма могу написать пример с этими формулами на акшон скрипте в флэш

\\__________________________________________________________________________

То есть z это внешняя переменная?
Я знаком с C# а вот до C++ никак руки не доходят.

Спасибо за помощь? попробую разобраться на выходных с этими алгоритмами))))
KUPRUM is offline   Reply With Quote
Old 04-14-2011, 10:58 PM   #116
Agronom
РядовойВ запасе
 
Join Date: Sep 2008
Posts: 29
Re: Внутри корабля

Quote:
Originally Posted by KUPRUM View Post
То есть z это внешняя переменная?
Это компонента кватерниона "p".
Code:
struct Quaternion
{
    float x, y, z, w;
};
Просто доступ косвенный:
Code:
Quaternion a; // объект класса Quaternion
Quaternion *p = &a; // указатель на объект "a" (его адрес в памяти)
// a.z == p->z
Agronom is offline   Reply With Quote
Old 04-14-2011, 11:02 PM   #117
KUPRUM
Адмирал флотаАдмирал флота
 
Faction:
Хиигаряне

Join Date: Nov 2008
Posts: 1,092
Re: Внутри корабля

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

А это как понимать? Quaternion * p отсюда это умножение?

Code:
void Slerp(Quaternion * res, Quaternion * q, Quaternion * p, float t)

Last edited by KUPRUM : 04-14-2011 at 11:13 PM.
KUPRUM is offline   Reply With Quote
Old 04-14-2011, 11:16 PM   #118
Agronom
РядовойВ запасе
 
Join Date: Sep 2008
Posts: 29
Re: Внутри корабля

Quote:
Originally Posted by KUPRUM View Post
в си нет глобальных переменных.
Как это - нет? Может в C#?
Quaternion - это структура (в C++ - класс, где всё по умолчанию public).
Agronom is offline   Reply With Quote
Old 04-14-2011, 11:20 PM   #119
KUPRUM
Адмирал флотаАдмирал флота
 
Faction:
Хиигаряне

Join Date: Nov 2008
Posts: 1,092
Re: Внутри корабля

Не, там тоже нет. Глобальные переменные есть в делфи, а в лисп они все глобальные.

Способы ссылки на переменные в C# аналогичен C++

Плохо что класс - значит оно мне тем более не канает. Не разрабатывать же его отдельно на лисп
KUPRUM is offline   Reply With Quote
Old 04-14-2011, 11:23 PM   #120
Agronom
РядовойВ запасе
 
Join Date: Sep 2008
Posts: 29
Re: Внутри корабля

Quote:
Originally Posted by KUPRUM View Post
А это как понимать? Quaternion * p отсюда это умножение?

Code:
void Slerp(Quaternion * res, Quaternion * q, Quaternion * p, float t)
Нет.
res - указатель (переменная, где хранится адрес кватерниона).

В C# будет что-то типа:
public static void Slerp(out Quaternion res, Quaternion q, Quaternion p, float t);
Agronom is offline   Reply With Quote
Reply


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT +3. The time now is 03:30 PM.

Page generated: 0.072 seconds (89.66% - PHP and 10.34% - MySQL), 12 queries total