forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Вывод названий элементов загруженной модели (http://forum.boolean.name/showthread.php?t=1980)

Chuma 23.11.2006 13:15

Вывод названий элементов загруженной модели
 
Доброе время суток, господа!

У меня появилась следующая проблема. Есть один 3ds (или .х или любой другой файл - непринципиально) содержащий в себе n-ое (большое) количество 3д элементов (например кубы, сферы или более сложные) с разными именами. Могу ли я с помощью пика мышкой получить исходное название элемента с цель последующего вывода присвоенного ему какого обозначения из базы (если энтити наме x then текст - "это объект X")

У меня выборка почему то поэлементно не пашет :''(( Чтото я не догоняю...


Если можно - то с примером.

tormoz 23.11.2006 15:21

Re: Вывод названий элементов загруженной модели
 
Цитата:

m=LoadAnimMesh(patch$)
PickModeMesh(m,2)

....
В цикле:

If MouseHit(1)
ent=CameraPick(camera,mouseX(),MouseY())
If ent
name$=EntityName(ent)
EndIf
EndIf

Function PickModeMesh(entity,t_ype)
For i=1 To CountChildren(entity)
child=GetChild(entity,i)
EntityPickMode child,t_ype
If CountChildren(child)>0
PickModeMesh(child,t_ype)
EndIf
Next
End Function
Только пообзывай объекты в максе перед экспортом

Chuma 24.11.2006 12:21

Re: Вывод названий элементов загруженной модели
 
Цитата:

Только пообзывай объекты в максе перед экспортом
это ессно - я выше указывал что названия как раз разные давал.

Цитата:

m=LoadAnimMesh(patch$)
Блин вот в чем была фундаментальная загвоздка - в принципе моя идея была похожа - только не такая лаконичная и простая , но грузил loadmesh! Воистину, tormoz, вы второй раз Шикарнейшим образом помогаете мне - красиво и грамотно. Спасибо большое!!!

На сколько я понял только в таком варианте(LoadAnimMesh) можно нормально искать чаилды?

Сразу правда вылезло 2 проблемы

1. энтити альфа приказала долго жить, как и энтитиколор, амбиэнтколор... да и вообще освещение перестало влиять на модель...
На сколько я понял теперь необходимо полупрозрачность и цвет задавать только в максе изначально? Потому как я придполагаю что можно задавать цвет конкретному чаилдентити, например для его подсветки при наведении камеры (кстати как, если не сложно?), но раскрашивать в программе все 200 элементов довольно сложно.

2. и еще как лучше оформить список сейчас - так как моделей всего десяток пишу в цикле чтото вроде -

if name$="LAD_18" Then
name$="выбран LAD_18"
EndIf

If name$="LAD_20" Then
name$="выбран LAD_20"
EndIf

If name$="LAD_22" Then
name$="выбран LAD_22"
EndIf

UpdateWorld
RenderWorld
Text 40,40,name$
Flip


Буду благодарен за помощь...

Chuma 04.12.2006 03:04

Re: Вывод названий элементов загруженной модели
 
Цитата:

1. энтити альфа приказала долго жить, как и энтитиколор, амбиэнтколор... да и вообще освещение перестало влиять на модель...
сделал через

Function EntityAnimAlpha(m,a#)
If EntityClass$(m)="Mesh"
EntityAlpha m,1
EndIf
For i=1 To CountChildren(m)
ww=GetChild(m,i)
If CountChildren(m)>0
EntityAnimAlpha(ww,1)
EndIf
Next
End Function

Цитата:

2. и еще как лучше оформить список сейчас - так как моделей всего десяток пишу в цикле чтото вроде -
if name$="LAD_18" Then
name$="выбран LAD_18"
EndIf
сделал через name$ = Replace$(name$,"LAD_","объект - LAD номер - ") странно я вообще не помнил такую комманду раньше =) а то пытался посимвольно анализировать стороку и т.п. А все оказалось так просто...

как обычно - 2 вопроса
1. Если использовать эту альфу - то объект один раз выделенный (тоесть пока пикаем на нем) становится полупрозрачным навсегда. Как либо можно его в исходное состояние?
2. появилась идея выбранный чайлд выводить отдельно в окно второй камеры (классический пример - наводим на элемент - выезжает панелька/окошко в котором появляется только(!) сей объект, например в "проволочном виде" отделенный от всего остального ентити и крутится например) Никто не поделится общей идеей как это реализовать?

jimon 04.12.2006 08:59

Re: Вывод названий элементов загруженной модели
 
1) у тебя в EntityAnimAlpha второй параметр не юзается

HolyDel 05.12.2006 01:40

Re: Вывод названий элементов загруженной модели
 
Цитата:

Сообщение от Chuma
1. Если использовать эту альфу - то объект один раз выделенный (тоесть пока пикаем на нем) становится полупрозрачным навсегда. Как либо можно его в исходное состояние?

Думаю так:
oent=ent
ent=CameraPick(camera,mouseX(),MouseY())
if oent<>ent then entityalpha oent,1

Цитата:

Сообщение от Chuma
2. появилась идея выбранный чайлд выводить отдельно в окно второй камеры (классический пример - наводим на элемент - выезжает панелька/окошко в котором появляется только(!) сей объект, например в "проволочном виде" отделенный от всего остального ентити и крутится например) Никто не поделится общей идеей как это реализовать?

Создаем две камеры одну на весь экран, другую маленькую, маленькую
[blitz]
;запихиваем куда нибудь подальше, например
EntityPosition cam2,100000,0,0
;и задаем ей область выода на экран
CAmeraViewport 700,500,100,100
;чтоб было в нижнем правом углу
[/blitz]
там где рендер


[blitz]
;если не показывать модельку

if showmodel=0

;собсно рендер
Wireframe 0
CameraProjmode cam2,0
RenderWorld

; убираем копию, если она была
if copymodel<>0 then freeentity copymodel:copymodel=0

else

;если копии небыло, то делаем
if copymodel=0
copymodel=copyentity(ent)
positionentity copymodel,100000,0,-10
endif

;рендерим мир, предварительно отрубив мелкую камеру
wireframe 0
CameraPrroMOde cam2,0
RenderWorld

;крутим модель
turnentity copymodel,1,0,0.2

;врубаем мелкую, отрубаем основную
CameraProjMOde cam2,1
CamerProjMOde cam,0
Wireframe 1
RenderWorld
CameraProjMode cam,1

endif

[/blitz]

З.Ы. Писалось в браузере поэтому ХЗ.

Chuma 05.12.2006 02:40

Re: Вывод названий элементов загруженной модели
 
jimonточнее так

Цитата:

EntityAnimAlpha(ent,0.8 )

Function EntityAnimAlpha(m,a#)
If EntityClass$(m)="Mesh"
EntityAlpha m,a#
EndIf
For i=1 To CountChildren(m)
ww=GetChild(m,i)
EntityAnimAlpha(ww,1)
Next
End Function
HolyDel попробую-отпишусь спасибо большое

Chuma 05.12.2006 16:03

Re: Вывод названий элементов загруженной модели
 
Цитата:

Сообщение от HolyDel
Думаю так:
oent=ent
ent=CameraPick(camera,mouseX(),MouseY())
if oent<>ent then entityalpha oent,1

так и не понял куда вставлять,:(
вот мой цикл

[blitz]
PickModeMesh(sp,2)

While Not KeyHit(1)

If MouseHit(1)
ent=CameraPick(camera,MouseX(),MouseY())
If ent name$=EntityName(ent)
EntityAnimAlpha(ent,0.8 ); функция в предыдущем моем посте
EndIf

If KeyDown(200) Then
... управление камерой короче
If KeyDown(205) TurnEntity player,0,-1,0

UpdateWorld
RenderWorld
Text 40,40,name$
Flip
Wend
End
[/blitz]

Куда засовывать так и не понял...




Цитата:

Сообщение от HolyDel
Создаем две камеры одну на весь экран, другую маленькую, маленькую
[blitz]
;запихиваем куда нибудь подальше, например
cam2=CreateCamera()
PositionEntity cam2,100000,0,0
;и задаем ей область выода на экран
CAmeraViewport 700,500,100,100
;чтоб было в нижнем правом углу
[/blitz]

это понятно спс.

[quote=HolyDel]
там где рендер
[blitz]
;если не показывать модельку

........
endif
[/blitz]

с этим сорри - тоже не разобрался... не затруднит ли поподробнее ? Буду признателен...

HolyDel 06.12.2006 01:28

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

[blitz]
перед while oent=0; на всякий случай

If MouseHit(1)
ent=CameraPick(camera,MouseX(),MouseY())
If ent name$=EntityName(ent)
if oent<>ent and oent<>0 then EntityAnimAlpha(ent,1)
EntityAnimAlpha(ent,0.8 ); функция в предыдущем моем посте
oent=ent
endif
EndIf
[/blitz]

с камерой будет сложно писать конкретный пример, без возможности его отладки, будет исходник (с моделькой), посмотрю.
или крепи его сюда или отправь на mailto:[email protected].

HolyDel 06.12.2006 01:29

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

[blitz]
перед while oent=0; на всякий случай

If MouseHit(1)
ent=CameraPick(camera,MouseX(),MouseY())
If ent name$=EntityName(ent)
if oent<>ent and oent<>0 then EntityAnimAlpha(ent,1)
EntityAnimAlpha(ent,0.8 ); функция в предыдущем моем посте
oent=ent
endif
EndIf
[/blitz]

с камерой будет сложно писать конкретный пример, без возможности его отладки, будет исходник (с моделькой), посмотрю.
или крепи его сюда или отправь на [email protected]

Chuma 06.12.2006 15:08

Re: Вывод названий элементов загруженной модели
 
Вложений: 2
Цитата:

Сообщение от HolyDel
с камерой будет сложно писать конкретный пример, без возможности его отладки, будет исходник (с моделькой), посмотрю.
или крепи его сюда или отправь на [email protected]

прикладываю!!!

http://www.boolean.name/attachment.p...d=116540326 4

HolyDel 07.12.2006 02:48

Re: Вывод названий элементов загруженной модели
 
вот, с альфой разобрался, с камерой лажа какая-то, может позже разберусь (если разьерусь вообще)
[blitz]
Graphics3D 800,600,16,1
SetBuffer=BackBuffer()

;-globals-
Global fntArial, fntA
Global camera=CreateCamera() ; create camera (!!!)

cam2=CreateCamera()
PositionEntity cam2,-100000,0,0
CameraViewport cam2,0,500,100,100

AmbientLight 226,225,226 ;общий свет


;создаем эээ... машинку
Global player=CreateCube() ; create simple player
MoveEntity player,0,0,0
EntityType player,type_camera
EntityAlpha player,0
EntityRadius player,10,2

; грузим шрифты
fntArial=LoadFont("Arial cyr",20)



;главная модель
sp =LoadAnimMesh("21.3ds")
PositionEntity sp,0,-5,-5
ScaleEntity sp,0.0001,0.0001,0.0001
EntityColor sp,255,255,255
MoveEntity sp,-260,-20,150

PickModeMesh(sp,2) ;юзаем пикентити

HidePointer ;прячем мышку
SetBuffer BackBuffer()
oent=0

While Not KeyHit(1)

; If MouseHit(1) ; Отрубить если отрубить клик мыши
ent=CameraPick(camera,MouseX(),MouseY())

If oent<>ent And oent<>0 Then EntityAnimAlpha(oent,1)

If ent
If showmodel=0 Then showmodel=CopyEntity(ent)
name$=EntityName(ent)
;EntityAnimAlpha(ent,Abs(Sin(MilliSecs()*2))/2+0.6)
EntityAlpha ent,Abs(Sin(MilliSecs()*2))/2+0.6
Else
If showmodel<>0 Then FreeEntity showmodel:showmodel=0
EndIf
oent=ent

If KeyDown(200) Then
MoveEntity player,0,0,.2
End If

If KeyDown(208) Then
MoveEntity player,0,0,-.2
End If

If KeyDown(203) TurnEntity player,0,1,0
If KeyDown(205) TurnEntity player,0,-1,0

SuperCam(camera,player,.02,18,4,40,2)
SetCameraFOV(Camera, 100)

;SuperCam(camera,player,.02,18,4,40,2)
SetCameraFOV(Cam2, 100)

UpdateWorld

If showmodel=0
CameraProjMode cam2,0
CameraProjMode camera,1
RenderWorld
Else

CameraClsColor cam2,Rnd(40),0,0

CameraProjMode cam2,1
CameraProjMode camera,1
PositionEntity showmodel,-100000,0,-150
TurnEntity showmodel,1,0,0.1
EntityAlpha showmodel,1
PointEntity cam2,showmodel
RenderWorld



EndIf


SetFont fntArial
If Not name$=""
Color 32,32,32
OutlineText mx+20,my,"объект: "+name$
Color 255,255,255
Text mx+20,my,"объект: "+name$
EndIf

;; курсор мыши
mx=MouseX()
my=MouseY()
Color 32,32,32
For tx=-1 To 1
For ty=-1 To 1
Line mx+tx,my+ty,mx+6+tx,my+6+ty
Line mx+tx,my+ty,mx+tx,my+8+ty
Next
Next
Color 255,255,255
Line mx,my,mx+6,my+6
Line mx,my,mx,my+8

; скриншоты
If KeyDown (59)
SaveBuffer FrontBuffer (), "grab" + grab + ".bmp"
grab = grab + 1
EndIf

Flip

Wend
End


FreeFont fntArial
FreeFont fntA



Function SetCameraFOV(Camera, FOV#)
CameraZoom Camera, 1.0 / Tan(FOV#/2.0)
End Function

Function SuperCam(cam,ent,cspeed#,dist#,hite#,xrot#,tilt#)

TFormPoint 0,hite#,-dist#,ent,0

cx#=(TFormedX()-EntityX(cam))*cspeed#
cy#=(TFormedY()-EntityY(cam))*cspeed#
cz#=(TFormedZ()-EntityZ(cam))*cspeed#

TranslateEntity cam,cx,cy,cz
PointEntity cam,ent
RotateEntity cam,xrot#,EntityYaw(cam),tilt#

End Function

Function PickModeMesh(entity,t_ype)
For i=1 To CountChildren(entity)
child=GetChild(entity,i)
EntityPickMode child,t_ype

If CountChildren(child)>0
PickModeMesh(child,t_ype)

EndIf
Next
End Function

Function EntityAnimColor(m,r,g,b)
If EntityClass$(m)="Mesh"
EntityColor m,r,200,b
EndIf
For i=1 To CountChildren(m)
ww=GetChild(m,i)
EntityAnimColor(ww,r,200,b)
Next
End Function

Function EntityAnimAlpha(m,a#)
If EntityClass$(m)="Mesh"
EntityAlpha m,a#
EndIf
For i=1 To CountChildren(m)
ww=GetChild(m,i)
EntityAnimAlpha(ww,a#)
Next
End Function

Function OutlineText(TextX,TextY,TextTxt$,TextCenter=False, TextVertical=False)
For tx=-1 To 1
For ty=-1 To 1
Text TextX+tx,TextY+ty,TextTxt$,TextCenter,TextVertical
Next
Next
End Function
[/blitz]

Chuma 08.12.2006 05:00

Re: Вывод названий элементов загруженной модели
 
Супер!!! Спасибо огромное!
Все замечательно пашет

а это -
EntityAlpha ent,Abs(Sin(MilliSecs()*2))/2+0.6 - чтоб плавно моргало?? чтото у меня не понеслась EntityAlpha ent,0.6 - поставил.. наверное из за фпс счетчика.

Будет время посмотри как во второую камеру запихнуть еще модель. А то всетаки одного изменения альфы - маловато, наглядности не хватает.
Я пробовал создавать маштабиорванную копию чаилда*1.1 с те ме же координатами (как у тебя сделано) чтоб как то еще выделить текщую модель - но чет пока не получилось.

Там, кстати еще фунция есть (в исходнике)

Цитата:

Function EntityAnimColor(m,r,g,b)
If EntityClass$(m)="Mesh"
EntityColor m,r,200,b
EndIf
For i=1 To CountChildren(m)
ww=GetChild(m,i)
EntityAnimColor(ww,r,200,b)
Next
End Function
она также как и альфа пашет - но если в альфе изначально объекты непрозрачные и их (с твоей помощью =)) легко можно вернуть в исходный вид, то для цвета надо както получить изначальный , потом перекрасить , потом снова в изначадьный. Все объекты разноцветные.

не мог бы ты сказать каким образом можно сделать (но вообще я так думаю надо просто порыться в хелпах)

А вообще спасибо тебе лично и форуму за поддержку - я бы месяц парился!!! Респект комьюнити!

HolyDel 09.12.2006 01:04

Re: Вывод названий элементов загруженной модели
 
пжста. Всегда обращайся ;)
00000001) Цвет модели задавался в редакторе (максе там, или исчо где)?
если так то перекрасить в исходный цвет просто - EntityColor D5D3C9,255,255,255. Если цвет задавлся програмно то придется делать так как ты сказал.
00000010) Насчет камеры, теоретически доджно было б работать, но насколько надо отодвинуть модеь чтоб она вошла в камеру, хз.

11111111) Это действительно очень хорошее комьюнити, наверное лучшее.

Chuma 12.12.2006 11:42

Re: Вывод названий элементов загруженной модели
 
более-менее разобрался - а реально ли запросив, точнее введя имя объекта, например "shar 2" (из вышеуказанного аттача) высветить его - нет ли тут каких нить подводных камней?

HolyDel 13.12.2006 01:47

Re: Вывод названий элементов загруженной модели
 
я думаю надо делать через списки. типа:
type my_element
field ent
end type

=================================================

Function PickModeMesh(entity,t_ype)
For i=1 To CountChildren(entity)
child=GetChild(entity,i)

me.my_element=new my_element
me/ent=child

EntityPickMode child,t_ype
If CountChildren(child)>0
PickModeMesh(child,t_ype)
EndIf
Next
End Function

================================================== ===
name$=input("ddtlbnt ccasf:")

for me.my_element=each my_element
if lower(entityname(me\ent))=lower(name$) then // ета часть выбрана
next

Chuma 14.12.2006 12:39

Re: Вывод названий элементов загруженной модели
 
сенкс огромный - попробую...
только попозже, работы много.
Обязательно отпишусь - а вообще HolyDel, огромный тебе респект. Ибо, увы, мой мозг, наверное, уже просто не воспринимает ни понятие типа ни простейшие логические операции. Пытаюсь въехать уже в готовый код - очень со скрипом получается, молодежи как то смотрю попроще.

Chuma 17.12.2006 18:14

Re: Вывод названий элементов загруженной модели
 
Я абсолютно дико извиняюсь =)
Но опять вопрос, очень надеюсь на помощь.
Вернее 2 вопроса.
Ибо наконец удалось из предыдущего поста HolyDel'а найти второй элемент второй камерой - парился всю ночь (EntityInView(showmodel,cam2) - помог найти пропажу) - только вот надо этот мех как-то привязывать ко второй камере по ее центру - а то каждая выбранная ентити появляется в разных ее углах. Можно ли камеру другим способом "привязать" к этому элементу (посадить в центр экрана, на строго определенном расстоянии - просто попытки подгона вручную координат увы ничего не дали) Объект перемещается относительно каких то своих координат так?


2-й вопрос по поводу поиска:
при выборе нормального эл-та - вылетает...расположил код так -
Цитата:

Сообщение от HolyDel
я думаю надо делать через списки. типа:
type my_element
field ent
end type

в начало

Цитата:

Сообщение от HolyDel
=================================================
Function PickModeMesh(entity,t_ype)
For i=1 To CountChildren(entity)
child=GetChild(entity,i)

me.my_element=new my_element
me/ent=child

EntityPickMode child,t_ype
If CountChildren(child)>0
PickModeMesh(child,t_ype)
EndIf
Next
End Function
================================================== ===

заменяем этой версией предыдущую функцию

в цикле -
if keyhit(57) then
Цитата:

Сообщение от HolyDel
name$=input("ddtlbnt ccasf:")


а вот с этой частью полный тупняк - пробую сделать ентити выделенным - вылет с ненайденым...
Цитата:

Сообщение от HolyDel
for me.my_element=each my_element
if lower(entityname(me/ent))=lower(name$) then
// ета часть выбрана
next

ета часть выбрана - это как??? 8)

HolyDel 18.12.2006 02:54

Re: Вывод названий элементов загруженной модели
 
А че с ней зделать то нада. указатель на ентити есть, далее с етой ентити можете делать че захотите. Можно еще добавить поле selected и присаввать ему еденичку, а потом перебирать все елементы списка и когда найден выбранный заставить его моргать, хотя тогда будут проблемы с выделением мышью, короче, чтоб работало и то и то придется делать глобальную перестройку кода, если скините новую версию (архив) посмотрю.

Chuma 18.12.2006 04:01

Re: Вывод названий элементов загруженной модели
 
Цитата:

Сообщение от HolyDel
А че с ней зделать то нада. указатель на ентити есть, далее с етой ентити можете делать че захотите. Можно еще добавить поле selected и присаввать ему еденичку, а потом перебирать все елементы списка и когда найден выбранный заставить его моргать, хотя тогда будут проблемы с выделением мышью, короче, чтоб работало и то и то придется делать глобальную перестройку кода, если скините новую версию (архив) посмотрю.

Логично! =) Чтобы ответить надо знать что нужно. Вскрываюсь...

Исходные данные. Итак есть модель, содержащая кучу элементов (более сотни), ну.. например, игровая карта а-ля варкрафт... ну или фалаут... или ГТА1-2 или да все что угодно.
Все объекты на ней (дома/строения/области) имеют заранее указанные оригинальные названия. текстур пока на элементах нет.
Камера тупо летает над картой.

Задача. Используя блитц сделать своеобразный вьювер.
1) сделать выбор объекта мышкой (благодаря Вам - готово, объект не мигает (косяк при клике) - но зато выделяется другим цветом, хотя для некоторых элементов не очень наглядно... может флажек рисовать? или в рамочку обводить? ;) )

