环境光:
物体的光照属性包含了:环境光系数、漫反射光系数、镜反射光系数和镜面指数,设置他们的相应函数如下:
环境光系数:SetAmbient( );
漫反射光系数:SetDiffuse();
镜反射光系数:SetSpecular();
镜面指数:SetSpecularPower();
介绍:
环境光系数:各种光线照射到物体材质上,经过多次反射后最终遗留再环境的光照强度。
漫反射光系数:光线照射在物体材质上,经过漫反射后形成的光线强度;
镜反射光系数:光线照射到物体材质上,经过镜面反射后形成的光线强度;
镜面指数的取值范围是0~128.取值越小,表示材质越粗糙,点光源发射的光线照射在上面也可以产生较大的亮点;取值越大,表示材质越类似于镜面,光源照射到上面后,产生较小的亮点;
vs2015+vtk7.0 console下实例如下:
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
#include<vtkSmartPointer.h>
#include<vtkSphereSource.h>
#include<vtkPolyDataMapper.h>
#include<vtkActor.h>
#include<vtkRenderer.h>
#include<vtkRenderWindow.h>
#include<vtkRenderWindowInteractor.h>
#include<vtkProperty.h>
#include<vtkCamera.h>
#include<vtkLight.h>
int main()
{
vtkSmartPointer<vtkSphereSource>sphere = vtkSmartPointer<vtkSphereSource>::New();
sphere->SetThetaResolution(100);
sphere->SetPhiResolution(50);
vtkSmartPointer<vtkPolyDataMapper>sphereMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
sphereMapper->SetInputConnection(sphere->GetOutputPort());
vtkSmartPointer<vtkActor>sphere1 = vtkSmartPointer<vtkActor>::New();
sphere1->SetMapper(sphereMapper);
sphere1->GetProperty()->SetColor(1, 0, 0);
sphere1->GetProperty()->SetAmbient(0.125);
sphere1->GetProperty()->SetDiffuse(0.0);
sphere1->GetProperty()->SetSpecular(0.0);
vtkSmartPointer<vtkActor>sphere2 = vtkSmartPointer<vtkActor>::New();
sphere2->SetMapper(sphereMapper);
sphere2->GetProperty()->SetColor(1, 0, 0);
sphere2->GetProperty()->SetAmbient(0.25);
sphere2->GetProperty()->SetDiffuse(0.0);
sphere2->GetProperty()->SetSpecular(0.0);
sphere2->AddPosition(1.25, 0, 0);
vtkSmartPointer<vtkActor>sphere3 = vtkSmartPointer<vtkActor>::New();
sphere3->SetMapper(sphereMapper);
sphere3->GetProperty()->SetColor(1.0, 0, 0);
sphere3->GetProperty()->SetAmbient(0.375);
sphere3->GetProperty()->SetDiffuse(0.0);
sphere3->GetProperty()->SetSpecular(0.0);
sphere3->AddPosition(2.5, 0, 0);
vtkSmartPointer<vtkActor>sphere4 = vtkSmartPointer<vtkActor>::New();
sphere4->SetMapper(sphereMapper);
sphere4->GetProperty()->SetColor(1.0, 0, 0);
sphere4->GetProperty()->SetAmbient(0.5);
sphere4->GetProperty()->SetDiffuse(0.0);
sphere4->GetProperty()->SetSpecular(0.0);
sphere4->AddPosition(3.75, 0, 0);
vtkSmartPointer<vtkActor>sphere5 = vtkSmartPointer<vtkActor>::New();
sphere5->SetMapper(sphereMapper);
sphere5->GetProperty()->SetColor(1.0, 0, 0);
sphere5->GetProperty()->SetAmbient(0.625);
sphere5->GetProperty()->SetDiffuse(0.0);
sphere5->GetProperty()->SetSpecular(0.0);
sphere5->AddPosition(0.0, 1.25, 0);
vtkSmartPointer<vtkActor>sphere6 = vtkSmartPointer<vtkActor>::New();
sphere6->SetMapper(sphereMapper);
sphere6->GetProperty()->SetColor(1.0, 0, 0);
sphere6->GetProperty()->SetAmbient(0.75);
sphere6->GetProperty()->SetDiffuse(0.0);
sphere6->GetProperty()->SetSpecular(0.0);
sphere6->AddPosition(1.25, 1.25, 0);
vtkSmartPointer<vtkActor>sphere7 = vtkSmartPointer<vtkActor>::New();
sphere7->SetMapper(sphereMapper);
sphere7->GetProperty()->SetColor(1.0, 0, 0);
sphere7->GetProperty()->SetAmbient(0.875);
sphere7->GetProperty()->SetDiffuse(0.0);
sphere7->GetProperty()->SetSpecular(0.0);
sphere7->AddPosition(2.5, 1.25, 0);
vtkSmartPointer<vtkActor>sphere8 = vtkSmartPointer<vtkActor>::New();
sphere8->SetMapper(sphereMapper);
sphere8->GetProperty()->SetColor(1.0, 0, 0);
sphere8->GetProperty()->SetAmbient(1.0);
sphere8->GetProperty()->SetDiffuse(0.0);
sphere8->GetProperty()->SetSpecular(0.0);
sphere8->AddPosition(3.75, 1.25, 0);
vtkSmartPointer<vtkRenderer>ren1 = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow>renWin = vtkSmartPointer<vtkRenderWindow>::New();
vtkSmartPointer<vtkRenderWindowInteractor>iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
ren1->AddActor(sphere1);
ren1->AddActor(sphere2);
ren1->AddActor(sphere3);
ren1->AddActor(sphere4);
ren1->AddActor(sphere5);
ren1->AddActor(sphere6);
ren1->AddActor(sphere7);
ren1->AddActor(sphere8);
ren1->SetBackground(0.1, 0.2, 0.4);
vtkSmartPointer<vtkLight>light = vtkSmartPointer<vtkLight>::New();
light->SetFocalPoint(1.875, 0.6125, 0);
light->SetPosition(0.875, 1.6125, 1);
ren1->AddLight(light);
ren1->GetActiveCamera()->SetFocalPoint(0, 0, 0);
ren1->GetActiveCamera()->SetPosition(0, 0, 1);
ren1->GetActiveCamera()->SetViewUp(0, 1, 0);
ren1->GetActiveCamera()->ParallelProjectionOn();
ren1->ResetCamera();
ren1->GetActiveCamera()->SetParallelScale(1.5);
renWin->AddRenderer(ren1);
renWin->SetSize(800, 400);
renWin->Render();
renWin->SetWindowName("light test");
iren->SetRenderWindow(renWin);
iren->Start();
return 0;
}
由图可以看出,随着环境光属性值的增加,演员越来越亮。
virtual void vtkProperty::SetAmbient (double )
Set/Get the ambient lighting coefficient.