forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   проблема c camerapick (http://forum.boolean.name/showthread.php?t=8261)

Hellfalcon 06.05.2009 23:05

проблема c camerapick
 
Здравствуйте!Такая вот проблемка:
Есть плоскость , на ней стоит башня . Башня с чайлдами(loadanimmesh).
У плоскости и у башни установил entitypickmode,*,2
Так вот , используя camerapick() - возращает только ,что пикнула плоскость ,а башню не получается . Пробовал entitypickmode для каждого чайлда - тоже не пикаются, только плоскость.

Nuprahtor 06.05.2009 23:22

Ответ: проблема c camerapick
 
Вообще у меня ни разу не получалось нормально использовать Pick команды с загружаемыми моделями, не знаю почему, может флаг "2" работает только с полигонами, созданными в блице программно?
Проще сделать объект-куб, присоединить его к башне и по нему обрабатывать CameraPick().

ABTOMAT 07.05.2009 00:04

Ответ: проблема c camerapick
 
Цитата:

Вообще у меня ни разу не получалось нормально использовать Pick команды с загружаемыми моделями, не знаю почему, может флаг "2" работает только с полигонами, созданными в блице программно?
враньё, всё работает у меня
Цитата:

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

MiXaeL 07.05.2009 00:42

Ответ: проблема c camerapick
 
Для AnimMesh, как и в случае с коллизией, при пике возможен только 1ый тип, т.е. сфера.
Вообще, любые пополигонные проверки применимы только к типу Mesh. В частности для спрайтов тоже придется юзать либо EntityRadius, либо EntityBox.

RTFM.

ABTOMAT 07.05.2009 01:42

Ответ: проблема c camerapick
 
Цитата:

Для AnimMesh, как и в случае с коллизией, при пике возможен только 1ый тип, т.е. сфера.
Почему у меня всё работает? Просто надо каждому чилду ставить.
RTFM.
Цитата:

В частности для спрайтов тоже придется юзать либо EntityRadius, либо EntityBox.
Это труЪ

MiXaeL 07.05.2009 09:41

Ответ: проблема c camerapick
 
В хелпе во всяком случае желтым по синему написано, что не должно работать. Может у тебя еще и пополигонная коллизия для аниммешей работает?

HolyDel 07.05.2009 10:06

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

impersonalis 07.05.2009 11:40

Ответ: проблема c camerapick
 
Тип 2 не требует установки примитива коллизии, потому работает в любом случае (а для спрайтов так и [вообще говоря] не имеет смысла иной метод).
Многие (типа) косяки с аниммешами и их хендлами-пивотами решаются флагом obscurer в соответствующих функциях. Про какие 10ки строк идёт речь?
Развели болтологию =\

HolyDel 07.05.2009 12:32

Ответ: проблема c camerapick
 
Цитата:

Многие (типа) косяки с аниммешами и их хендлами-пивотами решаются флагом obscurer в соответствующих функциях.
ну нифига себе! а я всю жизнь вручную решал.

Ичигорь 07.05.2009 13:40

Ответ: проблема c camerapick
 
Цитата:

ну нифига себе! а я всю жизнь вручную решал.
Это прям как:
doctor: У меня вчера шок был... узнал что Спрайт прозрачный, всю жизнь думал что он, сцуко, зелёный.
doctor: Можно сказать и пил его из за того, что он зелёный.
doctor: Да он и на вкус зелёный, не понимаю как он может быть прозрачным.

tormoz 07.05.2009 20:34

Ответ: проблема c camerapick
 
Код:

Function AnimEntityType( model, type, obs )

For i=1 To CountChildren(model)
child = GetChild(model,i)

If child<>0
EntityType child,type, obs

If CountChildren(child)>0
 AnimEntityType( child, type, obs )
EndIf
EndIf
Next
End Function


ABTOMAT 07.05.2009 22:05

Ответ: проблема c camerapick
 
Собсно что я и имел ввиду.

Hellfalcon 09.05.2009 01:02

Ответ: проблема c camerapick
 
Спасибо за ответы , но я сам разобрался ) .
Для animmesh можно ставить пик по полигонам , только надо каждому чайлду ставит entitypickmode ,и какому чайлду поставишь на тот и будет пикаться , если не ставить какому-нибудь чайлду пик то он просто пикаться не будет.Так что если в модели есть крупные чайлды то можно на них поставить пикмоде.
Но это очень тормозно получается, если пикать по полигонам 10 объектов (каждый ~ 1000 полигонов) ((.

ABTOMAT 09.05.2009 01:53

Ответ: проблема c camerapick
 
А ты думал в сказку попал?))
Я дак вообще давно забил на блицовый пик, юзаю теперь физиксовый пик, очень удобно и главное что физ модель как раз достаточно проста чтобы её пикать без лагов.

