{"id":613,"date":"2012-08-15T00:37:18","date_gmt":"2012-08-14T15:37:18","guid":{"rendered":"http:\/\/www.rainyman.net\/nest\/?p=613"},"modified":"2015-03-06T14:45:37","modified_gmt":"2015-03-06T05:45:37","slug":"directx9%e3%81%a8%e3%81%8bassimp%e3%81%a8%e3%81%8b%e3%83%a1%e3%83%a2","status":"publish","type":"post","link":"https:\/\/blog.rainyman.jp\/nest\/?p=613","title":{"rendered":"DirectX9\u3068\u304bAssimp\u3068\u304b\u30e1\u30e2"},"content":{"rendered":"<div id=\"toc_container\" class=\"no_bullets\"><p class=\"toc_title\">\u76ee\u6b21<\/p><ul class=\"toc_list\"><li><a href=\"#Assimp\"><span class=\"toc_number toc_depth_1\">1<\/span> Assimp<\/a><\/li><li><a href=\"#D3DX\"><span class=\"toc_number toc_depth_1\">2<\/span> D3DX\u30e1\u30c3\u30b7\u30e5\u306e\u5c5e\u6027\u30d0\u30c3\u30d5\u30a1\u3068\u5c5e\u6027\u30c6\u30fc\u30d6\u30eb<\/a><\/li><\/ul><\/div>\n<p>\u7406\u7531\u3042\u3063\u3066DirectX9\u3068\u304b<a href=\"http:\/\/assimp.sourceforge.net\/\">Assimp<\/a>\u3068\u304b\u5f04\u3063\u3066\u308b\u306e\u3067\u30e1\u30e2\uff0e<\/p>\n\n<h3><span id=\"Assimp\">Assimp<\/span><\/h3>\n\n<ul>\n<li>Assimp\n\n<ul>\n<li>Open Asset Import Library\uff0eCOLLADA\u3068\u304b\u3044\u308d\u3044\u308d\u306a3D\u30c7\u30fc\u30bf\u306e\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u3092\u8aad\u307f\u8fbc\u3080\u305f\u3081\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\uff0e<\/li>\n<li>\u73fe\u5728\u6700\u65b0\u306f3.0\u7cfb\uff0e<\/li>\n<li>2.0\u7cfb\u306b\u306f\uff0c<a href=\"http:\/\/code.google.com\/p\/assimp-net\/\">assimp-net<\/a>\u3068\u3044\u3046P\/Invoke\u30d9\u30fc\u30b9\u306e\u30e9\u30c3\u30d1\u30fc\u3082\u3042\u308b\uff0e<\/li>\n<li>Visual Studio\u7528\u306e\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u30d5\u30a1\u30a4\u30eb\u304c\u5165\u3063\u3066\u308b\u306e\u3067\u30d3\u30eb\u30c9\u306f\u7c21\u5358\uff0e<\/li>\n<li>\u30c7\u30d5\u30a9\u30eb\u30c8\u3060\u3068HAS_ITERATOR_DEBUGGING=0\u3068\u3044\u3046\u30de\u30af\u30ed\u304c\u30d7\u30ed\u30d1\u30c6\u30a3\u30b7\u30fc\u30c8\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u6ce8\u610f(\u30c7\u30d0\u30c3\u30b0\u6642\u306f\u5c11\u306a\u304f\u3068\u3082\u5fc5\u8981\u306a\u3044\u30de\u30af\u30ed)\uff0e<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<p>Assimp\u306f\u30b7\u30fc\u30f3\u30b0\u30e9\u30d5(aiScene)\u3092\u8fd4\u3059\u306e\u3067\uff0c\u3053\u308c\u3092\u74b0\u5883\u306b\u5fdc\u3058\u305f\u30c7\u30fc\u30bf\u69cb\u9020\u306b\u30de\u30c3\u30d7\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\uff0e<\/p>\n\n<p>DirectX9\u306a\u3089ID3DXMesh\u306b\u30de\u30c3\u30d7\u3059\u308b\u306e\u304c\u307e\u3041\u30d5\u30c4\u30fc\u306e\u65b9\u6cd5\u306a\u3093\u3060\u308d\u3046\u3051\u3069\uff0cD3DX\u306e\u30e1\u30c3\u30b7\u30e5\u3063\u3066.X\u3092\u8aad\u307f\u8fbc\u3080\u305f\u3081\u306b\u4f7f\u3046\u3082\u306e\u307f\u305f\u3044\u3067\uff0c\u3042\u3093\u307e\u308a\u4f7f\u3044\u3088\u304f\u306a\u3044\u6c17\u304c\u3059\u308b\uff0e<\/p>\n\n<p>\u3093\u3067\uff0cID3DXMesh::GenerateAdjacency\u3068\u3044\u3046\u30e1\u30bd\u30c3\u30c9\u306b\u30cf\u30de\u3063\u305f\u306e\u3067\u30e1\u30e2\uff0e<\/p>\n\n<h3><span id=\"D3DX\">D3DX\u30e1\u30c3\u30b7\u30e5\u306e\u5c5e\u6027\u30d0\u30c3\u30d5\u30a1\u3068\u5c5e\u6027\u30c6\u30fc\u30d6\u30eb<\/span><\/h3>\n\n<p>ID3DXMesh\u306f\u9762\u3054\u3068\u306bDWORD\u3092\u6301\u305f\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u3066ID3DXMesh::DrawSubset\u30e1\u30bd\u30c3\u30c9\u3067\u5c5e\u6027\u5225\u306b\u63cf\u753b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\uff0e<br \/>\n\u5c5e\u6027\u306f\u30d0\u30fc\u30c6\u30c3\u30af\u30b9\u30d0\u30c3\u30d5\u30a1\uff0c\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30d0\u30c3\u30d5\u30a1\u3068\u306f\u5225\u306e<strong>\u5c5e\u6027\u30d0\u30c3\u30d5\u30a1<\/strong>\u3068\u3044\u3046DWORD\u306e\u914d\u5217\u306b\u66f8\u304d\u8fbc\u3080\u3053\u3068\u3067\u8a2d\u5b9a\u3067\u304d\u308b\uff0e\n\u3053\u308c\u306f\u9762\u306e\u30b0\u30eb\u30fc\u30d7\u5316\u306b\u4f7f\u3046\u3082\u306e\u3060\u3051\u3069\uff0c\u5c5e\u6027\u306f\u8981\u3059\u308b\u306b\u9762\u306e\u30de\u30c6\u30ea\u30a2\u30eb\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u308b\uff0e<\/p>\n\n<p>\u3084\u3084\u3053\u3057\u3044\u306e\u306f\u5c5e\u6027\u30d0\u30c3\u30d5\u30a1\u306e\u4ed6\u306b<strong>\u5c5e\u6027\u30c6\u30fc\u30d6\u30eb<\/strong>\u3068\u3044\u3046\u306e\u304c\u3042\u308b\uff0e<\/p>\n\n<p>\u9762\u3092\u63cf\u753b\u3059\u308b\u969b\u306f\uff0c\u30c7\u30d0\u30a4\u30b9\u306b\u305d\u306e\u9762\uff08\u306e\u5c5e\u6027\uff09\u306b\u5bfe\u5fdc\u3057\u305f\u30de\u30c6\u30ea\u30a2\u30eb\u3068\u304b\u30b7\u30a7\u30fc\u30c0\u306e\u8a2d\u5b9a\u3092\u3057\u3066\u304b\u3089\uff0c\u9762\u3092\u63cf\u753b\u3059\u308b\u64cd\u4f5c\u3092\u3059\u308b\uff0e\n\u540c\u3058\u30de\u30c6\u30ea\u30a2\u30eb\u306e\u9762\u304c\u3042\u308b\u306a\u3089\u307e\u3068\u3081\u3066\u63cf\u753b\u3057\u305f\u307b\u3046\u304c\u65e9\u3044\u308f\u3051\u3060\u3051\u3069\uff0c\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30d0\u30c3\u30d5\u30a1\u306b\u8a18\u8ff0\u3055\u308c\u3066\u3044\u308b\u9762\u306e\u9806\u5e8f\u304c\u5c5e\u6027\u3067\u30bd\u30fc\u30c8\u3055\u308c\u3066\u3044\u308b\u3068\u306f\u9650\u3089\u306a\u3044\uff0e<\/p>\n\n<p>\u3053\u306e\u9762\u306e\u30bd\u30fc\u30c8\u3092\u3084\u3063\u3066\u304f\u308c\u308b\u306e\u304cID3DXMesh::Optimize\u30e1\u30bd\u30c3\u30c9(\u203b)\u3067\uff0c\u5c5e\u6027\u30c6\u30fc\u30d6\u30eb\u306f\u8981\u3059\u308b\u306b\u9762\u3092\u5c5e\u6027\u3067\u30bd\u30fc\u30c8\u3057\u305f\u7d50\u679c\uff0c\u540c\u3058\u5c5e\u6027\u3092\u5171\u6709\u3059\u308b\u7bc4\u56f2\u304c\u3069\u3053\u304b\u3089\u3069\u3053\u307e\u3067\u304b\uff0c\u3068\u3044\u3046\u306e\u3092\u8a18\u9332\u3057\u3066\u304a\u304f\u305f\u3081\u306e\u30e2\u30ce\u306e\u3088\u3046\u3060\uff0e<\/p>\n\n<p>\u203b \u304a\u305d\u3089\u304fD3DXMESHOPT_ATTRSORT\u3092\u4f7f\u3063\u305f\u5834\u5408\u306e\u307f<\/p>\n\n<p>\u5c5e\u6027\u30c6\u30fc\u30d6\u30eb\u306fID3DXMesh::Optimize\u3067\u4f5c\u308b\u304b\uff0c\u624b\u52d5\u3067\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u308b\uff0e\u305f\u3060\u5c5e\u6027\u30c6\u30fc\u30d6\u30eb\u306f\uff0c\u7121\u304f\u3066\u3082ID3DXMesh::DrawSubset\u3067\u63cf\u753b\u3067\u304d\u308b\u306e\u3067\uff0c\u304a\u305d\u3089\u304f\u5c5e\u6027\u30c6\u30fc\u30d6\u30eb\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b\u5426\u304b\u3067\u6319\u52d5\u3092\u5909\u3048\u3066\u3044\u308b\u306e\u3060\u3068\u601d\u3046\uff0e<\/p>\n\n<p>\u624b\u9806\u3068\u3057\u3066\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u611f\u3058\u306b\u306a\u308b\uff0e<\/p>\n\n<div><pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\n\/\/ \u9802\u70b9\u30c7\u30fc\u30bf\nstruct VertexData; \n\/\/ \u9802\u70b9\u5ba3\u8a00(\u306e\u3082\u3068)\nD3DVERTEXELEMENT9 vertdecl[] = { \/*...*\/ }; \n\n\/\/ \u30d0\u30fc\u30c6\u30c3\u30af\u30b9\u30d0\u30c3\u30d5\u30a1\u306b\u30b3\u30d4\u30fc\u3059\u308b\u5185\u5bb9\nVertexData vertices[NUM_VERTICES] = { \/*...*\/ };\n\/\/ \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30d0\u30c3\u30d5\u30a1\u306b\u30b3\u30d4\u30fc\u3059\u308b\u5185\u5bb9\nshort indices[NUM_INDICES] = { \/*...*\/ };\n\/\/ \u5c5e\u6027\u30d0\u30c3\u30d5\u30a1\u306b\u30b3\u30d4\u30fc\u3059\u308b\u5185\u5bb9\nDWORD attributes[NUM_INDICES\/3] = { \/*...*\/ };\n\n\/\/ \u30c7\u30d0\u30a4\u30b9\nLPDIRECT3DDEVICE9 device;\n\/\/ \u30e1\u30c3\u30b7\u30e5\nLPD3DXMESH mesh;\n\nvoid Load()\n{\n    \/\/ \u30e1\u30c3\u30b7\u30e5\u306e\u751f\u6210(\u30a8\u30e9\u30fc\u51e6\u7406\u306f\u7701\u7565)\n    \/\/             \u9762\u306e\u6570       \u9802\u70b9\u6570      \u30d5\u30e9\u30b0         \u9802\u70b9\u5ba3\u8a00  \u30c7\u30d0\u30a4\u30b9  \u30e1\u30c3\u30b7\u30e5\n    D3DXCreateMesh(NUM_INDICES\/3, NUM_VERTS, D3DXMESH_MANAGED, vertdecl, device, &amp;mesh);\n\n    \/\/ \u30d0\u30fc\u30c6\u30c3\u30af\u30b9\u30d0\u30c3\u30d5\u30a1\u306b\u5024\u3092\u8a2d\u5b9a\n    VertexData* vb;\n    mesh-&gt;LockVertexBuffer(0, (LPVOID)&amp;vb);\n    memcpy(vb, vertices, sizeof(vertices));\n    mesh-&gt;UnlockVertexBuffer();\n\n    \/\/ \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30d0\u30c3\u30d5\u30a1\u306b\u5024\u3092\u8a2d\u5b9a\n    short *ib;\n    mesh-&gt;LockIndexBuffer(0, (LPVOID)&amp;ib);\n    memcpy(ib, indices, sizeof(indices));\n    mesh-&gt;UnlockIndexBuffer();\n\n    \/\/ \u5c5e\u6027\u30d0\u30c3\u30d5\u30a1\u306b\u5024\u3092\u8a2d\u5b9a\n    DWORD *ab;\n    mesh-&gt;LockAttributeBuffer(0, &amp;ab);\n    memcpy(ab, attributes, sizeof(attributes));\n    mesh-&gt;UnlockAttributeBuffer();\n\n    \/\/ Optimize\u30d5\u30a1\u30df\u30ea\u3092\u547c\u3073\u51fa\u3059\u6e96\u5099\uff0e\u96a3\u63a5\u30ea\u30b9\u30c8\u306e\u751f\u6210\uff0e\n    vector&lt;DWORD&gt; adjList;\n    adjList.resize(3 * mesh-&gt;GetNumFaces());\n    mesh-&gt;GenerateAdjacency(EPSION, &amp;adjList[0]); \/\/ EPSION\u306f\u9069\u5f53\u306a\u5024(1.0f\/512\u3068\u304b)\n\n    \/\/ Optimize\u306e\u4e00\u7a2e\n    mesh-&gt;OptimizeInPlace(D3DXMESHOPT_ATTRSORT, &amp;adjList[0], NULL, NULL, NULL);\n\n}\/\/ void Load()\n\nvoid Render()\n{\n    device-&gt;Clear(\/*...*\/);\n    device-&gt;BeginScene();\n\n    DWORD num_subset;\n    device-&gt;GetAttributeTable(NULL, &amp;num_subset);\n\n    for(DWORD i = 0; i &lt; num_subset; ++i)\n    {\n       \/\/ \u5c5e\u6027 i \u306b\u5bfe\u5fdc\u3059\u308b\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u30b9\u30c6\u30fc\u30c8\uff0c\u30de\u30c6\u30ea\u30a2\u30eb\uff0c\u30a8\u30d5\u30a7\u30af\u30c8\u306e\u8a2d\u5b9a\u3092\u3059\u308b\n       \/\/ ...\n\n       mesh-&gt;DrawSubset(i);\n    }\/\/ for\n\n    device-&gt;EndScene();\n    device-&gt;Present(NULL, NULL, NULL, NULL);\n}\/\/ void Render()\n\n<\/pre><\/div>\n\n<p>\u3084\u3084\u3053\u3057\u3044\u3053\u3068\u306b\u306a\u3063\u305f\u306e\u306f<em>ID3DXMesh::GenerateAdjacency<\/em>\u306e\u90e8\u5206\u3067\uff0c<strong>\u9802\u70b9\u5ba3\u8a00\u3067D3DDECLUSAGE_POSITION\u306b\u6307\u5b9a\u3057\u305f\u3082\u306e\u306fD3DDECLTYPE_FLOAT3\u306b\u3057\u3066\u304a\u304b\u306a\u3044\u3068\u3053\u306e\u95a2\u6570\u306f\u5931\u6557\u3059\u308b<\/strong>\uff0e\u30c7\u30d0\u30c3\u30b0\u30e9\u30f3\u30bf\u30a4\u30e0\u3067\u30ed\u30b0\u51fa\u3057\u3066\u521d\u3081\u3066\u5206\u304b\u308a\u307e\u3057\u305f\uff0e<\/p>\n\n<p>\u4f4d\u7f6e\u30d9\u30af\u30c8\u30eb\u306a\u3089\u5225\u306bfloat4\u3067\u3082\u3044\u3044\u6c17\u304c\u3059\u308b\u3093\u3060\u3051\u3069\u306a\u3041\uff0e<\/p>\n\n<hr \/>\n\n<p>\u3053\u308c\u3067\u3088\u3046\u3084\u304fAssimp\u3067\u8aad\u307f\u8fbc\u3093\u3060\u30c7\u30fc\u30bf\u3092\u8868\u793a\u3067\u304d\u305d\u3046\uff0e<\/p>\n\n<p>Assimp\u3067\u8aad\u307f\u8fbc\u3093\u3060\u30e2\u30c7\u30eb\u306faiNode\u3063\u3066\u30c7\u30fc\u30bf\u69cb\u9020\u3067\uff0c\u3053\u3044\u3064\u304c\u8907\u6570\u306eaiMesh\u3063\u3066\u3044\u3046\u306e\u3092\u6301\u3063\u3066\u3044\u308b\u3093\u3060\u3051\u3069\uff0c\u3053\u308c\u306f\u305f\u3060\u4e00\u3064\u306e\u30de\u30c6\u30ea\u30a2\u30eb\u3092\u53c2\u7167\u3059\u308b\uff0e\u8981\u3059\u308b\u306baiMesh\u304cD3DX\u30e1\u30c3\u30b7\u30e5\u306e\u30b5\u30d6\u30bb\u30c3\u30c8\u306b\u5bfe\u5fdc\u3059\u308b\u3068\u3044\u3046\u308f\u3051\u3060\uff0e<\/p>\n\n<p>\u5168aiMesh\u306e\u9802\u70b9\u3068\u9762\u3092\uff0cD3DX\u30e1\u30c3\u30b7\u30e5\u306e\u30d0\u30fc\u30c6\u30c3\u30af\u30b9\u30d0\u30c3\u30d5\u30a1\u3068\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30d0\u30c3\u30d5\u30a1\u306b\u7d71\u5408\u3057\u3066\uff0caiMesh\u3054\u3068\u306b\u5c5e\u6027\u3092\u632f\u3063\u3066\u3042\u3052\u308c\u3070\u3044\u3044\u3060\u308d\u3046\uff0e\u30de\u30c6\u30ea\u30a2\u30eb\u3092\u3061\u3083\u3093\u3068\u30de\u30c3\u30d7\u3059\u308b\u306e\u306f\u3081\u3093\u3069\u304f\u3055\u305d\u3046\u3060\u3051\u3069\u307e\u3041\u4f55\u3068\u304b\u306a\u308b\u3060\u308d\uff0e<\/p>\n\n<p>\u53c2\u8003<\/p>\n\n<ul>\n<li><a href=\"http:\/\/d.hatena.ne.jp\/yotto-k\/20060828\">2006-08-28 &#8211; \u8ab0\u3082\u5c45\u306a\u3044:<\/a><\/li>\n<li><a href=\"http:\/\/d.hatena.ne.jp\/ho_5750\/20110622\/1308716703\">D3DXMesh\u306e\u9802\u70b9\u60c5\u5831\u6700\u9069\u5316 &#8211; \u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u65e5\u8a18<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u76ee\u6b211 Assimp2 D3DX\u30e1\u30c3\u30b7\u30e5\u306e\u5c5e\u6027\u30d0\u30c3\u30d5\u30a1\u3068\u5c5e\u6027\u30c6\u30fc\u30d6\u30eb \u7406\u7531\u3042\u3063\u3066DirectX9\u3068\u304bAssimp\u3068\u304b\u5f04\u3063\u3066\u308b\u306e\u3067\u30e1\u30e2\uff0e Assimp Assimp Open Asset Import Library\uff0eCO [&hellip;]<\/p>","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[12,10,9,4],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.rainyman.jp\/nest\/index.php?rest_route=\/wp\/v2\/posts\/613"}],"collection":[{"href":"https:\/\/blog.rainyman.jp\/nest\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.rainyman.jp\/nest\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.rainyman.jp\/nest\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.rainyman.jp\/nest\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=613"}],"version-history":[{"count":24,"href":"https:\/\/blog.rainyman.jp\/nest\/index.php?rest_route=\/wp\/v2\/posts\/613\/revisions"}],"predecessor-version":[{"id":1184,"href":"https:\/\/blog.rainyman.jp\/nest\/index.php?rest_route=\/wp\/v2\/posts\/613\/revisions\/1184"}],"wp:attachment":[{"href":"https:\/\/blog.rainyman.jp\/nest\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=613"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.rainyman.jp\/nest\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=613"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.rainyman.jp\/nest\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=613"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}