代码3D部分可以删除,使用时,每次进入IL游戏要先按N键用来判断WIIMOTE的位置,然后像照镜子一样把WIIMOTE摆好即........
在游戏时设置一个顺手的键,映射到N键上,N键就是锁定视角,左右摆头后,放开N键即立即转向所看方向,如果你有极强的头部控制能力,不用这个键也可以....呵呵,其实一般不用........就是有时头部控制不好的时候用用,还有就是看一个方向太累了,按着它就不用老看一个地方,可以放松一下哈哈....
代码如下:
/*
This was Modified based on "PipoXYZ's 2Dof, 2Leds, Flight- and RaceScript."
KEY.n = Set CenterView每次进入游戏都要先按N,然后摆好WIIMOTE的位置即可.
Compatible with these games:
http://www.naturalpoint.com/trac ... nced-games-all.html
Emulates Yaw/Pitch
Setup:
Place your Wiimote near your monitor facing your head.
Wear two IR-leds on your head facing the Wiimote.
The leds can be attached to glasses, headphones, caps or something else.
*/
if starting then
wait 200 ms
PIE.FrameRate = 100Hz
if Wiimote.dot2vis = true then
var.XOffset = (Wiimote.Dot1x + Wiimote.Dot2x) / 2
var.YOffset = (Wiimote.Dot1y + Wiimote.Dot2y) / 2
else
var.XOffset = Wiimote.Dot1x
var.YOffset = Wiimote.Dot1y
endif
var.Angle = 1000这个值和转动角度成正比
endif
//Maprange
var.MinIRX = var.XOffset - var.Angle
var.MaxIRX = var.XOffset + var.Angle
var.MinIRY = var.YOffset - var.Angle
var.MaxIRY = var.YOffset + var.Angle
//Center View
if key.N = key.d + key.N
else
var.XOffset = 0
var.YOffset = 0
var.FakeTrackIRYaw = 0
var.FakeTrackIRPitch = 0
say
endif
//Mapset
if Wiimote.dot2vis = true then
var.TempDot2x = Wiimote.Dot2x
var.TempDot1x = Wiimote.Dot1x
var.TempDot2y = Wiimote.Dot2y
var.TempDot1y = Wiimote.Dot1y
var.X = (Wiimote.Dot1x + Wiimote.Dot2x) / 2
var.Y = (Wiimote.Dot1y + Wiimote.Dot2y) / 2
if var.TempDot1x < var.TempDot2x then
var.TempX = (Wiimote.Dot2x - Wiimote.Dot1x) / 2
else
var.TempX = (Wiimote.Dot1x - Wiimote.Dot2x) / 2
endif
if var.TempDot1y < var.TempDot2y then
var.TempY = (Wiimote.Dot2y - Wiimote.Dot1y) / 2
else
var.TempY = (Wiimote.Dot1y - Wiimote.Dot2y) / 2
endif
else
if var.TempDot1x < var.TempDot2x then
var.X = Wiimote.Dot1x + var.TempX
else
var.X = Wiimote.Dot1x - var.TempX
endif
if var.TempDot1y < var.TempDot2y then
var.Y = Wiimote.Dot1y + var.TempY
else
var.Y = Wiimote.Dot1y - var.TempY
endif
endif
//smoothing
var.TrackIRYawOld = var.FakeTrackIRYaw
var.TrackIRPitchOld = var.FakeTrackIRPitch
var.FakeTrackIRYaw = ensureMapRange(var.X, var.MaxIRX, var.MinIRX , -720, 720)此项代表可转动的角度可以调小,但要上面的Angle!
var.FakeTrackIRPitch = ensureMapRange(var.Y, var.MinIRY, var.MaxIRY , -720, 720)此项代表可转动的角度可以调小,但要上面的Angle!
var.DiffX = max(var.TrackIRYawOld,var.FakeTrackIRYaw) - min(var.TrackIRYawOld,var.FakeTrackIRYaw)
if var.DiffX < 60 then
FakeTrackIR.Yaw = smooth(var.FakeTrackIRYaw,120)
//FakeTrackIR.Yaw = smooth(smooth(var.FakeTrackIRYaw,30),30)
//FakeTrackIR.Yaw = kalman(smooth(var.FakeTrackIRYaw,30),0.4,0.04)
//FakeTrackIR.Yaw = smooth(kalman(var.FakeTrackIRYaw,0.4,0.03),30)
endif
var.DiffY = max(var.TrackIRPitchOld,var.FakeTrackIRPitch) - min(var.TrackIRPitchOld,var.FakeTrackIRPitch)
if var.DiffY < 60 then
FakeTrackIR.Pitch = 1.2 * smooth(var.FakeTrackIRPitch,120)
//FakeTrackIR.Pitch = smooth(smooth(var.FakeTrackIRPitch,30),30)
//FakeTrackIR.Pitch = kalman(smooth(var.FakeTrackIRPitch,30),0.4,0.04)
//FakeTrackIR.Pitch = smooth(kalman(var.FakeTrackIRPitch,0.4,0.03),30)
endif
一下部分是自制的3D校准,按run后,要按N键即可看见两方块,当方块叠加时即为正中...此项目正在琢磨中还不成熟,可以删除!
obj1.colour= 0x008080
obj1.cubesize= 19cm
obj1.X=0.
obj1.Y=0.
obj2.colour= 0x010181
obj2.cubesize= 50cm
obj2.x=0.
obj2.y=0.
obj3.yaw=FakeTrackIR.Yaw
obj3.colour= 0xFDFDFD
obj4.pitch=FakeTrackIR.Pitch
obj4.colour= 0xFEF482
cam.x= var.XOffset
cam.y=-var.YOffset
cam.yaw=-var.FakeTrackIR.Yaw
cam.pitch=var.FakeTrackIR.Pitch