Hellfalcon 09.05.2009 13:32

Ответ: проблема c camerapick
 
А где можно взять физикс ?

MiXaeL 09.05.2009 13:36

Ответ: проблема c camerapick
 
Ааааргх!

Даже на форуме не раз обсуждалось.

Dzirt 09.05.2009 16:25

Ответ: проблема c camerapick
 
http://www.rubux.net/

Damp 11.05.2009 16:35

Ответ: проблема c camerapick
 
Бывает еще не пикается из-за вывернутых нормалей, при кривом экспорте.
---
Отступление по CameraPick, всегда вспоминаеься т.к. сам встревал )) - оно может тормозить даже на очень мощных компах и даже если пикать всего 1 раз за 10 циклов, почему хз, но по возможности лучше заменять на LinePick.

Sleepybear 13.05.2009 17:11

Ответ: проблема c camerapick
 
Пишу тут, что бы не создавать новой темы.

я делаю 3D меню
каждая строка меню это детеныш
когда наводиш на строку мышем она мерцает (это я сделал) подскажите а как сделать чтобы при клике на строке происходило действие?
CameraPick Возвращает номер выбранного объекта, а он, номер меняется :(
Код:

    Pick=CameraPick( MenyCamera,MouseX(),MouseY() )
    If Pick
        EntityAlpha Pick,Sin( MilliSecs() )*.5+1
;      If MouseDown(1)
;          Select
;            Case
;                               
;            Case
;                               
;            Case
;        End Select
;      EndIf
    Endif

Я догадываюсь, что както надо через имена детенышей но как их привязать к pick'ам ?
:SOS:

ABTOMAT 14.05.2009 00:06

Ответ: проблема c camerapick
 
Из теории вопроса: CameraPick возвращает хендл того объекта который пикнули. Соответственно если он совпадает с хендлом какого-л. детёныша (как ты выражаешься) то следует производить действие. Хендлы детей можно получить FindChild (если известно имя объекта в максе) или GetChild (удобно когда надо перебрать каждый). Учи матчасть. (т.е. GoTo Blitz Help)
А так код верно строишь! :super:

Код:

Pick=CameraPick( MenyCamera,MouseX(),MouseY() )
    If Pick
        EntityAlpha Pick,Sin( MilliSecs() )*.5+1
      If MouseDown(1)
          Select Pick
            Case хендл детёныша
                что делать               
            Case хендл другого детёныша
                что делать                 
            Case ну ты понял

        End Select
      EndIf
    Endif


Damp 14.05.2009 09:29

Ответ: проблема c camerapick
 
Еще разок вставлю свои 5 к :)
Pick=CameraPick( MenyCamera,MouseX(),MouseY() )
вот как раз из-за такой строки, выполняемой каждый цикл, одна простенькая игра нереально тормозила на некоторых компах, а на некоторых шла нормально.
С тех пор мне кажется, что уместно использовать только
if MouseHit(1) Pick=CameraPick( MenyCamera,MouseX(),MouseY() )
ну это имхо...
---
В твоем случае вместо
Select Pick
можно юзать
Select EntityName$(Pick)
предварительно дав всем кнопкам имена (в максе наверно меню делаешь)

