#pragma once #include #include #include "WICTextureLoader.h" #include "SharedMethods.h" #include "SceneNode.h" #include "Vector3D.h" class TerrainNode : public SceneNode { public: TerrainNode(wstring name, wstring heightMap, int widthX = 1023, int widthZ = 1023, int rows = 10, int cols = 10); bool Initialise(void); void Render(void); void Shutdown(void); private: int _widthX; int _widthZ; UINT _gridRows; UINT _gridCols; int _cellSizeX; int _cellSizeZ; bool _usedHeightMap; UINT _polygonsCount; UINT _indiciesCount; UINT _vertexCount; float _terrainStartX; float _terrainStartZ; float _terrainEndX; float _terrainEndZ; wstring _heightMap; wstring _textureName; vector _terrainVerts; vector _indices; vector _heightValues; vector _terrainNormals; XMFLOAT4 _ambientLight; XMFLOAT4 _directionalLightVector; XMFLOAT4 _directionalLightColor; XMFLOAT4 _cameraPosition; ComPtr _device; ComPtr _deviceContext; ComPtr _vertexBuffer; ComPtr _indexBuffer; ComPtr _vertexShaderByteCode = nullptr; ComPtr _pixelShaderByteCode = nullptr; ComPtr _vertexShader; ComPtr _pixelShader; ComPtr _layout; ComPtr _constantBuffer; ComPtr _texture; ComPtr _transparentBlendState; ComPtr _defaultRasteriserState; ComPtr _wireframeRasteriserState; void GenerateTerrainData(); void GenerateBuffers(); void BuildShaders(); void BuildVertexLayout(); void BuildConstantBuffer(); void BuildBlendState(); void BuildRendererStates(); void BuildTexture(); bool LoadHeightMap(wstring heightMapFilename); float GetHeightMapValueAt(int index); void AddNormalToVertex(int row, int col, int vertexIndex, Vector3D normal); };