網(wǎng)站建設(shè)流程圖滿十八歲可以申請abc認(rèn)證嗎
1、概述
計算機圖形學(xué)里常用的坐標(biāo)系統(tǒng)有4種:
? ?1)、Model坐標(biāo)系統(tǒng)。定義模型時所采用的坐標(biāo)系統(tǒng),通常是局部的笛卡兒坐標(biāo)系。
? ?2)、World坐標(biāo)系統(tǒng)。是放置Actor的三維空間坐標(biāo)系。
? ? ? ? ? ? ?Actor(vtkActor類)其中的一個功能就是負(fù)責(zé)將模型從Model坐標(biāo)系統(tǒng)變換到World坐標(biāo)系統(tǒng)。
? ? ? ? ? ? ?每一個模型可以定義自己的Model坐標(biāo),但World坐標(biāo)系只有一個,每一個Actor必須通過放縮、放置、平移等操作將Model坐標(biāo)變換到World坐標(biāo)系。
? ? ? ? ? ? ?World坐標(biāo)系同時也是相機和燈光所在的坐標(biāo)系統(tǒng)。
? ?3)、view坐標(biāo)系統(tǒng)。是相機所看見的坐標(biāo)系統(tǒng)。
? ? ? ? ? ? ?XYZ軸取值為[-1,1],XY值表示像平面上的位置,Z值表示到相機的距離。相機負(fù)責(zé)將World坐標(biāo)系變換到View坐標(biāo)系。
? ?4)、Display坐標(biāo)系統(tǒng)。與View坐標(biāo)系統(tǒng)類似,但各坐標(biāo)的坐標(biāo)值不是[-1,1],而是使用屏幕像素值。
另外還有兩種表示坐標(biāo)點的方式:
? ? ?以屏幕像素值為單位和歸一化坐標(biāo)值 。
它們之間的關(guān)系如圖所示。
2、坐標(biāo)系細(xì)分
Display X、Y軸的坐標(biāo)取值為渲染窗口的像素值。坐標(biāo)原點位于渲染窗口的左下角。
NORMALIZED DISPLAY X、Y軸坐標(biāo)取值范圍為[0,1],跟DISPLAY一樣,也是定義在渲染窗口里的。
VIEWPORT X、Y的坐標(biāo)值定義在視口或者渲染器(Renderer)里。
NORMALIZED VIEWPORT X、Y坐標(biāo)值定義在視口或渲染器里,取值范圍為[0,1].
VIEW X、Y、Z坐標(biāo)值定義在相機所在的坐標(biāo)系里,取值范圍為[-1,1],Z值表示深度信息。
WORLD X、Y、Z坐標(biāo)值定義在世界坐標(biāo)系。
USERDEFINED 用戶自定義坐標(biāo)系統(tǒng)。
vtkCoordinate可以用來表示坐標(biāo)系統(tǒng),其內(nèi)部提供了函數(shù)接口來定義坐標(biāo)系統(tǒng):
SetCoordinateSystemToDisplay()
SetCoordinateSystemToNormalizedDisplay()
SetCoordinateSystemToViewport()
SetCoordinateSystemToNormalizedViewport()
SetCoordinateSystemToView()
SetCoordinateSystemToWorld()
3、示例代碼
vtkConeSource cone = vtkConeSource.New();
vtkCubeSource cube = vtkCubeSource.New();
vtkCylinderSource cylinder = vtkCylinderSource.New();
vtkSphereSource sphere = vtkSphereSource.New();vtkPolyDataMapper coneMapper = vtkPolyDataMapper.New();
coneMapper.SetInputConnection(cone.GetOutputPort());
vtkPolyDataMapper cubeMapper = vtkPolyDataMapper.New();
cubeMapper.SetInputConnection(cube.GetOutputPort());
vtkPolyDataMapper cylinderMapper = vtkPolyDataMapper.New();
cylinderMapper.SetInputConnection(cylinder.GetOutputPort());
vtkPolyDataMapper sphereMapper = vtkPolyDataMapper.New();
sphereMapper.SetInputConnection(sphere.GetOutputPort());vtkActor coneActor = vtkActor.New();
coneActor.SetMapper(coneMapper);
vtkActor cubeActor = vtkActor.New();
cubeActor.SetMapper(cubeMapper);
vtkActor cylinderActor = vtkActor.New();
cylinderActor.SetMapper(cylinderMapper);
vtkActor sphereActor = vtkActor.New();
sphereActor.SetMapper(sphereMapper);//將一個窗口分為4個視圖
vtkRenderer renderer1 = vtkRenderer.New();
renderer1.AddActor(coneActor);
renderer1.SetBackground(1.0, 0.0, 0.0);
renderer1.SetViewport(0.0, 0.0, 0.5, 0.5);
vtkRenderer renderer2 = vtkRenderer.New();
renderer2.AddActor(cubeActor);
renderer2.SetBackground(0.0, 1.0, 0.0);
renderer2.SetViewport(0.5, 0.0, 1.0, 0.5);
vtkRenderer renderer3 = vtkRenderer.New();
renderer3.AddActor(cylinderActor);
renderer3.SetBackground(0.0, 0.0, 1.0);
renderer3.SetViewport(0.0, 0.5, 0.5, 1.0);
vtkRenderer renderer4 = vtkRenderer.New();
renderer4.AddActor(sphereActor);
renderer4.SetBackground(1.0, 1.0, 0.0);
renderer4.SetViewport(0.5, 0.5, 1.0, 1.0);vtkRenderWindow renWin = renderWindowControl.RenderWindow;
renWin.AddRenderer(renderer1);
renWin.AddRenderer(renderer2);
renWin.AddRenderer(renderer3);
renWin.AddRenderer(renderer4);
renWin.SetWindowName("Viewport");
renWin.Render();