Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 23.11.2006, 13:15   #1
Chuma
ПроЭктировщик
 
Регистрация: 23.11.2006
Сообщений: 130
Написано 3 полезных сообщений
(для 35 пользователей)
Смущение Вывод названий элементов загруженной модели

Доброе время суток, господа!

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

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


Если можно - то с примером.
(Offline)
 
Ответить с цитированием
Старый 23.11.2006, 15:21   #2
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
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
Только пообзывай объекты в максе перед экспортом
__________________
(Offline)
 
Ответить с цитированием
Старый 24.11.2006, 12:21   #3
Chuma
ПроЭктировщик
 
Регистрация: 23.11.2006
Сообщений: 130
Написано 3 полезных сообщений
(для 35 пользователей)
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


Буду благодарен за помощь...
(Offline)
 
Ответить с цитированием
Старый 04.12.2006, 03:04   #4
Chuma
ПроЭктировщик
 
Регистрация: 23.11.2006
Сообщений: 130
Написано 3 полезных сообщений
(для 35 пользователей)
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. появилась идея выбранный чайлд выводить отдельно в окно второй камеры (классический пример - наводим на элемент - выезжает панелька/окошко в котором появляется только(!) сей объект, например в "проволочном виде" отделенный от всего остального ентити и крутится например) Никто не поделится общей идеей как это реализовать?
(Offline)
 
Ответить с цитированием
Старый 04.12.2006, 08:59   #5
jimon
 
Сообщений: n/a
Re: Вывод названий элементов загруженной модели

1) у тебя в EntityAnimAlpha второй параметр не юзается
 
Ответить с цитированием
Старый 05.12.2006, 01:40   #6
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
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]

З.Ы. Писалось в браузере поэтому ХЗ.
(Offline)
 
Ответить с цитированием
Старый 05.12.2006, 02:40   #7
Chuma
ПроЭктировщик
 
Регистрация: 23.11.2006
Сообщений: 130
Написано 3 полезных сообщений
(для 35 пользователей)
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 попробую-отпишусь спасибо большое
(Offline)
 
Ответить с цитированием
Старый 05.12.2006, 16:03   #8
Chuma
ПроЭктировщик
 
Регистрация: 23.11.2006
Сообщений: 130
Написано 3 полезных сообщений
(для 35 пользователей)
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]

с этим сорри - тоже не разобрался... не затруднит ли поподробнее ? Буду признателен...
(Offline)
 
Ответить с цитированием
Старый 06.12.2006, 01:28   #9
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
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].
(Offline)
 
Ответить с цитированием
Старый 06.12.2006, 01:29   #10
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
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]
(Offline)
 
Ответить с цитированием
Старый 06.12.2006, 15:08   #11
Chuma
ПроЭктировщик
 
Регистрация: 23.11.2006
Сообщений: 130
Написано 3 полезных сообщений
(для 35 пользователей)
Re: Вывод названий элементов загруженной модели

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

http://www.boolean.name/attachment.p...d=116540326 4
(Offline)
 
Ответить с цитированием
Старый 07.12.2006, 02:48   #12
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
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(20 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]
(Offline)
 
Ответить с цитированием
Старый 08.12.2006, 05:00   #13
Chuma
ПроЭктировщик
 
Регистрация: 23.11.2006
Сообщений: 130
Написано 3 полезных сообщений
(для 35 пользователей)
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
она также как и альфа пашет - но если в альфе изначально объекты непрозрачные и их (с твоей помощью =)) легко можно вернуть в исходный вид, то для цвета надо както получить изначальный , потом перекрасить , потом снова в изначадьный. Все объекты разноцветные.

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

А вообще спасибо тебе лично и форуму за поддержку - я бы месяц парился!!! Респект комьюнити!
(Offline)
 
Ответить с цитированием
Старый 09.12.2006, 01:04   #14
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Вывод названий элементов загруженной модели

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

11111111) Это действительно очень хорошее комьюнити, наверное лучшее.
(Offline)
 
Ответить с цитированием
Старый 12.12.2006, 11:42   #15
Chuma
ПроЭктировщик
 
Регистрация: 23.11.2006
Сообщений: 130
Написано 3 полезных сообщений
(для 35 пользователей)
Re: Вывод названий элементов загруженной модели

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


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перебор элементов типа в обратном порядке ELIAS Blitz3D 4 08.12.2009 22:31
Lib_line32 - Горизонтальная полоска элементов odd Библиотеки 7 29.09.2009 21:59
построчный вывод Avatara Основной форум 4 10.11.2008 23:06
Плавный вывод текста GomZik 3D-программирование 21 15.01.2008 21:30
Примеры элементов GUI FrankH FAQ 17 14.01.2008 23:20


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com