OBD:PLEA: Difference between revisions
Jump to navigation
Jump to search
(duh) |
m (oops) |
||
(9 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
{{OBD_File_Header | {{OBD_File_Header | type=PLEA | prev=OTLF | next=PNTA | name=Plane Equation Array | family=Level | align=center}} | ||
{ | [[image:plea_a.gif]] | ||
| | {{Table}} | ||
{{OBDth}} | |||
{{OBDtr| 0x00 | res_id |FF0000| 01 41 02 00 | 577 | 00577-.PLEA }} | |||
{{OBDtr| 0x04 | lev_id |FFFF00| 01 00 00 06 | 3 | level 3 }} | |||
{{OBDtr| 0x08 | char[20] |00FF00| AD DE | dead | unused }} | |||
{{OBDtr| 0x1C | int32 |00FFFF| 03 00 00 00 | 13554 | array size }} | |||
| 577 | {{OBDtrBK}} | ||
{{OBDtr| 0x00 | float |FFC8C8| 00 00 00 00 | 0.000000 | 'a' coefficient of the plane equation (x component of plane's normal) }} | |||
| | {{OBDtr| 0x04 | float |FFFFC8| 00 00 00 00 | 0.000000 | 'b' coefficient of the plane equation (y component of plane's normal) }} | ||
| | {{OBDtr| 0x08 | float |C8FFC8| 00 00 80 3F | 1.000000 | 'c' coefficient of the plane equation (z component of plane's normal) }} | ||
| 3 | {{OBDtr| 0x0C | float |C8FFFF| 00 00 19 44 |612.000000| 'd' coefficient of the plane equation }} | ||
| | |||
| | |||
| dead | |||
| | |||
| | |||
| | |||
| 13554 | |||
| | |||
| | |||
| | |||
| 0.000000 | |||
| | |||
| | |||
| 0.000000 | |||
| | |||
| | |||
| | |||
| 1.000000 | |||
| | |||
| | |||
| 612.000000 | |||
|} | |} | ||
;Plane equation | ;Plane equation | ||
:The canonical equation for a [ | :The canonical equation for a [https://mathworld.wolfram.com/Plane.html plane] in 3D is | ||
::a * x + b * y + c * z + d = 0 | ::'''a * x + b * y + c * z + d = 0,''' | ||
: | :with (a, b, c, d) being 4 real numbers and (a, b, c) forming a nonzero vector (the plane's "normal"). | ||
: | :*The set of points (x, y, z) verifying '''a * x + b * y + c * z + d = 0''' are said to be in the plane or at the plane. | ||
:*The set of points (x, y, z) verifying '''a * x + b * y + c * z + d > 0''' are said to be in front of the plane. | |||
: | :*The set of points (x, y, z) verifying '''a * x + b * y + c * z + d < 0''' are said to be behind the plane. | ||
: | :'''N.B.''' If a=b=c=0, then the equation is degenerate and applies either to the whole space (if d=0) or to no points at all (if d is non-zero). | ||
:As a further convention, if (a,b,c) is normalized at unit length (i.e., '''a*a + b*b + c*c = 1''') then d is the distance from the plane to the world's origin, along the normal vector. | |||
:The four floats in each element of a PLEA are exactly the (a, b, c, d) of the above definition. | |||
:In the above example, the first element defines the plane (0 * x + 0 * y + 1 * z + 612 = 0), i.e., the vertical plane z = -612. | |||
;What planes are for and how they are referenced | |||
:Planes are used for environment culling, collision detection and [[wikipedia:Binary_space_partitioning|BSP]]. | |||
:The plane equations stored in PLEA are referenced from such data as [[ABNA]], [[AKBP]], [[AKBA]] and [[AGQC]] by means of a 32-bit array index. | |||
:However, the high bit of those 32-bit references is not part of the array index, instead it indicates whether the facing of the plane should be flipped. | |||
:*If the high bit is not set, then the 4 values (a, b, c, d) are used as described above.<br />(If referencing the above example without a high bit, then any points with z > - 612 will be in front of the plane, whereas points with z < -612 will be behind the plane.) | |||
:*If the high bit is set, then the plane equation coefficients become (-a, -b, -c, -d).<br />(If referencing the above example with a high bit, then any point with z > - 612 will be behind the plane, whereas points with z < -612 will be in front of the plane.) | |||
:This means that the actual array index is a 31-bit value (i.e., there can "only" be up to 2,147,483,648 distinct planes in a level), but the same array element can be used for two different facing directions. | |||
{{OBD_File_Footer | type=PLEA | prev=OTLF | next=PNTA | name=Plane Equation Array | family=Level}} | |||
{{OBD}} | |||
{{ |
Latest revision as of 15:02, 24 January 2022
|
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x00 | res_id | 01 41 02 00 | 577 | 00577-.PLEA |
0x04 | lev_id | 01 00 00 06 | 3 | level 3 |
0x08 | char[20] | AD DE | dead | unused |
0x1C | int32 | 03 00 00 00 | 13554 | array size |
First element (black outline) | ||||
0x00 | float | 00 00 00 00 | 0.000000 | 'a' coefficient of the plane equation (x component of plane's normal) |
0x04 | float | 00 00 00 00 | 0.000000 | 'b' coefficient of the plane equation (y component of plane's normal) |
0x08 | float | 00 00 80 3F | 1.000000 | 'c' coefficient of the plane equation (z component of plane's normal) |
0x0C | float | 00 00 19 44 | 612.000000 | 'd' coefficient of the plane equation |
- Plane equation
- The canonical equation for a plane in 3D is
- a * x + b * y + c * z + d = 0,
- with (a, b, c, d) being 4 real numbers and (a, b, c) forming a nonzero vector (the plane's "normal").
- The set of points (x, y, z) verifying a * x + b * y + c * z + d = 0 are said to be in the plane or at the plane.
- The set of points (x, y, z) verifying a * x + b * y + c * z + d > 0 are said to be in front of the plane.
- The set of points (x, y, z) verifying a * x + b * y + c * z + d < 0 are said to be behind the plane.
- N.B. If a=b=c=0, then the equation is degenerate and applies either to the whole space (if d=0) or to no points at all (if d is non-zero).
- As a further convention, if (a,b,c) is normalized at unit length (i.e., a*a + b*b + c*c = 1) then d is the distance from the plane to the world's origin, along the normal vector.
- The four floats in each element of a PLEA are exactly the (a, b, c, d) of the above definition.
- In the above example, the first element defines the plane (0 * x + 0 * y + 1 * z + 612 = 0), i.e., the vertical plane z = -612.
- What planes are for and how they are referenced
- Planes are used for environment culling, collision detection and BSP.
- The plane equations stored in PLEA are referenced from such data as ABNA, AKBP, AKBA and AGQC by means of a 32-bit array index.
- However, the high bit of those 32-bit references is not part of the array index, instead it indicates whether the facing of the plane should be flipped.
- If the high bit is not set, then the 4 values (a, b, c, d) are used as described above.
(If referencing the above example without a high bit, then any points with z > - 612 will be in front of the plane, whereas points with z < -612 will be behind the plane.) - If the high bit is set, then the plane equation coefficients become (-a, -b, -c, -d).
(If referencing the above example with a high bit, then any point with z > - 612 will be behind the plane, whereas points with z < -612 will be in front of the plane.)
- If the high bit is not set, then the 4 values (a, b, c, d) are used as described above.
- This means that the actual array index is a 31-bit value (i.e., there can "only" be up to 2,147,483,648 distinct planes in a level), but the same array element can be used for two different facing directions.
ONI BINARY DATA |
---|
OTLF << Other file types >> PNTA |
PLEA : Plane Equation Array |
Level file |