X_Class

Windows8.1 で X-FILE の描画処理を X_Class にまとめます。

前田稔(Maeda Minoru)の超初心者のプログラム入門

概説

  1. Viewer-1 では File Picker から選択した X-FILE(頂点座標+法線)を Sample3DSceneRenderer で描画しました。
    Viewer-2 では Sample3DSceneRenderer を X_Class としてまとめて解りやすくします。
    そろそろこの辺で元服して、名前を X_Class に改めたいと思います。 <(`^´)>
    基本的には Sample3DSceneRenderer が X_Class に変わっただけです。
    Sample3DSceneRenderer.h を X_Class.h として整理します。
    Sample3DSceneRenderer.cpp を X_Class.cpp として整理します。
  2. X_Class を作成する上で、次の Object は親から引き継ぎます。
    std::shared_ptr<DX::DeviceResources> m_Resources;
    ID3D11Device1                        *m_Device;
    ID3D11DeviceContext1                 *m_Context;
    
    *m_Device, *m_Context は DeviceResources から取得できるので、X_Class の Constructor では DeviceResources を受け取ります。
    X_Class::X_Class(const std::shared_ptr<DX::DeviceResources>& deviceResources) :
        m_loadingComplete(false),
        m_degreesPerSecond(45),
        m_indexCount(0),
        m_tracking(false),
        m_Resources(deviceResources)
    {
        CreateDeviceDependentResources();
        CreateWindowSizeDependentResources();
        m_Device = m_Resources->GetD3DDevice();
        m_Context = m_Resources->GetD3DDeviceContext();
    }
    
  3. Sample3DSceneRenderer は必要ないのでプロジェクトから削除します。
    代わりに X_Class をプロジェクトに加えます。
    これらの操作はプロジェクトのソリューションエクスプローラで行います。
    コンパイルすると関連するエラーが指摘されるので、プログラムを修正します。
  4. X Viewer-1 と同様に File Picker から選択した X-FILE(頂点座標+法線)が描画出来ることを確かめて下さい。
    X-FILE は普通 Shift_JIS でタイプされています。
    このとき「全角文字(漢字,かな)」が含まれていると、エラーで中断します。
    必要ならば Text Editor の開発 を参照して UTF-8 に変換して下さい。
  5. X_Class.h は次のようになります。
    #pragma once
    
    #include "..\Common\DeviceResources.h"
    #include "ShaderStructures.h"
    #include "..\Common\StepTimer.h"
    #include <vector>
    using namespace std;
    using namespace Platform;
    
    namespace App1
    {
        class X_Class
        {
        public:
            X_Class(const std::shared_ptr<DX::DeviceResources>& deviceResources);
            void CreateDeviceDependentResources();
            void CreateWindowSizeDependentResources();
            void ReleaseDeviceDependentResources();
            void Update(DX::StepTimer const& timer);
            void Render();
            void StartTracking();
            void TrackingUpdate(float positionX);
            void StopTracking();
            bool IsTracking() { return m_tracking; }
            void SetText(Platform::String^ text);
    
        private:
            void Rotate(float radians);
    
        private:
            std::shared_ptr<DX::DeviceResources> m_Resources;
            ID3D11Device1           *m_Device;
            ID3D11DeviceContext1    *m_Context;
    
            // キューブ ジオメトリの Direct3D リソース。
            Microsoft::WRL::ComPtr<ID3D11InputLayout>   m_inputLayout;
            Microsoft::WRL::ComPtr<ID3D11Buffer>        m_vertexBuffer;
            Microsoft::WRL::ComPtr<ID3D11Buffer>        m_indexBuffer;
            Microsoft::WRL::ComPtr<ID3D11VertexShader>  m_vertexShader;
            Microsoft::WRL::ComPtr<ID3D11PixelShader>   m_pixelShader;
            Microsoft::WRL::ComPtr<ID3D11Buffer>        m_constantBuffer;
    
            ID3D11RasterizerState  *m_RasterizerState;
    
            // キューブ ジオメトリのシステム リソース。
            ModelViewProjectionConstantBuffer   m_constantBufferData;
            uint32  m_indexCount;
    
            // レンダリング ループで使用する変数。
            bool    m_loadingComplete;
            float   m_degreesPerSecond;
            bool    m_tracking;
    
            //★ X-FILE の領域
            std::wstring    m_x;                //X-FILE TEXT
            vector<wstring> VT;                 //X-FILE を行で切り分け
            int             VT_size;            //VT の大きさ
            vector<DirectX::XMFLOAT3> m_pos;    // 頂点座標
            vector<DirectX::XMFLOAT3> m_norm;   // 法線ベクトル
            vector<unsigned short> m_idxP;      // 頂点 Index の並び(角付)
            vector<unsigned short> m_idxN;      // 法線 Index の並び(角付)
            vector<unsigned short> m_idxP3;     // 頂点 Index(3P) の並び
            vector<unsigned short> m_idxN3;     // 法線 Index(3P) の並び
            int     m_Line, m_Col, m_Top;
            wstring Word;
    
            bool Search(String^ key);
            void Token();
            bool SetXMFLOAT3(String^ key, vector<DirectX::XMFLOAT3> *f3);
            bool SetShort(vector<unsigned short> *val);
            void PX_P3(vector<unsigned short> PX, vector<unsigned short> *P3);
            void ComputeNorm(VertexPosition *Vertices, int siz);
    
        };
    }
    

超初心者のプログラム入門(DirectX Store)