Jump to content

OBD:PLEA: Difference between revisions

m
...
(duh)
m (...)
 
(10 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{OBD_File_Header|align=center|type=PLEA|prev=OTLF|next=PNTA|name=Plane Equation Array|family=Level|onistuff=plea}}
{{OBD_File_Header | type=PLEA | prev=OTLF | next=PNTA | name=Plane Equation Array | family=Level | align=center}}
----


http://www6.fh-eberswalde.de/user/dkriesch/onistuff/images/plea_a.gif


{|{{OBDtable}}
[[image:plea_a.gif]]
|align=center|
 
{|{{OBDtable}}
 
|-BGCOLOR="#FFDDBB"
{{Table}}
! WIDTH=15% | <B>Hex</B>
{{OBDth}}
! WIDTH=15% | <B>Translation</B>
{{OBDtr| 0x00 | res_id  |FF0000| 01 41 02 00 | 577   | 00577-.PLEA }}
! WIDTH=70% | <B>Meaning</B>
{{OBDtr| 0x04 | lev_id  |FFFF00| 01 00 00 06 | 3     | level 3 }}
|-
{{OBDtr| 0x08 | char[20] |00FF00| AD DE       | dead | padding }}
| BGCOLOR="#FF0000" | 01 41 02 00
{{OBDtr| 0x1C | uint32    |00FFFF| 03 00 00 00 | 13554 | array size }}
| 577
{{OBDtrBK}}
| ALIGN=LEFT | 00577-.PLEA
{{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) }}
| BGCOLOR="#FFFF00" | 01 00 00 06
{{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 }}
| ALIGN=LEFT | level 3
|-
| BGCOLOR="#00FF00" | AD DE
| dead
| ALIGN=LEFT | not used
|-
| BGCOLOR="#00FFFF" | F2 34 00 00
| 13554
| ALIGN=LEFT | 13554 packages follow (first package outlined in black)
|-
| BGCOLOR="#000000" COLSPAN=3 | <FONT COLOR="#FFFFFF">First package (i.e., plane equation) follows</FONT>
|-
| BGCOLOR="#FFC8C8" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | first coefficient of the plane equation
|-
| BGCOLOR="#FFFFC8" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | second coefficient of the plane equation
|-
| BGCOLOR="#C8FFC8" | 00 00 80 3F
| 1.000000
| ALIGN=LEFT | third coefficient of the plane equation
|-
| BGCOLOR="#C8FFFF" | 00 00 19 44
| 612.000000
| ALIGN=LEFT | fourth coefficient of the plane equation
|}
|}
|}
;Plane equation
;Plane equation
:The canonical equation for a [http://mathworld.wolfram.com/Plane.html plane] in 3D is :
: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,'''
:where (a, b, c, d) are 4 real numbers. The plane is the set of points (x, y, z) verifying that equation.
:with (a, b, c, d) being 4 real numbers and (a, b, c) forming a nonzero vector (the plane's "normal").
:It is likely that the four floats in one of a PLEA's packages are exactly the (a, b, c, d) of the above definition.
:*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.
::In that case, the first package of the above example defines the plane (0 * x + 0 * y + 1 * z + 612 = 0), i.e., the vertical plane z = -612.
:*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.
:It is possible, however, that the definition used is different, e.g. : a * x + b * y + c * z = d .
:*The set of points (x, y, z) verifying '''a * x + b * y + c * z + d < 0''' are said to be behind the plane.
::In that case, the first package of the above example defines the plane (0 * x + 0 * y + 1 * z = 612), i.e., the vertical plane z = 612.
:'''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}}
{{OBD_File_Footer|align=center|type=PLEA|prev=OTLF|next=PNTA|name=Plane Equation Array|family=Level|onistuff=plea}}
279

edits