VTK 正交投影 透视投影

1.VTK默认透视投影(近大远小);

1.调用vtkCamera的ParallelProjectionOn函数开启

2.通过vtkCamera的SetParallelScale缩放

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

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

//开启正交投影模式
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();
	}
 

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

恋恋西风

up up up

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

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

打赏作者

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

抵扣说明:

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

余额充值