查看: 3450|回复: 5

漫游问题!!!

[复制链接]

该用户从未签到

发表于 2008-4-26 15:06:31 | 显示全部楼层 |阅读模式
我现在正在写一个漫游的程序,效果希望和CS那样的,现在就差一个鼠标MOVE的事件了,在CS里,鼠标(就是那个十字架,瞄准用的)总在屏幕的中间,当鼠标移动时,就会改变视口(可能用词不准)矩阵,来达到旋转的效果,不知这个市如何实现的,希望提供一下思路!!!
                                                                                               谢谢!!!

该用户从未签到

发表于 2008-4-26 16:32:33 | 显示全部楼层
osgGA::GUIEventAdapter已经包括了对MOVE事件的判断,然后事情就好办多了。
实现的思路有很多。例如,使用setX和setY强制鼠标置于屏幕中间;当产生MOVE事件之后,首先判断getX和getY相对中心的位移并执行视角的旋转;再次使用setX和setY重新设定鼠标位置

该用户从未签到

 楼主| 发表于 2008-4-26 16:55:16 | 显示全部楼层
我这样写了,但遇到一个问题,简略代码如下:
handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &us)
{
...
            case (osgGA::GUIEventAdapter :: MOVE ):
            {  
                      ea.setX(100);
                      ea.setY(100);
                      ....
             }
}
编译时报如下错:
error C2662: 'osgGA::GUIEventAdapter::setX' : cannot convert 'this' pointer from 'const osgGA::GUIEventAdapter' to 'osgGA::GUIEventAdapter &'
我想这应该是C++的问题,希望指点一下,如何修改。
                                                                                                   谢谢啦!!!

该用户从未签到

发表于 2008-4-28 15:52:59 | 显示全部楼层
你为什么要用ea.setX()呢?  通过鼠标的移动计算出矩阵,直接对view进行变换不行么?

该用户从未签到

发表于 2009-4-1 17:21:30 | 显示全部楼层

回复 3楼 的帖子

你这个问题解决了吗?能否共享一下

该用户从未签到

发表于 2009-4-9 17:04:44 | 显示全部楼层
CS模式,怎么将“眼睛”始终保持在离地面一个身高的距离啊~~???
就是往前走了之后,根据地面的不平整,怎么自动调整“眼睛”的高度呢??
楼主请回答啊
菜鸟,最好详细点:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表