VTK 正交投影 透视投影

1.vtkCanmera定义了两种投影方法:

该要素用于确定Actor是如何映射到平面的;
1.正交投影(Orthographic Projection),也叫平行投影(Parallel Projection),即进入相机的光线与投影方向是平行的;
2.透视投影(Perspective Projection),即所有光线相交于一点。该投影方法最符合人类眼镜对于景物所产生的近大远小的视觉习惯。 默认透视投影; 

2.正交投影(平行投影,远近一样):

1.调用vtkCamera的ParallelProjectionOn函数开启

2.通过vtkCamera的SetParallelScale缩放

3.通过vtkCamera的SetClippingRange设置前后裁剪平面

注意:

一旦你用了这个你后面对camera的setpostion()、zoom()这些操作都无法正常生效,想要改变大小你只能通过SetParallelScale(int temp)这个数表示着camera到图像距离越小图像就越大

//开启正交投影模式
renderer->GetActiveCamera()->ParallelProjectionOn();
renderer->GetActiveCamera()->SetParallelScale(10);
renderer->GetActiveCamera()->SetClippingRange(-100, 100);

正交投影样例:

Code:

#pragma once
//#include "vtk_include.h"
 
#include <vtkLODActor.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPoints.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
 
#include <vtkRenderer.h>
 
#include <vtkSphereSource.h>
#include <vtkTextActor.h>
 
#include <algorithm>
 
#include <array>
#include <vtkPlaneSource.h>
#include<stdio.h>
#include<iostream>
using namespace std;

 
void main()
	{
		vtkNew<vtkNamedColors> colors;
		vtkNew<vtkRenderer> renderer;
		//平面
		vtkNew<vtkPlaneSource> plane;
		plane->SetCenter(0, 0, 0);//设置平面中心点坐标
		plane->SetOrigin(-10, -10, 0);//设置平面起点坐标,一般为平面左下角
		plane->SetPoint1(10, -10, 0);//设置平面第一条轴的长度
		plane->SetPoint2(-10, 10, 0);//设置平面第二条轴的长度
		plane->SetNormal(0, 0, 1);//设置平面的法向量
		plane->SetXResolution(10);//x方向分割数
		plane->SetYResolution(10);//y方向分割数
		vtkNew<vtkPolyDataMapper> planeMapper;
		planeMapper->SetInputConnection(plane->GetOutputPort());
		vtkNew<vtkActor> planeActor;
		planeActor->SetMapper(planeMapper);
		planeActor->GetProperty()->EdgeVisibilityOn(); //显示线框
		renderer->AddActor(planeActor);

		//球
		vtkNew<vtkSphereSource> sphereSource;
		sphereSource->SetRadius(5);
		sphereSource->SetCenter(5, 0, 0);
		sphereSource->Update();
		vtkNew<vtkPolyDataMapper> sphereMapper;
		sphereMapper->SetInputConnection(sphereSource->GetOutputPort());
		vtkNew<vtkActor> sphereActor;
		sphereActor->SetMapper(sphereMapper);
		sphereActor->GetProperty()->SetColor(colors->GetColor4d("Green").GetData());
		sphereActor->GetProperty()->EdgeVisibilityOn(); //显示线框
		renderer->AddActor(sphereActor);

		renderer->ResetCamera();
		//开启正交投影模式
		renderer->GetActiveCamera()->ParallelProjectionOn();
		renderer->GetActiveCamera()->SetParallelScale(10);
		renderer->GetActiveCamera()->SetClippingRange(-1000, 1000);

		renderer->SetBackground(colors->GetColor3d("SteelBlue").GetData());

		vtkNew<vtkRenderWindow> renderWindow;
		renderWindow->AddRenderer(renderer);
		renderWindow->SetWindowName("RenderWindowNoUIFile");

  
		vtkNew<vtkRenderWindowInteractor> iren;
		iren->SetRenderWindow(renderWindow);
 

		renderWindow->Render();
		iren->Initialize();
		iren->Start();
	}
 

3.透视投影:

SetParallelProjection(false)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恋恋西风

up up up

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值