{"id":24478,"date":"2022-06-22T20:33:50","date_gmt":"2022-06-23T01:33:50","guid":{"rendered":"http:\/\/blog.kenperlin.com\/?p=24478"},"modified":"2022-06-22T20:33:50","modified_gmt":"2022-06-23T01:33:50","slug":"widget-wednesdays-25","status":"publish","type":"post","link":"https:\/\/blog.kenperlin.com\/?p=24478","title":{"rendered":"Widget Wednesdays #25"},"content":{"rendered":"<p>For this week&#8217;s Widget Wednesday I decided to go with a classic exercise in computer graphics: Use a 2D rendering substrate to show something in 3D.<\/p>\n<p>In particular, I&#8217;m simulating 1000 particles roiling around within a 3D sphere. But I&#8217;m using canvas2D to do it, and canvas2D is usually used for rendering 2D things, not 3D things.<\/p>\n<p>The magic sauce here is that at every animation frame I sort everything from back to front. That&#8217;s because in order to make things look right, I need to paint each object on top of the previous one, to create the proper illusion of 3D depth.<\/p>\n<p>You can check it out <a href=\"http:\/\/kenperlin.com\/disks\">here<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>For this week&#8217;s Widget Wednesday I decided to go with a classic exercise in computer graphics: Use a 2D rendering substrate to show something in 3D. In particular, I&#8217;m simulating 1000 particles roiling around within a 3D sphere. But I&#8217;m using canvas2D to do it, and canvas2D is usually used for rendering 2D things, not &hellip; <a href=\"https:\/\/blog.kenperlin.com\/?p=24478\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Widget Wednesdays #25&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.kenperlin.com\/index.php?rest_route=\/wp\/v2\/posts\/24478"}],"collection":[{"href":"https:\/\/blog.kenperlin.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.kenperlin.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.kenperlin.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.kenperlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=24478"}],"version-history":[{"count":1,"href":"https:\/\/blog.kenperlin.com\/index.php?rest_route=\/wp\/v2\/posts\/24478\/revisions"}],"predecessor-version":[{"id":24479,"href":"https:\/\/blog.kenperlin.com\/index.php?rest_route=\/wp\/v2\/posts\/24478\/revisions\/24479"}],"wp:attachment":[{"href":"https:\/\/blog.kenperlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=24478"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.kenperlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=24478"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.kenperlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=24478"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}