原創(chuàng)|行業(yè)資訊|編輯:吳秋紅|2024-04-22 11:16:57.393|閱讀 102 次
概述:在本教程中,我們將使用渦輪發(fā)動(dòng)機(jī)模型來演示反射平面、兩種類型的陰影和光暈。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
渲染效果
當(dāng)需要?jiǎng)?chuàng)建具有非常高視覺質(zhì)量的圖像時(shí),可以提供多種渲染效果。在本教程中,我們將使用渦輪發(fā)動(dòng)機(jī)模型來演示反射平面、兩種類型的陰影和光暈。
本教程將使用沙盒應(yīng)用程序,對于C++用戶,您可以從mfc_sandboxCHPSView::OnUserCodeX項(xiàng)目開始。如果您想按照本教程進(jìn)行操作,則可以在function中放置代碼;C#用戶將使用wpf_sandbox應(yīng)用程序-您將代碼放置在DemoUserCommand**X**::Execute.
1.1 加載渦輪機(jī)模型
構(gòu)建并運(yùn)行沙箱后的第一步是加載渦輪機(jī)模型文件。該文件可以在Visualize安裝的樣本/數(shù)據(jù)目錄中找到。這是一個(gè)HSF文件,因此可以通過本機(jī)加載。使用沙箱的主菜單將其加載到沙箱中。或者,您可以使用以下代碼片段以編程方式加載文件:
HPS::Stream::ImportNotifier notifier; try { HPS::Stream::ImportOptionsKit importOptionsKit; importOptionsKit.SetSegment(mySegmentKey); notifier = HPS::Stream::File::Import(filename, importOptionsKit); // pauses this thread until the HSF is finished loading notifier.Wait(); } catch (HPS::IOException const& e) { // handle exception}
您還需要獲取對模型的段鍵的引用。如果您以編程方式加載該文件,則應(yīng)該向HPS::ImportOptionsKit.如果您使用沙箱應(yīng)用程序的文件菜單加載模型,則可以獲得模型段,如下所示:
HPS::SegmentKey modelSegmentKey = GetTopView().GetAttachedModel().GetSegmentKey();
有關(guān)加載HSF的更多信息,請參閱編程指南的第 9.1節(jié)。加載完成后,您應(yīng)該看到下圖:
渦輪發(fā)動(dòng)機(jī)的默認(rèn)視圖
1.2 添加反射平面和照明
您可以相對輕松地應(yīng)用的一種奇特效果是反射平面。SetSimpleReflectionPlane使用平面的幾何方程指定平面:
Ax + By + Cz + D = 0
還可以使用反射圖像的其他選項(xiàng),例如不透明度、模糊、褪色和衰減。我們還將添加照明,使模型顯得更加真實(shí)。將以下代碼放入U(xiǎn)serCode或方法之一中,DemoUserCommand以在加載模型后激活它。
modelSegmentKey.GetVisualEffectsControl().SetSimpleReflection(true, 0.5f, 1U, false, 0, 2.0f); // parameters are equation of a plane modelSegmentKey.GetVisualEffectsControl().SetSimpleReflectionPlane(HPS::Plane(0, 1, 0, 0.375f)); // add lighting modelSegmentKey.InsertDistantLight(HPS::Vector(1, 1, -1));
使用軌道運(yùn)算符(位于應(yīng)用程序的功能區(qū)控件中)旋轉(zhuǎn)模型后,生成的圖像應(yīng)如下所示:
帶有反射平面的渦輪發(fā)動(dòng)機(jī)(請注意,為了清晰起見,窗口背景已更改為白色)
與所有額外的渲染效果一樣,需要額外的處理時(shí)間才能獲得最終的圖像。始終牢記渲染質(zhì)量和性能之間的平衡。
1.3 陰影
modelSegmentKey.GetVisibilityControl().SetShadows(true); modelSegmentKey.GetVisualEffectsControl().SetShadowMaps(true, 16, 2048, true, true);
在本節(jié)中,我們將向渦輪機(jī)模型應(yīng)用投影和陰影貼圖。由于投影在反射平面上通常看起來不太好,因此我們將禁用它以專注于陰影。我們將啟用的第一種陰影類型是陰影貼圖。陰影貼圖允許幾何體的面在受光影響的任何類型的幾何體上投射陰影。第一步是在片段中啟用陰影,然后我們將設(shè)置陰影貼圖參數(shù):
在這里,您可以看到前景中的一些部件在其后面的幾何體上投射陰影。
接下來,我們將啟用陰影。投影在Visualize中稱為簡單陰影,因?yàn)樾?果受到高度限制。首先,簡單的陰影只能投射在平面上。其次,陰影只能由單一光源產(chǎn)生。然而,對于大多數(shù)工程應(yīng)用來說,簡單的陰影就可以產(chǎn)生足夠的效果。
mySegmentKey.GetVisualEffectsControl().SetSimpleShadow(true); // enables simple shadows mySegmentKey.GetVisualEffectsControl().SetSimpleShadowPlane( HPS::Plane(0, 1, 0, 0.425f)); // sets the plane where the shadows are projected mySegmentKey.GetVisualEffectsControl().SetSimpleShadowColor(HPS::RGBAColor(0.2f, 0.2f, 0.2f)); // color of the shadow mySegmentKey.GetVisualEffectsControl().SetSimpleShadowLightDirection(HPS::Vector(0, 1, 0)); // light direction
帶有陰影貼圖和簡單陰影的渦輪機(jī)
1.4.Bloom
另一種可以提高渲染視覺質(zhì)量的效果是光暈。當(dāng)強(qiáng)烈的明亮光線從閃亮的表面反射時(shí),就會(huì)發(fā)生光暈。光線似乎滲入了周圍的空氣中。Bloom僅在基于著色器的驅(qū)動(dòng)程序中可用,例如DirectX11和OpenGL2。Bloom是使用HPS::PostProcessEffectsKit.
HPS::PostProcessEffectsKit ppek; ppek.SetBloom(true, 10.0f); // enables bloom. strength can be set from 0 to 10, (default is 1) myWindowKey.SetPostProcessEffects(ppek); ppek.SetBloom(false); // disables bloom
啟用光暈時(shí),渦輪機(jī)的閃亮部分會(huì)產(chǎn)生有趣的效果
1.5 紋理
為了獲得最高的視覺質(zhì)量,您還需要添加紋理。將紋理應(yīng)用到像渦輪機(jī)這樣復(fù)雜的模型超出了本教程的范圍,但提供了一個(gè)圖像來演示它。您可以在Visualize安裝的樣本/數(shù)據(jù)目錄中找到紋理模型。有關(guān)紋理的更多信息可以在編程指南的紋理部分和教程 2:應(yīng)用材質(zhì)中找到。
應(yīng)用紋理的渦輪機(jī)
慧都科技是Tech Soft 3D-HOOPS在中國區(qū)的唯一增值服務(wù)商,負(fù)責(zé)與試用,咨詢,銷售,技術(shù)支持,售后,旨在為企業(yè)提供一站式的3D開發(fā)解決方案。如果您的企業(yè)目前也有、的需求,歡迎咨詢在線客服申請3D 輕量化引擎的60天免費(fèi)試用。
↓↓掃碼添加客服微信,及時(shí)獲取“HOOPS技術(shù)”支持↓↓
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn