 |
3D-программирование Вопросы, касающиеся программирования 3D мира |
02.11.2009, 04:31
|
#1
|
Оператор ЭВМ
Регистрация: 14.01.2006
Сообщений: 25
Написано 0 полезных сообщений (для 0 пользователей)
|
Работа с материалами
Всем привет, появился такой, вроде бы простой, но для меня сложный вопрос. 
Решил заняться созданием нормальной системы материалов. Попробовал вот написать для теста распознавание пикнутой текстуры, опираясь на то что знаю (а я знаю я немного  ), но не получилось.
Скорее всего я где-то туплю (причем очень конкретно), но не могу понять где.
Имеем: один единый меш с разными наложенными на него текстурами.
Нужно: при "пикании" на меш узнавать на какую из наложенных текстур на меше мы попали.
Не получается: при "пикании" в любую часть меша выводится имя только одной текстуры (предположительно, самой последней из списка).
Семпл в аттаче, заранее спасибо. 
|
(Offline)
|
|
03.11.2009, 16:13
|
#2
|
Оператор ЭВМ
Регистрация: 14.01.2006
Сообщений: 25
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Работа с материалами
Ау, ни у кого идей нету? 
|
(Offline)
|
|
03.11.2009, 16:15
|
#3
|
Бывалый
Регистрация: 25.12.2007
Адрес: г. Краснодар
Сообщений: 894
Написано 421 полезных сообщений (для 1,079 пользователей)
|
Ответ: Работа с материалами
Разбирал, ковырял, пока непридумал.
|
(Offline)
|
|
03.11.2009, 16:40
|
#4
|
Дэвелопер
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений (для 774 пользователей)
|
Ответ: Работа с материалами
используй логику, при пикании получаем номер пикнутой поверхности, для этого не нужно перебирать и записывать все в тип. Юзай справку по команде PickedSurface(), а так то вот :
;graphics init==============
Graphics3D 800, 600, 32, 2
SetBuffer BackBuffer()
camera = CreateCamera()
AmbientLight 255, 255, 255
;testmesh loading==========
testl = LoadMesh( "map.b3d" )
PositionEntity testl, 0, 0, 10
EntityPickMode testl, 2
;======================
While Not KeyHit(1)
;texture detection==========
playerf_pick = CameraPick( camera, MouseX(), MouseY() )
If playerf_pick = testl Then
surface = PickedSurface()
brush = GetSurfaceBrush( surface )
material = GetBrushTexture( brush )
currtex$ = TextureName$( material )
EndIf
;======================
UpdateWorld
RenderWorld
Text 10, 300, currtex$
;======================
Flip
Wend
End
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
03.11.2009, 16:43
|
#5
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Работа с материалами
у тебя в коде ты после пика перебираешь все сюрфейсы объекта, создаёшь объекты со всеми их тексами, затем назначаешь currtex имя последней в each-переборе тексы)
чето ты замутился
попробуй так:
Graphics3D 800, 600, 32, 2
camera = CreateCamera()
AmbientLight 255, 255, 255
;testmesh loading==========
testl = LoadMesh( "map.b3d" )
PositionEntity testl, 0, 0, 10
EntityPickMode testl, 2
;======================
currtex$=""
While Not KeyHit(1)
;texture detection==========
playerf_pick = CameraPick( camera, MouseX(), MouseY() )
If PickedEntity() = testl Then
level_surface = PickedSurface()
level_brush = GetSurfaceBrush( level_surface )
level_material = GetBrushTexture( level_brush, 0 )
currtex$=TextureName(level_material)
EndIf
;======================
UpdateWorld
RenderWorld
;draw current texture name===
Text 10, 300, currtex$
;======================
Flip
Wend
End
код не тестил, но вроде правильно должно быть
не секу че ты там хотел с типами сделать
сравнивай узнанный texturename с базой и узнавай материал
texturename лучше избавлять от пути, в примерах блица была функция StripPath$
---
H@NON опередил)
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
|
|
03.11.2009, 16:48
|
#6
|
Оператор ЭВМ
Регистрация: 14.01.2006
Сообщений: 25
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Работа с материалами
Оп-па, спасибо большое!  А с типами это я уже отчаялся просто и наугад сделал. :D
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Работа с RMS |
Doctor Drive |
JAVA Micro Edition |
1 |
15.07.2009 16:41 |
моя работа |
Trilliput |
Работы |
7 |
10.01.2008 21:10 |
работа с RSS |
PHPman |
Основной форум |
5 |
06.08.2007 00:04 |
Работа с файлами |
smersh |
Blitz3D |
5 |
04.07.2007 12:56 |
Работа с БД |
Raiter |
Visual Basic |
0 |
22.02.2007 16:45 |
Часовой пояс GMT +4, время: 23:53.
|