mirror of
https://github.com/UberGames/GtkRadiant.git
synced 2024-11-10 06:31:41 +00:00
a36b39a62b
trunk. Branch Rambetter-math-fix-experiments can be deleted now. git-svn-id: svn://svn.icculus.org/gtkradiant/GtkRadiant/trunk@417 8a3a26a2-13c4-0310-b231-cf6edde360e5 |
||
---|---|---|
.. | ||
maps | ||
textures/radiant_regression_tests | ||
README.txt |
DESCRIPTION OF PROBLEM: ======================= The example map, maps/snap_plane.map, contains an example of some bugs. The green brush with the red face is transformed into something totally unexpected. To trigger the bug, compile the map; you don't need -vis or -light. Only -bsp (the first q3map2 stage) is necessary to trigger the bug. The only entities in the map are a light and a info_player_deathmatch, so the map will compile for any Q3 mod. SOLUTION TO PROBLEM: ==================== I actually came up with this regression test after reading the code to SnapPlane() and SnapNormal(). I decided to make this map as a test of whether or not I understand how the code is broken. Sure enough, the map is broken in the same way that I would expect it to be broken. The problem is that the red face of the green brush in the center of the room is very close to being axially aligned, but not quite. This plane will therefore be "snapped" to become axial. This is not the problem. The problem is that after the snap, the plane will be shifted a great deal, and the corner of the green brush will no longer come even close to meeting the corner of the other cube brush next to it (the two corners of the two brushes will drift apart a great deal). If you study the legacy SnapPlane() code, you will see that planes are defined as a unit normal and distance from origin. Well, because of the position of this brush on the side of the world extents (far from the original), the snap will cause drastic effects on the points that the plane was supposed to approximate. Another problem with SnapPlane() is that SnapNormal() snaps too liberally. Once SnapNormal() is changed to only snap normals that are REALLY close to axial (and not anything within 0.25 degrees), this bug will no longer appear, but the SnapPlane() problem will still be present. So, this regression test should be fixed BEFORE SnapNormal() is fixed, otherwise create another regression test with a red face that is much much closer to being axially aligned. We want to make sure that SnapPlane() is fixed when things actually do get snapped. The code to address these issues is currently being worked on.