void Terrain::Init(ID3D11Device* device, ID3D11DeviceContext* dc, const InitInfo& initInfo) { mInfo = initInfo; // Divide heightmap into patches such that each patch has CellsPerPatch. mNumPatchVertRows = ((mInfo.HeightmapHeight-1) / CellsPerPatch) + 1; mNumPatchVertCols = ((mInfo.HeightmapWidth-1) / CellsPerPatch) + 1; mNumPatchVertices = mNumPatchVertRows*mNumPatchVertCols; mNumPatchQuadFaces = (mNumPatchVertRows-1)*(mNumPatchVertCols-1); LoadHeightmap(); Smooth(); CalcAllPatchBoundsY(); BuildQuadPatchVB(device); BuildQuadPatchIB(device); BuildHeightmapSRV(device); std::vector<std::wstring> layerFilenames; layerFilenames.push_back(mInfo.LayerMapFilename0); layerFilenames.push_back(mInfo.LayerMapFilename1); layerFilenames.push_back(mInfo.LayerMapFilename2); layerFilenames.push_back(mInfo.LayerMapFilename3); layerFilenames.push_back(mInfo.LayerMapFilename4); mLayerMapArraySRV = d3dHelper::CreateTexture2DArraySRV(device, dc, layerFilenames); HR(D3DX11CreateShaderResourceViewFromFileW(device, mInfo.BlendMapFilename.c_str(), 0, 0, &mBlendMapSRV, 0)); }
int main() { // Initialization //-------------------------------------------------------------------------------------- int screenWidth = 800; int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [models] example - heightmap loading and drawing"); // Define our custom camera to look into our 3d world Camera camera = {{ 18.0f, 16.0f, 18.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; Image image = LoadImage("resources/heightmap.png"); // Load heightmap image (RAM) Texture2D texture = LoadTextureFromImage(image); // Convert image to texture (VRAM) Model map = LoadHeightmap(image, (Vector3) { 16, 8, 16 }); // Load heightmap model with defined size map.material.texDiffuse = texture; // Set map diffuse texture Vector3 mapPosition = { -8.0f, 0.0f, -8.0f }; // Set model position (depends on model scaling!) UnloadImage(image); // Unload heightmap image from RAM, already uploaded to VRAM SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera); // Update camera //---------------------------------------------------------------------------------- // Draw //---------------------------------------------------------------------------------- BeginDrawing(); ClearBackground(RAYWHITE); Begin3dMode(camera); // NOTE: Model is scaled to 1/4 of its original size (128x128 units) DrawModel(map, mapPosition, 1.0f, RED); DrawGrid(20, 1.0f); End3dMode(); DrawTexture(texture, screenWidth - texture.width - 20, 20, WHITE); DrawRectangleLines(screenWidth - texture.width - 20, 20, texture.width, texture.height, GREEN); DrawFPS(10, 10); EndDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization //-------------------------------------------------------------------------------------- UnloadTexture(texture); // Unload texture UnloadModel(map); // Unload model CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; }