2) для большей наглядности создать отдельную камеру2 для показа определенного (выбранного на данный момент) элемента в 3д, причем только его без остальных элементов (просто тупо крутить его перед камерой выводя поверх информацию о объекте - напр. "здание - магазин оружия" или "пещера драконов" - текст вбить по желанию (я просто делаю - при указании на элемент я подменяю его имя заданное в редакторе на "виртуальное"
name$ = Replace$(name$,"NOVA_2","<Имперская база - Nova 2!")
работает... правда вбивать сотню элементов в код - сурово... А они же еще меняются... )

3) организовать поиск по элементом с их выделением и передачей во камеру2 и причем камера 1 (основная) должна .... эээ... подъзжать к этому зданию/сооружению (центроваться на ней). тоесть по сути это пункт 2 набранный с клавиатуры.

4) Теоретически еще хотелось бы реализовать текстурирование опр. элементов из общего списка(имеющих например имена - "пещера *" из блитца определенными текстурами) - но это не особо горит...

Короче классический пример стратегии или top/down RPG типа Fallout... =)
Очень сам их люблю - но попытался ткнутся - оказлось все довольно заморочено.

ЗЫ.
- Проект ТОЧНО не коммеческий, а чисто любительский =) (мозгов всеравно не хватит)
- Я НЕ пытаюсь выехать на чужем горбе - просто поставил себе цель - очень бы хотелось ее реализовать - надоело тупо скатывать и переделывать какието демки и просто менять в них значения, захотелось мааааленький такой проект где есть определенная цель=)))
- я тут подумал, что можно использовать например для поэлементного просмотра сложных агрегатов (узлов/движков и т.д.) нарисованных в автокаде/максе.

ЗЫЗЫ HolyDel, спасибо еще раз за помощь! СОрцы пошлю позже, но по сути я там ничего после тебя не изменял координально... поиск не прикрутил.... отмаштабировал только модель да и "нащупал" с грехом пополам второй камерой отдельный меш. Ну там косметика еще - скайбокс, фог, лампочки повесил...

Chuma 19.12.2006 05:16

Re: Вывод названий элементов загруженной модели
 
HolyDel, выслал исходник тебе на мыло!:-)

посмотри пожалуйста... Если что непонятно - стучись, хотя думаю в основном будет непонятно мне. (комментируй свой код пожалуйста, ибо цель то не просто результат, а его понимание и осознание =))) - а я неоторые фишки не сразу схватываю... Но быстро учусь...

HolyDel 21.12.2006 02:12

Re: Вывод названий элементов загруженной модели
 
собсно:
[blitz]
If KeyDown(57) Then
name$=Input("Имя объекта:") ;- внимание после нажатия пробела - появляется лишний пробел в строке запроса...АККУРАТНО ИСКАТЬ
For me.my_element=Each my_element
If Lower(EntityName(me\ent))=Lower(name$) Then
;AmbientLight 16,15,26 ;общий свет
;showmodel=CopyEntity(ent) ;не пашет ... =(
If oent<>0 And oent<>me\ent Then EntityAnimColor(oent,255,255,255)
EntityAnimColor(me\ent,15,205,155)
oent=me\ent
PlaySound (sndPlayerDie)
EndIf
Next
End If
[/blitz]
теперь объясню:
в циклу перебераем все объекты, если нушелся объект с заданным именем то:
1) развыделяем тот объект, который был выделен
2) выделяем найденый объект
3) запоминаем ссылку на вновь выделенный объект, чтоб его можно было потом развыделить
4) играем звук ;)
все.

Chuma 21.12.2006 03:14

Re: Вывод названий элементов загруженной модели
 
я в шоке. :lol: Ты не поверишь как я тебе благодарен с поиском...
эх всегда говорил что программер - это призвание! Попробую завтра прикрутить. Эх - будешь в питере с меня ... хм.. много чего.

эх... посмотрел я на все это... может мне забить на карту аля варик,она загибатся стала - 100000 поликов модель, и никакие фоги не помогут - модель то одна....тормозит. Зато мне тут один конструктор модель двигателя принес автокадовскую - поколдовал над кодом - такое заглядение, каждый узел выделяется - ляпота!
может карту родного города слепить? там же одни кубы-хрущевки :). короче как чувствовал - в этом что-то есть. И главное более-менее понятно.

Ище вопрос HolyDel, ты вторую камеру относил на 20000 единиц для того чтоб она основную модель не захватывала? Ограничение на дальность как я понял.

HolyDel 21.12.2006 23:10

Re: Вывод названий элементов загруженной модели
 
Спасибо за слова добрые.

насчет модели:
попробуй ставить EntityParent child,0 (!!! d gjcktly.. jxthtlm). так удастся разбить одну модель на несколько. и будет работать FOG, хотя 100 к.п. для сцены ето много.

насчет камеры:
так точно, именно для этого.

