查看: 2312|回复: 6

集中了几个问题关于相机坐标的

[复制链接]

该用户从未签到

发表于 2009-5-24 09:53:46 | 显示全部楼层 |阅读模式
/** Get the camera which contains the pointer position x,y specified master cameras window/eye coords.
* Also passes back the local window coords for the graphics context associated with the camera passed back. */
    const osg::Camera* getCameraContainingPosition(float x, float y, float& local_x, float& local_y) const;
这个函数的说明是不是写错了,pointer是不是改为point,但是主相机的视点坐标是怎么通过x,y两个参数就确定的?
其实视点,视图,相机,他们的方向,位置,概念一直有些搞不清。。。

os<<"        local coords vertex("<< hitr->getLocalIntersectPoint()<<")"<<"  normal("<<hitr->getLocalIntersectNormal()<<")"<<std::endl;
            os<<"        world coords vertex("<< hitr->getWorldIntersectPoint()<<")"<<"  normal("<<hitr->getWorldIntersectNormal()<<")"<<std::endl;

这两句中,hitr->getLocalIntersectPoint,hitr->getWorldIntersectPoint,getLocalIntersectNormal,getWorldIntersectNormal具体是指什么东西,有什么区别。。。。对不起,麻烦各位了


#if 0
.....
#endif
#if 1
....
#endif

这样的宏我第一次见到,不知道什么情况下程序会进入到这些宏里面?

[ 本帖最后由 fire 于 2009-5-24 09:55 编辑 ]

该用户从未签到

发表于 2009-5-24 10:14:43 | 显示全部楼层
注意getCameraContainingPosition函数的返回值是Camera*,它的作用是判断给定的x,y坐标是否能够被当前Viewer的某个摄像机包含,并返回这个摄像机的指针,以及(x,y)在这个摄象机中的局部坐标(local_x,local_y)。这个函数与视点的判断没有关系。

getLocalIntersectPoint,getWorldIntersectPoint,getLocalIntersectNormal,getWorldIntersectNormal都是LineSegmentIntersector::Intersection结构体的成员。hitr这里是定义的一个迭代器,多阅读一些有关C++以及标准模板库STL编程的书籍会有助于您的理解。

#if 0 ... #endif
的内容全都不会被编译
#if 1 ... #endif
的内容全都会被编译。这是很常见的调试方法,和我们用/* ... */把暂时不想用的代码段屏蔽起来是一个道理,但是有的时候更容易控制

该用户从未签到

 楼主| 发表于 2009-5-24 14:45:47 | 显示全部楼层
还是得麻烦大哥你啊,我还是很想知道,视点,视图,相机,的关系。getLocalIntersectPoint,getWorldIntersectPoint,getLocalIntersectNormal,getWorldIntersectNormal都是LineSegmentIntersector::Intersection结构体的成员对应的是什么坐标?

该用户从未签到

发表于 2009-5-24 14:52:27 | 显示全部楼层
有关OpenGL的观察矩阵和投影矩阵,我建议您参看一下红宝书《OpenGL编程指南》,或者其它的图形学书籍。这些应当说是三维程序开发者的必备知识,几句话也很难描述清楚。

至于getLocalIntersectPoint,getWorldIntersectPoint,getLocalIntersectNormal,getWorldIntersectNormal,我觉得从名字就可以看出它们的含义,交点局部坐标,交点世界坐标,交点局部法线,交点世界法线

该用户从未签到

 楼主| 发表于 2009-5-24 15:38:18 | 显示全部楼层
不好意思,我没学过,但是又不得不做这个。。。

该用户从未签到

 楼主| 发表于 2009-5-25 13:54:42 | 显示全部楼层
const osgUtil:ineSegmentIntersector::Intersection::IndexList& vil = hitr->indexList;
            for(unsigned int i=0;i<vil.size();++i)
            {
                os<<"        vertex indices ["<<i<<"] = "<<vil<<std::endl;
            }
            

这里的vertex indices 指什么呀?很莫名的

该用户从未签到

发表于 2009-5-25 14:38:12 | 显示全部楼层
与射线产生交点的各个三角形,其顶点的索引位置。可以参看源代码中的相应段落来阅读和理解
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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