Показать сообщение отдельно
Старый 30.12.2006, 19:46   #4
Platon
Знающий
 
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений
(для 70 пользователей)
Re: Двигать объект двухмерным курсором

2c0mrad
Извращенец?
2Valet
Тут нужно преобразовать 3д координаты в 2д и наоборот:
Тыкай на куб и двига
Graphics3D(640, 480, 16, 2)
SetBuffer(BackBuffer())

Global SCR_CX = GraphicsWidth() / 2
Global SCR_CY = GraphicsHeight() / 2
Global CAM_ZOOM# = 1.1

Camera = CreateCamera()
CameraZoom(Camera, CAM_ZOOM)

Cube = CreateCube()
EntityPickMode(Cube, 2)
PositionEntity(Cube, 3, 0, 10)

Repeat
	
	If MouseDown(1) Then
		If (Obj = 0) Then
			Obj = CameraPick(Camera, MouseX(), MouseY())
			If Obj Then
				Dx = MouseX() - EntityX2D(Obj)
				Dy = MouseY() - EntityY2D(Obj)
			EndIf
		Else
			PositionEntity2D(Obj, MouseX() - Dx, MouseY() - Dy)
		EndIf
	Else
		Obj = 0
	EndIf
	
	RenderWorld()
	Flip()
Until KeyDown(1)
End

Function PositionEntity2D(Entity, Px, Py)
	PositionEntity(Entity, (Px - SCR_CX) * EntityZ(Entity) / SCR_CX / CAM_ZOOM, (SCR_CY - Py) * EntityZ(Entity) / SCR_CX / CAM_ZOOM, EntityZ(Entity))
End Function

Function EntityX2D(Entity)
	Return EntityX(Entity) * SCR_CX * CAM_ZOOM / EntityZ(Entity) + SCR_CX
End Function

Function EntityY2D(Entity)
	Return SCR_CY - (EntityY(Entity) * SCR_CX * CAM_ZOOM / EntityZ(Entity))
End Function
ЗЫ
И использовать CameraPick() чтобы определить клик на 3д обьекте.
(Offline)
 
Ответить с цитированием