{"id":22062559,"url":"https://github.com/pmiddend/flake","last_synced_at":"2026-05-02T14:45:29.442Z","repository":{"id":139583751,"uuid":"2248258","full_name":"pmiddend/flake","owner":"pmiddend","description":null,"archived":false,"fork":false,"pushed_at":"2017-07-01T15:21:53.000Z","size":79774,"stargazers_count":1,"open_issues_count":4,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-15T00:51:34.967Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pmiddend.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2011-08-22T12:19:03.000Z","updated_at":"2015-04-18T18:40:43.000Z","dependencies_parsed_at":null,"dependency_job_id":"ba65cd03-f546-47f4-9c0f-31b037fce3da","html_url":"https://github.com/pmiddend/flake","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmiddend%2Fflake","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmiddend%2Fflake/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmiddend%2Fflake/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmiddend%2Fflake/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pmiddend","download_url":"https://codeload.github.com/pmiddend/flake/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245143969,"owners_count":20568049,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-30T18:21:34.652Z","updated_at":"2026-05-02T14:45:29.391Z","avatar_url":"https://github.com/pmiddend.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"flake\n----------------------------------------------------------------------------\n\nThis repository contains the code accompanying my diploma thesis (in\nGerman) for the [University of Osnabrück](http://www.uos.de) called:\n\n\u003e Echtzeit-Simulation von Windfeldern mit OpenCL zur Modellierung von Schneefall\n\nwhich translates to\n\n\u003e Real-time simulation of wind fields using OpenCL for modelling falling snow\n\nThe thesis can be downloaded\n[here](http://pmiddend.github.com/flake/flake.pdf).\n\nAbstract\n--------\n\nThe thesis deals with the different aspects of modelling and rendering\nsnow. To give snow flakes realistic trajectories, an algorithm from\nthe field of computational fluid dynamics is implemented in\n[OpenCL](http://www.khronos.org/opencl/). This algorithm creates a\nvector field containing the speed and direction of the wind at each\npoint in space. Using this field, the drag force is calculated for\neach snowflake.\n\nThe flakes are modelled as a particle system and are rendered using\n\u003ca href=\"http://msdn.microsoft.com/en-us/library/windows/desktop/bb147281(v=vs.85).aspx\"\u003epoint sprites\u003c/a\u003e\nin OpenGL or DirectX. Their properties, such as the position and the\nvelocity, are updated on the graphics card (GPU) using OpenCL, taking into account\ngravity, drag and other forces.\n\nThe collision of a flake with the ground or an obstacle causes an\ninternal counter signifying the amount of snow at the point of\ncollision to be increased. At regular intervals, this \"snow amount\nfield\" is converted to a snow mesh using the [Marching Cubes\nalgorithm](http://en.wikipedia.org/wiki/Marching_cubes) (this is not\nshown in the video below). Using [triplanar\ntexturing](http://http.developer.nvidia.com/GPUGems3/gpugems3_ch01.html),\nthis mesh is given a surface that mimics a real snow cover.\n\nA video of the result can be seen here:\n\n\u003ciframe width=\"420\" height=\"315\"\nsrc=\"http://www.youtube.com/embed/aO8EhyJvtZE\" frameborder=\"0\"\nallowfullscreen\u003e\u003c/iframe\u003e\n\nflakelib\n--------\n\nThe numerical algorithms to solve for the wind field have been\ngeneralized, so they can be included in other applications. All the\nnecessary classes are in the fruitlib directory (the C++ code resides\nin fruitlib/src and fruitlib/include, respectively).\n\nflake tests\n-----------\n\nTo try out flake and flakelib, you can either download the pre-built\nbinaries\n[here](http://pmiddend.github.com/flake/flake_release_107.zip) or\nbuild it yourself using the source. Note, however, that you need to\nbuild its underlying engine,\n[sge](http://github.com/freundlich/spacegameengine) (also hosted on github), first.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpmiddend%2Fflake","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpmiddend%2Fflake","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpmiddend%2Fflake/lists"}