レンダリングデバイスはマテリアルのカラーコンポーネントを異なる方法で表示でき、PDFエクスポートプロセスでは、最も見栄えの良いエクスポートされた図面を取得するために、アンビエントカラー動作オプションを使用します。
下の図は、OpenGL ES2 および OpenGL デバイスを使用してテクスチャ付きマテリアルをレンダリングした場合の違いを示しています。
各レンダリングデバイスは、テクスチャ付きマテリアルのアンビエントカラーコンポーネントを異なる方法で解釈します。
上記の図面を 3D PDF (PRC 統合 PDF) 形式にエクスポートすると、出力 PDF ドキュメントで異なるレンダリング結果が得られる場合があります。
レンダリングデバイスの場合と同様に、この違いは、PDFビューアアプリケーション (例: Adobe® Reader®) におけるテクスチャ付きマテリアルのアンビエントカラーコンポーネントの解釈によって引き起こされます。
PDFエクスポートモジュールは、PDFエクスポート内のアンビエントカラーレンダリングを制御する PDFExportParams クラスの特別なオプション、PrcExportColorComponentBehavior を提供します。
- kExportAsIs — アンビエントカラーコンポーネントはそのままエクスポートされます。Adobe Reader でのモデルレンダリングは、ODA Software での元の図面レンダリングとは異なる場合があります。
- kExportWhite — アンビエントカラーコンポーネントは白としてエクスポートされます。Adobe Reader でのモデルレンダリングは、OpenGL デバイスを使用した ODA Software での元の図面レンダリングに最も近くなります。
- kExportNotInited — アンビエントカラーコンポーネントは統合された色としてエクスポートされます。Adobe Reader でのモデルレンダリングは、GLES2 デバイスを使用した ODA Software での元の図面レンダリングに最も近くなります。
アンビエントカラーオプションの現在の設定を取得するには、PDFExportParams クラスの getPrcExportAmbientColorBehavior() メソッドを使用します。アンビエントカラーオプションを設定するには、setPrcExportAmbientColorBehavior() メソッドを呼び出します。
以下のソースフラグメントは、.dwg 図面を 3D PDF ドキュメントにエクスポートする際にアンビエントカラーオプションを使用する方法を示しています。
OdPdfExportModulePtr pModule = ::odrxDynamicLinker()->loadApp(OdPdfExportModuleName, false);
::odrxDynamicLinker()->loadApp(OdPrcModuleName, false);
::odrxDynamicLinker()->loadApp(OdDwg2PrcExportModuleName, false);
OdPdfExportPtr exporter = pModule->create();
params.setDatabase(db);
params.setVersion(PDFExportParams::kPDFv1_6);
params.setOutput(odSystemServices()->createFile(outPdfFile, Oda::kFileWrite, Oda::kShareDenyNo, Oda::kCreateAlways));
params.setExportFlags(PDFExportParams::kDefault);
params.setPRCMode(PDFExportParams::kAsMesh);
pContext = odCreatePrcAllInSingleViewContextForTD();
params.setPRCContext(pContext);
// Sets prc behaviour when exporting ambient color components to PRC in the texture case
params.setPrcExportAmbientColorBehavior(PDF3D_ENUMS::kExportAsIs);
// initialize the conversion parameters: Layouts
OdDbBlockTableRecordPtr pLayoutBlock = db->getActiveLayoutBTRId().safeOpenObject();
OdDbLayoutPtr pLayout = pLayoutBlock->getLayoutId().safeOpenObject();
params.layouts().push_back(pLayout->getLayoutName());
params.pageParams().resize(1, OdGsPageParams());
OdUInt32 errCode = exporter->exportPdf(params);