|
3D-программирование Вопросы, касающиеся программирования 3D мира |
24.01.2007, 18:57
|
#1
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Выделение мышкой
Как выделить трехмерный объект мышкой? Через MouseX() и MouseY() не получается..! Я Даже и незнаю че и делать? Подскажите или дайте примерчик.
P.S Заранее благодарен.
|
(Offline)
|
|
24.01.2007, 19:04
|
#2
|
Дэвелопер
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений (для 164 пользователей)
|
Re: Выделение мышкой
Ну, если через МаусХ/У не выходит, значит придеццо собраться с духом, сжать зубы покрепче и сделать чв\ерез КамераПик/КамераПрожект.
|
(Offline)
|
|
24.01.2007, 19:06
|
#3
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Re: Выделение мышкой
А если не трудно разъясни про CameraPick / CameraProject а то в инглише
не очень то
|
(Offline)
|
|
24.01.2007, 21:03
|
#4
|
|
Re: Выделение мышкой
Смотри сэмплы к этим функциям.
|
|
|
25.01.2007, 01:41
|
#5
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Выделение мышкой
простой пример:
Graphics3D 640,480,16,2
SetBuffer BackBuffer()
cam=CreateCamera()
PositionEntity cam,0,30,-50
pl=CreatePlane()
PointEntity cam,pl
For i=1 To 5
For j=1 To 5
cub=CreateCube()
EntityColor cub,255,Rnd(255),128-Rnd(64)
PositionEntity cub,-20+i*6,2,-20+j*6
EntityPickMode cub,3
EntityBox cub,-1,-1,-1,2,2,2
Next
Next
oent=0
While 1
e=CameraPick(cam,MouseX(),MouseY())
If e<>0
EntityAlpha e,Sin(MilliSecs())
oent=e
Else
If oent<>0 Then EntityAlpha oent,1
oent=0
EndIf
RenderWorld
Flip
If KeyDown(1) Then Exit
Wend
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
25.01.2007, 12:06
|
#6
|
Нуждающийся
Регистрация: 01.10.2006
Сообщений: 55
Написано одно полезное сообщение (для 0 участников)
|
Re: Выделение мышкой
Может можно сделать с помощью pivot-ов. Создаешь 4 точки, на ландшафте, где ты указываешь курсором и чтобы они двигались по определенным координатам направления. А кубики проверялись находяться ли они внутри прямоугольника созданный спомощью этих точек. Я попробую сегодня это реализовать. Самому интересно, есть ли еще более простой пример.
|
(Offline)
|
|
25.01.2007, 13:46
|
#7
|
Дэвелопер
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений (для 164 пользователей)
|
Re: Выделение мышкой
Зачем 4 пивота?
Выделение по щелчку- КамераПиком, как описал ХолиДел.
Выделение "резиновой рамкой"- КамераПрожектом, проецируем координаты юнита в 2Д на экран и проверяем, не попали ли они в прямоугольникк (Х1,У1)-(Х2,У2), описаный растянутой рамкой.
Всё.
|
(Offline)
|
|
25.01.2007, 15:00
|
#8
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Re: Выделение мышкой
HolyDel спасибо тебе. уже нажал на кнопку Thanks
|
(Offline)
|
|
29.01.2007, 11:06
|
#9
|
Нуждающийся
Регистрация: 01.10.2006
Сообщений: 55
Написано одно полезное сообщение (для 0 участников)
|
Re: Выделение мышкой
Я так понял, спомощью уамера_пик, можно сразу же выделить все квадратики, как в Generals, Warcraft и т.д!? Кто нибудь может написать такую функцию!?За ранее блогадарен!
|
(Offline)
|
|
29.01.2007, 19:47
|
#10
|
|
Re: Выделение мышкой
Вам все либы подавай....самим писать нада, и думать головой. Може игру за вас написать в виде либы? Подключаешь....пишешь GameStart() - и вот ты уже легендарный ГеймДевелопер! Можно написать это в своем портфолио....=)
|
|
|
30.01.2007, 01:25
|
#11
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Выделение мышкой
зачем либу? функция будет сильно меняться в зависимости от самой игры.
|
(Offline)
|
|
31.01.2007, 10:42
|
#12
|
Нуждающийся
Регистрация: 01.10.2006
Сообщений: 55
Написано одно полезное сообщение (для 0 участников)
|
Re: Выделение мышкой
Зачем вообще тогда этот форум, если не хотят люди помогать!? И я думаю головой, но то что я не знаю я спрашиваю.
|
(Offline)
|
|
31.01.2007, 19:09
|
#13
|
|
Re: Выделение мышкой
ты попросил сделать, а не спросил о своей проблеме
обвинять пользоваталей форума в лени ето глупо
да и еще обвинять когда сам не знаеш чего хочеш...
|
|
|
01.02.2007, 01:55
|
#14
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Выделение мышкой
вот пример:
Graphics3D 800,600,16,1
SetBuffer BackBuffer()
Type unit
Field ent,sel
End Type
cam=CreateCamera()
PositionEntity cam,0,60,0
RotateEntity cam,60,0,0
p=CreatePlane()
EntityColor p,0,128,0
SeedRnd MilliSecs()
For i=1 To 10
u.unit=New unit
u\ent=CreateCube()
PositionEntity u\ent,Rnd(-100,100),3,Rnd(-100,100)
u\sel=0
Next
Local ox#,oy#,cx#,cy#,tx#,ty#
While Not KeyDown(1)
If MouseX()<5 Then TranslateEntity cam,-0.5,0,0
If MouseX()>795 Then TranslateEntity cam,0.5,0,0
If MouseY()<5 Then TranslateEntity cam,0,0,0.5
If MouseY()>595 Then TranslateEntity cam,0,0,-0.5
For u.unit=Each unit
If u\sel=1 Then EntityColor u\ent,255,255,0 Else EntityColor u\ent,0,0,0
Next
RenderWorld
If MouseDown(1)
cx#=MouseX()
cy#=MouseY()
If ox>cx Then minx=cx:maxx=ox Else minx=ox:maxx=cx
If oy>cy Then miny=cy:maxy=oy Else miny=oy:maxy=cy
Rect minx,miny,maxx-minx,maxy-miny,0
For u.unit=Each unit
CameraProject(cam,EntityX(u\ent),EntityY(u\ent),EntityZ(u\ent))
If ProjectedX()>minx And ProjectedX()<maxx And ProjectedY()>miny And ProjectedY()<maxy Then u\sel=1 Else u\sel=0
Next
Else
ox#=MouseX()
oy#=MouseY()
EndIf
Oval MouseX()-3,MouseY()-3,5,5,0
Flip
Wend
P/S\ правильно сделал, что исправил либу на функцию, а то ты етой либой всех в заблуждение ввел.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:35.
|