Sleepybear 14.05.2009 11:46

Ответ: проблема c camerapick
 
Господа спасибо,
в перебор вставлял DebugLog EntityName$(GetChild(Meny,i))
а в Seleсt не додумался встывить :-D , видать устал вчера.

Damp
в моем случаи пикать после клика не подойдет, у меня при наведении мышем мерцание красивое (:@ чесно признаюсь гдето в примерах стырил) . Насчет тормозов, это менюшка, сделана как функция. пры выходе в меню игра встает на паузу.

ABTOMAT
Спасибо, приятно слышать

у меня сразу ещё вопрос не относящейся к делу.
DebugLog выводит что захочеш в Debugger
а какая команда выводит окно сообщений? (с кнопкой, как при ошибке)

нашел RuntimeError :)

ABTOMAT 14.05.2009 16:07

Ответ: проблема c camerapick
 
Цитата:

а какая команда выводит окно сообщений?
да, она
также можно использовать winapi (возможностей больше)

Hellfalcon 14.05.2009 22:40

Ответ: проблема c camerapick
 
Цитата:

Сообщение от ABTOMAT (Сообщение 104631)
А ты думал в сказку попал?))
Я дак вообще давно забил на блицовый пик, юзаю теперь физиксовый пик, очень удобно и главное что физ модель как раз достаточно проста чтобы её пикать без лагов.

а как физиксовым пиком тыкать по объктам мышкой (ну как в camerapick)?

ABTOMAT 15.05.2009 01:37

Ответ: проблема c camerapick
 
Цитата:

Сообщение от Hellfalcon (Сообщение 105007)
а как физиксовым пиком тыкать по объктам мышкой (ну как в camerapick)?

http://forum.boolean.name/showpost.p...20&postcount=9

Hellfalcon 15.05.2009 22:44

Ответ: проблема c camerapick
 
Цитата:

Сообщение от ABTOMAT (Сообщение 105018)

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

karry 21.05.2009 10:57

Ответ: проблема c camerapick
 
Развиваю тему :
Сделал пиканье по LoadAnimMesh, всё пикается, всё хорошо.
Добавил вторую камеру с маленьким вьюпортом 100x100 в уголке - перестало пикаться. Обычные меши пикаются, а составные - нет. Почему ?

Damp 21.05.2009 14:23

Ответ: проблема c camerapick
 
Может не ту камеру указываешь в CameraPick(...)

karry 21.05.2009 14:29

Ответ: проблема c camerapick
 
Я вторую камеру вообще нигде не указываю, она только создается, позиционируется, и задается вьюпорт, и всё.
secCam и mainCam перепутать трудновато.

impersonalis 21.05.2009 15:48

Ответ: проблема c camerapick
 
ты её хоть камерапроджектиш на 0?
или она у тебя на каждой итерации отрисовки юзаетцо? 2 рендера - жесть.
и главное терь логика завязана на рендере =\

karry 21.05.2009 15:58

Ответ: проблема c camerapick
 
Цитата:

ты её хоть камерапроджектиш на 0?
А зачем это ? Или считается общепринятым для получения Picture-in-Picture эффекта рендерить одной камерой, сохранять, выключать, включать вторую камеру, рендерить поверх, сохранять, выключать, включать первую...и так каждый кадр ? Я тебя правильно понял ?
Неужели вот это вот всё будет быстрее обрабатываться чем просто повесить вторую камеру ?

Цитата:

2 рендера - жесть.
Есть другой способ сделать сплит-скрин ?

impersonalis 21.05.2009 17:10

Ответ: проблема c camerapick
 
не обращай внимания. меня подставили.

karry 21.05.2009 23:43

Ответ: проблема c camerapick
 
Так а с камерой-то что делать...


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

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