opencascade对 opengl 里的光追 有较好的支持
{
Graphic3d_RenderingParams& aPrarms = V3d_View ->ChangeRenderingParams();
bool SetRayTracingOn = false;//光追开关,光线追踪
if (SetRayTracingOn) {
aPrarms.Method = Graphic3d_RM_RAYTRACING;
// maximum ray-tracing depth
aPrarms.RaytracingDepth = 3;
// enable shadows rendering
aPrarms.IsShadowEnabled = true;
// enable specular reflections.
aPrarms.IsReflectionEnabled = true;
// enable adaptive anti-aliasing
aPrarms.IsAntialiasingEnabled = true;
// enable light propagation through transparent media.
aPrarms.IsTransparentShadowEnabled = true;
// enable globall illumination (不推荐)
//aPrarms.IsGlobalIlluminationEnabled = true;
//aPrarms.IsAntialiasingEnabled = true;
aPrarms.NbMsaaSamples = 8; // Anti-aliasing by multi-sampling
//aPrarms.IsShadowEnabled = false;
aPrarms.CollectedStats = Graphic3d_RenderingParams::PerfCounters_NONE;
V3d_View >Redraw();
}
}
设置渐变背景色,和freecad同款
V3d_View ->SetBgGradientColors(Quantity_NOC_BLUE, Quantity_NOC_WHITE, Aspect_GFM_VER);
天穹 也是类似方法,都在V3d_View 中可以找到接口Aspect_SkydomeBackground,实现的还可以 类似方法
如果你发现正面对你的面颜色发生变化 变成了白色,可以调整或关闭头部光源
V3d_ListOfLight lstlight= V3d_View ->ActiveLights();
int Size = lstlight.Size();
//Handle(Graphic3d_CLight) = lstlight[0];
V3d_ListOfLightIterator lstLightIt;
//Handle(Graphic3d_CLight)= lstlight.begin();
//for (lstlight.begin(); lstlight.Size(); lstlight.end())
//{
// //Handle (Graphic3d_CLight)= lstlight.Allocator();
//}
for each (auto var in lstlight)
{
//Handle(Graphic3d_CLight) item = var;//auto 类型
Graphic3d_TypeOfLightSource type = var->Type();
Quantity_Color color = var->Color();
Standard_Boolean buer = var->IsHeadlight();
if (buer==true)
{
var->SetColor(Quantity_NOC_BLUE);
}
//color.Light();//返回亮度值,可能有用
Quantity_NameOfColor nameofColor = color.Name();
}
V3d_View ->Redraw();
}
以上就是个人对View3d经验总结