请问一个英文方面的有关问题

请教一个英文方面的问题
有段代码注释看不懂,有人能翻译一下吗?谢谢,这对我很重要,回着有分!!!!!!!!!

Compile and run the application. Now left clicking toggles the light on and off! Note that since we no longer call the ExampleFrameListener's frameStarted method, we cannot move the camera around (yet). 

This method of storing the previous state of the mouse button works well, since we know we already have acted on the mouse state. The drawback is to use this for every key we bind to an action, we'd need a boolean variable for it. One way we can get around this is to keep track of the last time any button was pressed, and only allow actions to happen after a certain amount of time has elapsed. We keep track of this state in the mToggle variable. If mToggle is greater than 0, then we do not perform any actions, if mToggle is less than 0, then we do perform actions. We'll use this method for the following two key bindings. 

The first thing we want to do is decrement the mToggle variable by the time that has elapsed since the last frame: 

Now, our transVector variable has the translation we wish to apply to the camera's SceneNode. The first pitfall we can encounter when doing this is that if you rotate the SceneNode, then our x, y, and z coordinates will be wrong when translating. To fix this, we need to apply all of the rotations we have done to the SceneNode to our translation node. This is actually simpler than it sounds. 

To represent rotations, Ogre does not use transformation matrices like some graphics engines. Instead it uses Quaternions for all rotation operations. The math behind Quaternions involves four dimensional linear algebra, which is very difficult to understand. Thankfully, you do not have to understand the math behind them to understand how to use them. Quite simply, to use a Quaternion to rotate a vector, all you have to do is multiply the two together. In this case, we want to apply all of the rotations done to the SceneNode to the translation vector. We can get a Quaternion representing these rotations by calling SceneNode::getOrientation(), then we can apply them to the translation node using multiplication. 

The second pitfall we have to watch out for is we have to scale the amount we translate by the amount of time since the last frame. Otherwise, how fast you move would be dependent on the framerate of the application. Definitely not what we want. This is the function call we need to make to translate our camera node without encountering these problems: 

Now we have introduced something new. Whenever you translate a node, or rotate it about any axis, you can specify which Transformation Space you want to use to move the object. Normally when you translate an object, you do not have to set this parameter. It defaults to TS_PARENT, meaning that the object is moved in whatever transformation space the parent node is in. In this case, the parent node is the root scene node. When we press the W button (to move forward), we subtracted from the Z direction, meaning we move towards the negative Z axis. If we did not specify TS_LOCAL in this previous line of code, we would move the camera along the global -Z axis. However, since we are trying to make a camera which goes forward when we press W, we need it to go in the direction that the node is actually facing. Hence, we use the "local" transformation space. 

There is another way we can do this (though it is less direct). We could have gotten the orientation of the node, a quaternion, and multiplied this by the direction vector to get the same result. This would be perfectly valid: 



------解决方案--------------------
大概翻译了一下, 中间有部分是在翻译不下去了,知道大概意思, 表达太难了,lz自己去领会吧,
第一段是说: note后面:记住如果没有调用ExampleFrameListener's frameStarted 的启动函数, 就不能移动camera照相机.
第二段, 存储鼠标, 按钮先前的状态的方法很可行, 如果我们已经知道鼠标的状态, 并且在执行这种状态, 缺点是当我们给每一个动作绑定关键帧时候, 我们需要一个bool变量,. 一种解决方法是我们能用这个变量来跟踪上次任何被按下的按钮, 只有一段时间以后才允许事件发生, 我们用mToggle变量来跟踪这种状态, if(mToggle > 0)不去做任何事, if mToggle < 0 就执行相应的行为. 我门将用这种方法来下面这两种绑定: