diff options
| -rwxr-xr-x | 2d/_collisions/polygon_polygon/dist/output.wasm | bin | 56810 -> 56473 bytes | |||
| -rw-r--r-- | 2d/_collisions/polygon_polygon/main.cpp | 11 | ||||
| -rwxr-xr-x | 2d/_collisions/rectangle_rectangle/dist/output.wasm | bin | 55607 -> 55719 bytes | |||
| -rw-r--r-- | 2d/_collisions/rectangle_rectangle/main.cpp | 8 | ||||
| -rw-r--r-- | roadmap.html | 264 | ||||
| -rw-r--r-- | roadmap.html.content | 108 | ||||
| -rwxr-xr-x | upload.sh | 2 | 
7 files changed, 275 insertions, 118 deletions
| diff --git a/2d/_collisions/polygon_polygon/dist/output.wasm b/2d/_collisions/polygon_polygon/dist/output.wasmBinary files differ index e355676..d008042 100755 --- a/2d/_collisions/polygon_polygon/dist/output.wasm +++ b/2d/_collisions/polygon_polygon/dist/output.wasm diff --git a/2d/_collisions/polygon_polygon/main.cpp b/2d/_collisions/polygon_polygon/main.cpp index 916a057..b928f02 100644 --- a/2d/_collisions/polygon_polygon/main.cpp +++ b/2d/_collisions/polygon_polygon/main.cpp @@ -331,12 +331,13 @@ void resolveCollision(Rigidbody* first, Rigidbody* second, IntersectionResult* i      float32 linearDenomPart = collisionNormal.dot(collisionNormal * (1.f / first->mass + 1.f / second->mass));  	float32 rotationalDenomPart = (firstPerpNorm * firstPerpNorm) / first->momentOfInertia + (sndPerpNorm * sndPerpNorm) / second->momentOfInertia; -    float32 impulseMagnitude = numerator / (linearDenomPart + rotationalDenomPart); +    // @TODO: Most of my 2D rotational work is pretty broken. Let's ignore it for the time being; +    float32 impulseMagnitude = numerator / (linearDenomPart);// + rotationalDenomPart);      first->velocity = first->velocity + (collisionNormal * (impulseMagnitude / first->mass));  	second->velocity = second->velocity - (collisionNormal * (impulseMagnitude / second->mass)); -    first->rotationalVelocity = first->rotationalVelocity + firstPerp.dot(collisionNormal * impulseMagnitude) / first->momentOfInertia; -    second->rotationalVelocity = second->rotationalVelocity - secondPerp.dot(collisionNormal * impulseMagnitude) / second->momentOfInertia; +    // first->rotationalVelocity = first->rotationalVelocity + firstPerp.dot(collisionNormal * impulseMagnitude) / first->momentOfInertia; +    // second->rotationalVelocity = second->rotationalVelocity - secondPerp.dot(collisionNormal * impulseMagnitude) / second->momentOfInertia;  }  void update(float32 deltaTimeSeconds, void* userData) { @@ -393,15 +394,19 @@ void update(float32 deltaTimeSeconds, void* userData) {      for (int p = 0; p < 4; p++) {          ConvexPolygon* polygon = &polygons[p];          if (polygon->body.position.x <= 0.f) { +            polygon->body.position.x = 0.f;              polygon->body.velocity = polygon->body.velocity - Vector2 { 1.f, 0.f } * (2 * (polygon->body.velocity.dot(Vector2 { 1.f, 0.f })));          }          if (polygon->body.position.y <= 0.f) { +            polygon->body.position.y = 0.f;              polygon->body.velocity = polygon->body.velocity - Vector2 { 0.f, 1.f } * (2 * (polygon->body.velocity.dot(Vector2 { 0.f, 1.f })));          }           if (polygon->body.position.x >= 640.f) { +            polygon->body.position.x = 640.f;              polygon->body.velocity = polygon->body.velocity - Vector2 { -1.f, 0.f } * (2 * (polygon->body.velocity.dot(Vector2{ -1.f, 0.f })));          }          if (polygon->body.position.y >= 480.f) { +            polygon->body.position.y = 480.f;              polygon->body.velocity = polygon->body.velocity - Vector2 { 0.f, -1.f } * (2 * (polygon->body.velocity.dot(Vector2 { 0.f, -1.f }))) ;          }      } diff --git a/2d/_collisions/rectangle_rectangle/dist/output.wasm b/2d/_collisions/rectangle_rectangle/dist/output.wasmBinary files differ index 5a17a67..f61e371 100755 --- a/2d/_collisions/rectangle_rectangle/dist/output.wasm +++ b/2d/_collisions/rectangle_rectangle/dist/output.wasm diff --git a/2d/_collisions/rectangle_rectangle/main.cpp b/2d/_collisions/rectangle_rectangle/main.cpp index 99dafe5..689ea11 100644 --- a/2d/_collisions/rectangle_rectangle/main.cpp +++ b/2d/_collisions/rectangle_rectangle/main.cpp @@ -398,19 +398,25 @@ void update(float32 deltaTimeSeconds, void* userData) {  		}  	} -    // Check collisions with walls +    // Check collisions with walls. +    // @NOTE: Setting the position backwards by a small amount _could_ move it into another object, but we are ignoring that circumstance +    // for now, as it is very unlikely.      for (int r = 0; r < 4; r++) {          Rectangle* rect = &rectangleList[r];          if (rect->body.position.x <= 0.f) { +            rect->body.position.x = 0.f;              rect->body.velocity = rect->body.velocity - Vector2 { 1.f, 0.f } * (2 * (rect->body.velocity.dot(Vector2 { 1.f, 0.f })));          }          if (rect->body.position.y <= 0.f) { +            rect->body.position.y = 0.f;              rect->body.velocity = rect->body.velocity - Vector2 { 0.f, 1.f } * (2 * (rect->body.velocity.dot(Vector2 { 0.f, 1.f })));          }           if (rect->body.position.x >= 640.f) { +            rect->body.position.x = 640.f;              rect->body.velocity = rect->body.velocity - Vector2 { -1.f, 0.f } * (2 * (rect->body.velocity.dot(Vector2{ -1.f, 0.f })));          }          if (rect->body.position.y >= 480.f) { +            rect->body.position.y = 480.f;              rect->body.velocity = rect->body.velocity - Vector2 { 0.f, -1.f } * (2 * (rect->body.velocity.dot(Vector2 { 0.f, -1.f }))) ;          }      } diff --git a/roadmap.html b/roadmap.html index 912e8c6..9e5e82e 100644 --- a/roadmap.html +++ b/roadmap.html @@ -1,124 +1,162 @@  <!DOCTYPE html>  <html lang="en"> -    <head> -      <meta charset="utf-8"> -	  <script src="scripts/jquery-3.5.1.min.js"></script> -        <script src="index.js"></script> -        <link rel="stylesheet" href="index.css"> -        <title>Roadmap</title> -		<style> -		  section ul { -			  list-style: none; -			  padding-left: 0; -		  } -		  section li { -			  position: relative; -			  padding-left: 1.5em;  /* space to preserve indentation on wrap */ -		  } -		  section li:before { -			  content: ''; -			  position: absolute; -			  left: 0; -			  width: 1rem; -			  height: 1rem; -		  } -		  section ul { -			  list-style: none; -		  } +	<head> +		<meta charset="utf-8"> +		<link rel="stylesheet" href="/index.css"> +		<title>Physics for Games</title> +		<link rel="shortcut icon" href="favicon/favicon.ico" type="image/x-icon"> +	</head> +	<body> +		<header> +			<h1>Physics for Games</h1> +		</header> +		<main> +		<nav> +		<ul class="outer-tree"> +			<li><a href="/">Introduction</a></li> +			<li> +				<span>🏀<span>2D</span></span> +				<ul class="inner-tree"> +					<li><label>Rigidbody</label></li> +					<li><a href="/2d/_rigidbody/part_1.html">Linear Forces</a></li> +					<li><a href="/2d/_rigidbody/part_2.html">Rotational Forces</a></li> +					<li><a href="/2d/_rigidbody/part_3.html">Collision Forces</a></li> +					<li><label>Collisions</label></li> +					<li><a href="/2d/_collisions/circle_line.html">Circle-Line</a></li> +					<li><a href="/2d/_collisions/rectangle_line.html">Rectangle-Line</a></li> +					<li><a href="/2d/_collisions/rectangle_rectangle.html">Rectangle-Rectangle</a></li> +					<li><a href="/2d/_collisions/pill_line.html">Pill-Line</a></li> +					<li><a href="/2d/_collisions/pill_pill.html">Pill-Pill</a></li> +					<li><a href="/2d/_collisions/polygon_polygon.html">Polygon-Polygon</a></li> +				</ul> +			</li> +			<li> +				<span>🌠<span>3D</span></span> +				<ul class="inner-tree"> +				</ul> +			</li> +			<li> +				<span>🔧<span>WebAssembly</span></span> +				<ul class="inner-tree"> +					<li><a href="/intro/intro.html">Introduction</a></li> +				</ul> +			</li> +			<li> +				<span>🛈<span>About</span></span> +				<ul class="inner-tree"> +					<li><a href="/roadmap.html">Roadmap</a></li> +				</ul> +			</li> +		</ul> +		</nav> -		  section ul li:before { -			  content: '-'; -		  } +<style> +  section ul { +	  list-style: none; +	  padding-left: 0; +  } +  section li { +	  position: relative; +	  padding-left: 1.5em;  /* space to preserve indentation on wrap */ +  } +  section li:before { +	  content: ''; +	  position: absolute; +	  left: 0; +	  width: 1rem; +	  height: 1rem; +  } +  section ul { +	  list-style: none; +  } -		  .done { -			  color: lightgreen; -		  } +  section ul li:before { +	  content: '-'; +  } -		  .halfway { -			  color: orange; -		  } +  .done { +	  color: lightgreen; +  } -          .failed { -              color: red; -          } +  .halfway { +	  color: orange; +  } -		  section ul li.done:before { -			  content: '✓' -		  } +  .failed { +      color: red; +  } -		  section ul li.halfway:before { -			  content: '⚠' -		  } +  section ul li.done:before { +	  content: '✓' +  } -          section ul li.failed:before { -              content: '✗' -          } -		</style> -    </head> -    <body> -	  <header> -        <h1>Physics for Games</h1> -      </header> -	  <main> -		<nav></nav> -        <section> -          <h1>May/June 2021: More Collisions</h1> -          <ul> -            <li>SAT Collisions for Convex Polygons with Explanation</li> -            <li>Pill Collisions</li> -            <li>Remove (or hide) ellipse collision pages for now</li> -            <li>3D scene setup</li> -            <li>3D scene basic physics with spheres bouncing around a scene</li> -          </ul> -          <p style="color: pink; font-size: 18px;"> -			Obviously, the month of April did not go as planned. I got caught up with a number of tasks that I couldn't handle, -            namely, the pill collisions. These, as I discovered, were quite unfeasible and involved a lot of complex maths -            that I didn't quite yet understand. They are also unreasonable for game development's sake, so I will ditch that -            effort and focus on doing other things. This, of course, is not time entirely wasted, as I now I have a somewhat -            better understanding of why ellipses (and by extension ellipsoids, although I am not entirely sure of this). I should -            <i>instead</i> try to figure out the intersection using pills, not ellipses. Pills are simply 2D shapes made of a -            rectangle in the middle and two half-circles at either ends. This is a far less expensive collision to calculate. -            <br/> -            I also failed when it came to getting a good physics collision system going. This stemmed from a general misunderstanding -            of moment of inertia and how it can properly be implemented for each shape. I think I am getting a better grip on it now, -            however. -            <br /> -            And that brings me to May/June. I am combining these two months because I am quite busy in May with family stuff, -            and hence won't be able to give my full attention to the project. That being said, as a high-level goal, I hope to -            get some more 2D collisions going, and maybe move onto 3D fairly soon. For 3D, I would simply like to get the physics -            simulation up and running with simple objects (spheres, cubes, etc.). From there, I want to begin exploring more complex -            physics simulation topics like oct-trees, multiple collision resolution, etc. We will see what happens, but I am optimistic, -            so long as I stay the course. -		  </p> -        </section> -		<section> -		  <h1>April 2021: Ground Work and Initial Collisions</h1> -		  <ul> -			<li class="done">Orthographic rendering basics</li> -			<li class="done">Uniform build Process for WebAssembly</li> -			<li class="done">WASM Framework with simulation loop</li> -		  </ul> -		  <hr/> -		  <h1>2D Collisions with Descriptions</h1> -		  <ul> -			<li class="halfway">Ellipse-Line Collision</li> -			<li class="failed">Ellipse-Ellipse Collisions</li> -			<li class="failed">Ellipse-Circle Collisions</li> -			<li class="failed">Ellipse-Square Collisions</li> -			<li class="done">Rectangle-Line Collisions</li> -			<li class="halfway">Circle-Line Collisions (Redo)</li> -			<li class="failed">Rectangle-Circle Collision</li> -		  </ul> -		  <hr /> -		  <h1>Brief Wasm Series</h1> -		  <ul> -			<li class="halfway">Getting started with WASM docs</li> -			<li class="halfway">Wasm examples</li> -		  </ul> -		  <p style="color: pink; font-size: 18px;"> -			Everything above has a due date of <b>April 30th, 2021</b>. None of it is that hard, so this should be a very doable timeline. -		  </p> -		</section> -	  </main> +  section ul li.halfway:before { +	  content: '⚠' +  } + +  section ul li.failed:before { +      content: '✗' +  } +</style> +<article> +  <section> +    <h1>May/June 2021: More Collisions</h1> +    <ul> +      <li>SAT Collisions for Convex Polygons with Explanation</li> +      <li>Pill Collisions</li> +      <li>Remove (or hide) ellipse collision pages for now</li> +      <li>3D scene setup</li> +      <li>3D scene basic physics with spheres bouncing around a scene</li> +    </ul> +    <p style="font-size: 18px;"> +	  Obviously, the month of April did not go as planned. I got caught up with a number of tasks that I couldn't handle, +      namely, the pill collisions. These, as I discovered, were quite unfeasible and involved a lot of complex maths +      that I didn't quite yet understand. They are also unreasonable for game development's sake, so I will ditch that +      effort and focus on doing other things. This, of course, is not time entirely wasted, as I now I have a somewhat +      better understanding of why ellipses (and by extension ellipsoids, although I am not entirely sure of this). I should +      <i>instead</i> try to figure out the intersection using pills, not ellipses. Pills are simply 2D shapes made of a +      rectangle in the middle and two half-circles at either ends. This is a far less expensive collision to calculate. +      <br/><br/> +      I also failed when it came to getting a good physics collision system going. This stemmed from a general misunderstanding +      of moment of inertia and how it can properly be implemented for each shape. I think I am getting a better grip on it now, +      however. +      <br/><br/> +      And that brings me to May/June. I am combining these two months because I am quite busy in May with family stuff, +      and hence won't be able to give my full attention to the project. That being said, as a high-level goal, I hope to +      get some more 2D collisions going, and maybe move onto 3D fairly soon. For 3D, I would simply like to get the physics +      simulation up and running with simple objects (spheres, cubes, etc.). From there, I want to begin exploring more complex +      physics simulation topics like oct-trees, multiple collision resolution, etc. We will see what happens, but I am optimistic, +      so long as I stay the course. +	</p> +  </section> +  <hr/> +  <section> +	<h1>April 2021: Ground Work and Initial Collisions</h1> +	<ul> +	  <li class="done">Orthographic rendering basics</li> +	  <li class="done">Uniform build Process for WebAssembly</li> +	  <li class="done">WASM Framework with simulation loop</li> +	</ul> +	<h2>2D Collisions with Descriptions</h1> +	<ul> +	  <li class="halfway">Ellipse-Line Collision</li> +	  <li class="failed">Ellipse-Ellipse Collisions</li> +	  <li class="failed">Ellipse-Circle Collisions</li> +	  <li class="failed">Ellipse-Square Collisions</li> +	  <li class="done">Rectangle-Line Collisions</li> +	  <li class="halfway">Circle-Line Collisions (Redo)</li> +	  <li class="failed">Rectangle-Circle Collision</li> +	</ul> +	<h2>Brief Wasm Series</h1> +	<ul> +	  <li class="halfway">Getting started with WASM docs</li> +	  <li class="halfway">Wasm examples</li> +	</ul> +	<p style="color: pink; font-size: 18px;"> +	  Everything above has a due date of <b>April 30th, 2021</b>. None of it is that hard, so this should be a very doable timeline. +	</p> +  </section> +</article> +		</main>  	</body>  </html> diff --git a/roadmap.html.content b/roadmap.html.content new file mode 100644 index 0000000..5509dc8 --- /dev/null +++ b/roadmap.html.content @@ -0,0 +1,108 @@ + +<style> +  section ul { +	  list-style: none; +	  padding-left: 0; +  } +  section li { +	  position: relative; +	  padding-left: 1.5em;  /* space to preserve indentation on wrap */ +  } +  section li:before { +	  content: ''; +	  position: absolute; +	  left: 0; +	  width: 1rem; +	  height: 1rem; +  } +  section ul { +	  list-style: none; +  } + +  section ul li:before { +	  content: '-'; +  } + +  .done { +	  color: lightgreen; +  } + +  .halfway { +	  color: orange; +  } + +  .failed { +      color: red; +  } + +  section ul li.done:before { +	  content: '✓' +  } + +  section ul li.halfway:before { +	  content: '⚠' +  } + +  section ul li.failed:before { +      content: '✗' +  } +</style> +<article> +  <section> +    <h1>May/June 2021: More Collisions</h1> +    <ul> +      <li>SAT Collisions for Convex Polygons with Explanation</li> +      <li>Pill Collisions</li> +      <li>Remove (or hide) ellipse collision pages for now</li> +      <li>3D scene setup</li> +      <li>3D scene basic physics with spheres bouncing around a scene</li> +    </ul> +    <p style="font-size: 18px;"> +	  Obviously, the month of April did not go as planned. I got caught up with a number of tasks that I couldn't handle, +      namely, the pill collisions. These, as I discovered, were quite unfeasible and involved a lot of complex maths +      that I didn't quite yet understand. They are also unreasonable for game development's sake, so I will ditch that +      effort and focus on doing other things. This, of course, is not time entirely wasted, as I now I have a somewhat +      better understanding of why ellipses (and by extension ellipsoids, although I am not entirely sure of this). I should +      <i>instead</i> try to figure out the intersection using pills, not ellipses. Pills are simply 2D shapes made of a +      rectangle in the middle and two half-circles at either ends. This is a far less expensive collision to calculate. +      <br/><br/> +      I also failed when it came to getting a good physics collision system going. This stemmed from a general misunderstanding +      of moment of inertia and how it can properly be implemented for each shape. I think I am getting a better grip on it now, +      however. +      <br/><br/> +      And that brings me to May/June. I am combining these two months because I am quite busy in May with family stuff, +      and hence won't be able to give my full attention to the project. That being said, as a high-level goal, I hope to +      get some more 2D collisions going, and maybe move onto 3D fairly soon. For 3D, I would simply like to get the physics +      simulation up and running with simple objects (spheres, cubes, etc.). From there, I want to begin exploring more complex +      physics simulation topics like oct-trees, multiple collision resolution, etc. We will see what happens, but I am optimistic, +      so long as I stay the course. +	</p> +  </section> +  <hr/> +  <section> +	<h1>April 2021: Ground Work and Initial Collisions</h1> +	<ul> +	  <li class="done">Orthographic rendering basics</li> +	  <li class="done">Uniform build Process for WebAssembly</li> +	  <li class="done">WASM Framework with simulation loop</li> +	</ul> +	<h2>2D Collisions with Descriptions</h1> +	<ul> +	  <li class="halfway">Ellipse-Line Collision</li> +	  <li class="failed">Ellipse-Ellipse Collisions</li> +	  <li class="failed">Ellipse-Circle Collisions</li> +	  <li class="failed">Ellipse-Square Collisions</li> +	  <li class="done">Rectangle-Line Collisions</li> +	  <li class="halfway">Circle-Line Collisions (Redo)</li> +	  <li class="failed">Rectangle-Circle Collision</li> +	</ul> +	<h2>Brief Wasm Series</h1> +	<ul> +	  <li class="halfway">Getting started with WASM docs</li> +	  <li class="halfway">Wasm examples</li> +	</ul> +	<p style="color: pink; font-size: 18px;"> +	  Everything above has a due date of <b>April 30th, 2021</b>. None of it is that hard, so this should be a very doable timeline. +	</p> +  </section> +</article> @@ -1 +1 @@ -rsync -a frontend/ root@physicsforgames.com:/var/www/physicsforgames +rsync -a ./ root@physicsforgames.com:/var/www/physicsforgames | 
