[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум Panda3D - по русски » Panda3D » Общие вопросы » Заставь вершины шевелится (GeomVertexWriter() и GeomVertexReader())
Заставь вершины шевелится
g_p3dДата: Вторник, 28.04.2009, 20:56 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 17
Награды: 0
Репутация: 1
Статус: Offline
Например нам нужно создать океан с волнами.

У нас есть плоскость с девятью вершинами.
Вопрос как заставить эти вершины шевелится используя для этого GeomVertexWriter() и GeomVertexReader().

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

Из-за чего это происходит ?
Есть подозрение что где-то нехватает modifyPrimitive() но где никак непойму (возможно ошибаюсь).

Вот мне и захотелось поговорить на эту тему со знающими людьми.
Кто знает как работать с вершинами поделитесь пожалуйста опытом.

Вот архив с кодом:
Для запуска извлечь папку moveVertex в корень С:

Прикрепления: moveVertex.rar(4Kb)


Сообщение отредактировал g_p3d - Вторник, 28.04.2009, 21:17
 
ninthДата: Среда, 29.04.2009, 01:54 | Сообщение # 2
Admin
Группа: Администраторы
Сообщений: 1554
Награды: 5
Репутация: 46
Статус: Offline
У тебя в модели косяк. Открой в текстовом редакторе и убери строку <Dart> {1}
 
g_p3dДата: Среда, 29.04.2009, 21:44 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 17
Награды: 0
Репутация: 1
Статус: Offline
ninth ты человек сильно помог спосибо тебе.

Что это за <Dart> {1} такой и откуда он взялся.
Я модель из 7-го 3ds Max-а экспортировал удачно, все было нормально некаких глюков небыло.
Ну да-ладно.

Вот код глянте что получилось я его немного перелопатил и все заработало.
Кто знает как ускорить или сократить этот код выскажите своё мнение.

Вот 2-я версия архива с роботоспособным кодом:
Для запуска извлечь папку moveVertex в корень С:

Прикрепления: moveVertex2.rar(4Kb)


Сообщение отредактировал g_p3d - Среда, 29.04.2009, 21:46
 
ninthДата: Четверг, 30.04.2009, 02:49 | Сообщение # 4
Admin
Группа: Администраторы
Сообщений: 1554
Награды: 5
Репутация: 46
Статус: Offline
Ты скорее всего экспортировал как персонажа, а не как статичный меш. Судя по документации, этот тэг относится к стартовому положению костей.
Насчёт ускорить - лучше просчитывать не каждый фрейм, а n раз в секунду, т.е. задачу вешать не на taskMgr.add() а на taskMgr.doMethodLater()
так же можно использовать GeomVertexRewriter вместо ридера и райтера, скорости не добавит, но код несколько сократит. Поиск составляющих геометрических узлов (а может даже массив вершин) стоит сделать один раз и запомнить в какой-нить глобальной переменной, а не искать каждый раз при обработке.

Кста, почему у тебя так странно указан путь к твоей модели? '../moveVertex/plane.egg' Не проще ли просто 'plane.egg' - заодно избавишься от привязки к папке.

Ещё одно - несколько странное объявление функций, ИМХО. Функция в функции - не то чтобы так нельзя, но как-то непривычно )

 
g_p3dДата: Суббота, 02.05.2009, 12:36 | Сообщение # 5
Рядовой
Группа: Пользователи
Сообщений: 17
Награды: 0
Репутация: 1
Статус: Offline
1 (ninth) Насчёт экспортировал как персонажа скорее всего ты прав. Я проверил еще несколько
своих моделей там тоже есть этот <Dart> {1}.

2 (ninth) Насчёт ускорить - лучше просчитывать не каждый фрейм, а n раз в секунду,
Там всё так и работает только считается не N раз в секунду, а через самодельный таймер
в функции mLoop переменная time=time-.5 # Здесь указывать с кокой скоростью модель будет обновлятся.
А вот этим taskMgr.doMethodLater() я непонял как пользоваться потом в документацию гляну.

3 (ninth)Так же можно использовать GeomVertexRewriter.
Проверил согласен можно, а вот насчет того что скорости не прибавит это нетак. Прибавит не много
конечно но результат есть. Я протестировал Rewriter против Writer-а и Reader-а (10000 тысяч запусков
функции processVertexData(vdata)) сначала функцию с Writer и Reader результат был 13.6 сек, а потом
функцию с Rewriter результат был 6.5 сек Реврайтер быстрей и это однозначно, а код сократился
всего на одну строку и ускорился в два раза.

4 (ninth) Поиск составляющих геометрических узлов (а может даже массив вершин) стоит сделать один раз.
Ты абсолютно прав как я сам недопер такие вещи вобще надо за цикл выносить что я и зделал в этот раз.

5 говориш странно указан путь ('../moveVertex/plane.egg'). И этому есть объяснения.
Я раньше прогромировал на blitz3D так это привычка оттуда там без этого никуда.

6 (ninth) Ещё одно - несколько странное объявление функций. Функция в функции - не то чтобы так
нельзя, но как-то непривычно.Спосибо за критику.
насчет того что не привычно полностью согласен это из-за того что я есчё не полностью адоптировался
к коду питона. На Blitz3D я както складней писал код был более структурированный, а в питоне
все нетак как Blitz3D. У меня на питоне опыта всего 1.5 года.
Вобщем если в двух словах то я есчё эксперементирую со структурой кода пытаюсь зделать
свой код более понятным, более логичным.

Вот теперь я код действительно перелопатил.
У кого какие соображения будут по оптимизации кода неужели ето последняя версия архива.
Этот код в два раза быстрей предыдущих версий.

Вот 3-я версия архива с кодом:
Для запуска извлечь папку moveVertex в корень С:

Добавлено (02.05.2009, 12:36)
---------------------------------------------
Похоже больше никто не хочет развивать эту тему поэтому я отпровляю последний архив с кодом
в примеры кода.

Последняя версия архива теперь называется 'moveVertex Final'.

ninth спасибо.

Прикрепления: moveVertex3.rar(4Kb)


Сообщение отредактировал g_p3d - Суббота, 02.05.2009, 12:34
 
3dmaxДата: Пятница, 15.05.2009, 20:48 | Сообщение # 6
Генерал-майор
Группа: Проверенные
Сообщений: 334
Награды: 0
Репутация: 1
Статус: Offline
Давно хотел спросить что это за глюк такой (на картинке). Если за альфой находиться альфа то ко краям получается какая-то кромка через которую виден сразу объект без альфы. Текстура png, другие форматы с альфой не подошли sad Можно ли избавиться от этой кромки ?
Прикрепления: 7832277.jpg(39Kb) · 0254367.jpg(55Kb)


Сообщение отредактировал 3dmax - Суббота, 16.05.2009, 04:43
 
ninthДата: Суббота, 16.05.2009, 09:19 | Сообщение # 7
Admin
Группа: Администраторы
Сообщений: 1554
Награды: 5
Репутация: 46
Статус: Offline
А чего здесь пишешь?
Это прикол давний и известный, встречается даже в некоторых коммерческих играх. Адекватного решения я не знаю - только убрать полупрозрачность (т.е. оставить полностью прозрачные или непрозрачные участки текстуры), да и то не всегда помогает. Либо как-то шаманить с Z-буффером и сортировкой.
Возникает при близкорасположенных или пересекающихся полигонах с полупрозрачной текстурой
 
Форум Panda3D - по русски » Panda3D » Общие вопросы » Заставь вершины шевелится (GeomVertexWriter() и GeomVertexReader())
Страница 1 из 11
Поиск: