环境光:
物体的光照属性包含了:环境光系数、漫反射光系数、镜反射光系数和镜面指数,设置他们的相应函数如下:
环境光系数: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.