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=2499)

mr.DIMAS 24.01.2007 18:57

Выделение мышкой
 
Как выделить трехмерный объект мышкой? Через MouseX() и MouseY() не получается..! Я Даже и незнаю че и делать?:dontknow: :dontknow: Подскажите или дайте примерчик.

P.S Заранее благодарен.

Diplomat 24.01.2007 19:04

Re: Выделение мышкой
 
Ну, если через МаусХ/У не выходит, значит придеццо собраться с духом, сжать зубы покрепче и сделать чв\ерез КамераПик/КамераПрожект.
:"(

mr.DIMAS 24.01.2007 19:06

Re: Выделение мышкой
 
А если не трудно разъясни про CameraPick / CameraProject а то в инглише
не очень то

Черный крыс 24.01.2007 21:03

Re: Выделение мышкой
 
Смотри сэмплы к этим функциям.

HolyDel 25.01.2007 01:41

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


pipns 25.01.2007 12:06

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

Diplomat 25.01.2007 13:46

Re: Выделение мышкой
 
Зачем 4 пивота?
Выделение по щелчку- КамераПиком, как описал ХолиДел.
Выделение "резиновой рамкой"- КамераПрожектом, проецируем координаты юнита в 2Д на экран и проверяем, не попали ли они в прямоугольникк (Х1,У1)-(Х2,У2), описаный растянутой рамкой.
Всё.

mr.DIMAS 25.01.2007 15:00

Re: Выделение мышкой
 
HolyDel спасибо тебе. уже нажал на кнопку Thanks

pipns 29.01.2007 11:06

Re: Выделение мышкой
 
Я так понял, спомощью уамера_пик, можно сразу же выделить все квадратики, как в Generals, Warcraft и т.д!? Кто нибудь может написать такую функцию!?За ранее блогадарен!

Черный крыс 29.01.2007 19:47

Re: Выделение мышкой
 
Вам все либы подавай....самим писать нада, и думать головой. Може игру за вас написать в виде либы? Подключаешь....пишешь GameStart() - и вот ты уже легендарный ГеймДевелопер! Можно написать это в своем портфолио....=)

HolyDel 30.01.2007 01:25

Re: Выделение мышкой
 
зачем либу? функция будет сильно меняться в зависимости от самой игры.

pipns 31.01.2007 10:42

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

jimon 31.01.2007 19:09

Re: Выделение мышкой
 

ты попросил сделать, а не спросил о своей проблеме
обвинять пользоваталей форума в лени ето глупо
да и еще обвинять когда сам не знаеш чего хочеш...

HolyDel 01.02.2007 01:55

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\ правильно сделал, что исправил либу на функцию, а то ты етой либой всех в заблуждение ввел.


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

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