OpenEXRをDirectXで利用する

  • プロジェクトのプロパティを設定

  ※C/C++、全般、追加のインクルードディレクト
  D:\OpenEXR-1.2.1-win32\include\Imath;D:\OpenEXR-1.2.1-win32\include\Iex
  を追加

  ※C/C++、全般、プリプロセッサの定義
  PLATFORM_WIN32
  を追加

  • インクルードの順序

ImathEuler.hをincludeするとき、Windows.hでmaxとminのマクロが定義されていて、エラーになった。
undefするかImathEuler.hをwindows.hの前に置くことで解決した

  • ソース
#include <ImathEuler.h>
#include <Windows.h>
#include <mmsystem.h>
#include <d3dx9.h>

main()
{
	D3DXMATRIX m, mtmp;
	D3DXMatrixRotationY( &mtmp, 2.0f  );
	m = mtmp;
	D3DXMatrixRotationX( &mtmp, 1.0f  );
	m *= mtmp;

	Imath::Euler<float> e;
	e.setOrder(Imath::Euler<float>::YXZ); // 回転を掛け合わせる順序を指定する
	e.extract(*(const Imath::Matrix44<float> *)&m);

	printf("%f, %f, %f\n", e.x, e.y, e.z);
}
  • 実行結果