boost::polygon::point_3d_data と D3DXVECTOR3 の変換

Boost.Polygonの謎 id:nagoya313:20100921
こんな感じ?

#include <iostream>
#include <d3dx9.h>

#include <boost/polygon/polygon.hpp>

#include <boost/array.hpp>
#include <boost/range/algorithm/for_each.hpp>
#include <boost/range/adaptor/transformed.hpp>

#include <pstade/oven/copied.hpp>

typedef boost::polygon::point_3d_data<float> point_3d_t;
typedef D3DXVECTOR3                          d3d_vec3_t;

// D3DXVECTOR3 -> boost::polygon::point_3d_data<float>
point_3d_t
d3d_vec3_to_point_3d(const d3d_vec3_t& src){
    return point_3d_t(src.x, src.y, src.z);
} 

// boost::polygon::point_3d_data<float> -> D3DXVECTOR3
d3d_vec3_t
point_3d_to_d3d_vec3(const point_3d_t& src){
    namespace gtl = boost::polygon;
    return d3d_vec3_t(gtl::x(src), gtl::y(src), gtl::z(src));
}

int
main(){    
    namespace oven = pstade::oven;
    namespace adaptors = boost::adaptors;
    namespace gtl = boost::polygon;
    
    boost::array<d3d_vec3_t, 4> d3d_array = {
        D3DXVECTOR3(0.0f, 0.0, 0.0f),
        D3DXVECTOR3(1.0f, 0.0, 0.0f),
        D3DXVECTOR3(0.0f, 1.0, 0.0f),
        D3DXVECTOR3(0.0f, 0.0, 1.0f),
    };

    std::vector<point_3d_t>    point_3d_array;

    // D3DXVECTOR3 -> polygon::point_3d_data
    point_3d_array = d3d_array
                   |adaptors::transformed(d3d_vec3_to_point_3d)  // 型を変換して
                   |oven::copied;                                // コピー
    
    // 出力
    boost::for_each(point_3d_array, [](const point_3d_t& pos){
        namespace gtl = boost::polygon;
        std::cout << gtl::x(pos) << ", "
                  << gtl::y(pos) << ", "
                  << gtl::z(pos) << std::endl;
    });
    
    // polygon::point_3d_data -> D3DXVECTOR3
    d3d_array = point_3d_array
              |adaptors::transformed(point_3d_to_d3d_vec3)
              |oven::copied;
    
    return 0;
}

出力:

0, 0, 0
1, 0, 0
0, 1, 0
0, 0, 1

adaptors::transformed を使って、ベクトルの型を変換している。
adaptors::transformed をもう1回使えば、バッファにコピーしないで直接、point_3d_data を操作できそう。
と、ここまで書いたんだけど Polygon で何が出来るのかいまいち理解していない。
個人的にあまりゲーム向けじゃない気がするんだけどどうなんだろう。
座標変換とかは全部 VRAM でやっちゃうし、当たり判定も物理エンジンの方がいい気がするし。
誰か日本語でまとめて。
今後の活躍に期待なのかなー。