Chuma 23.12.2006 05:27

Re: Вывод названий элементов загруженной модели
 
Поиск пашет - я пищу... Я правда не знаю нафик это мне пока надо - но чтото в этом есть! :lol: до флюшкея вот допер =)


Цитата:

Сообщение от HolyDel
попробуй ставить EntityParent child,0 (!!! d gjcktly.. jxthtlm). так удастся разбить одну модель на несколько. и будет работать FOG, хотя 100 к.п.

эээ в последнюю очередь где...
и что должно случится - ну отрубаем мы родителя... гм... фог только на 1 элемент и действует получается?

я просто чутка логику потерял...
Единственное что возможно это поможет эээ энтитям/дубликатам во вторую камеру иметь одну и ту же координату а не смещатся относительно центра, тоесть так же как они и находятся в исходной позиции... или лучше кидать в центр высчитывая центральную координту ентити.. ну эт я придумаю... аниммеш центровать понял как, а уж обычный тоже придумаю =)

Chuma 08.01.2007 03:56

Re: Вывод названий элементов загруженной модели
 
Гм.. очередной вопрос -
используя вышеуказанные операции находим ентити...
а вот теперь хочу чтобы над ними висел Labelentity или чтою после поиска камера подъезжала к найденому объекту (тоесть названия либо над всеми ентитями в камере, либо над выбраным...)
Только вот никак координаты не пойму как находить у oent (выделеной)...


классический код я так понимаю чтото вроде ...

Function Label3D_Label(camera, entity, label$, offx#=0, offy#=0, offz#=0) ;-; camera - which camera is being used to display the world.

; entity - which entity to draw a label over
; label$ - text to show as the label
; offx# - world X offset position of the center of the label
; offy# - world Y offset position of the center of the label
; offz# - world Z offset position of the center of the label


If EntityInView (entity, camera)
CameraProject camera, EntityX#(entity, True) +offx#, EntityY#(entity, True) +offy#, EntityZ#(entity, True) +offz#
w = StringWidth (label$)
h = StringHeight (label$)
x = ProjectedX () - (w / 2) - 1
y = ProjectedY () - (h / 2) - 1
Color 0, 0, 0
Rect x, y, w + 2, h + 2, 1
Color 255, 255, 255
Text x, y, label$
EndIf
End Function


только вот для элементов анимеха он не катит - а мммм... стыдно признаться, я так и не понял даже читая как находим нужный...


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

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