土圭垚㙓数学课(二)视锥体八个顶点的计算方法

视锥体是摄像机可见的空间,看上去像截掉顶部的金字塔。视锥体由6个裁剪面围成,构成视锥体的4个侧面称为上左下右面,分别对应屏幕的四个边界。为了防止物体离摄像机过近,设置近切面,同时为了防止物体离摄像机太远而不可见,设置远切面。本文将介绍一下视锥体八个顶点的计算方法。


我们就以Unity3D(5.6.0f3)为例。

首先取fov(fieldOfView),即摄像机在竖直方向上的张角。

float fov = Camera.main.fieldOfView;
还有aspect,也就是屏幕的宽高比。

float asp = Camera.main.aspect;

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
osgEarth相机视锥体是指相机在场景中的可见区域,它通常用于确定相机需要渲染的场景对象。下面是使用osgEarth相机视锥体的基本步骤: 1. 创建一个osgEarth::MapNode对象来表示场景图。 2. 创建一个osg::Camera对象并设置它的口。 3. 使用osgEarth::Util::ViewFrustrumBuilder类来构建相机视锥体。 4. 通过osg::CullSettings对象设置相机剔除的参数。 5. 将相机视锥体应用到场景中需要渲染的对象上。 下面是示例代码: ```cpp #include <osgEarth/MapNode> #include <osgEarthUtil/ViewFrustrumBuilder> #include <osg/Camera> #include <osg/Geode> int main() { // 创建地图节点 osg::ref_ptr<osgEarth::MapNode> mapNode = osgEarth::MapNode::create(); // 创建相机 osg::ref_ptr<osg::Camera> camera = new osg::Camera; camera->setViewport(0, 0, 800, 600); // 构建相机视锥体 osgEarth::Util::ViewFrustrumBuilder frustumBuilder(mapNode.get(), camera.get()); frustumBuilder.create(); // 设置相机剔除参数 osg::ref_ptr<osg::CullSettings> cullSettings = camera->getCullSettings(); cullSettings->setClampProjectionMatrixCallback(new osgEarth::Util::SimplexNoiseClampCallback(0.3, 0.5)); camera->setCullSettings(cullSettings.get()); // 将相机视锥体应用到场景中需要渲染的对象上 osg::ref_ptr<osg::Geode> geode = new osg::Geode; geode->setCullingActive(true); geode->setCullCallback(new osgEarth::Util::CullVisitorProxy(frustumBuilder.get())); // 在这里添加需要渲染的对象 // 渲染场景 osg::ref_ptr<osg::Group> root = new osg::Group; root->addChild(mapNode.get()); root->addChild(camera.get()); root->addChild(geode.get()); osgViewer::Viewer viewer; viewer.setSceneData(root.get()); return viewer.run(); } ``` 在上面的示例代码中,首先创建了一个osgEarth::MapNode对象来表示场景图,然后创建了一个osg::Camera对象并设置它的口。接着使用osgEarth::Util::ViewFrustrumBuilder类来构建相机视锥体,并通过osg::CullSettings对象设置相机剔除的参数。最后将相机视锥体应用到场景中需要渲染的对象上,并将相机和渲染对象添加到场景中进行渲染。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值