Back to the OpenGL extension cross reference

GL_ARB_point_parameters


Name


    ARB_point_parameters

Name Strings


    GL_ARB_point_parameters

Contact


    Michael Gold, NVIDIA (gold 'at' nvidia.com)

Status


    Approved by the ARB, 21 June 2000.

Version


    Revision Date: March 12, 2002
Version: 0.5

Based on: EXT_point_parameters
$Date: 1997/08/21 21:26:36 $ $Revision: 1.6 $

Number


    ARB Extension #14

Dependencies


    OpenGL 1.0 is required.
ARB_multisample affects the definition of this extension.
The extension is written against the OpenGL 1.2.1 Specification.

Overview


    This extension supports additional geometric characteristics of
points. It can be used to render particles or tiny light sources,
commonly referred to as "Light points".

The raster brightness of a point is a function of the point area,
point color, point transparency, and the response of the display's
electron gun and phosphor. The point area and the point transparency
are derived from the point size, currently provided with the <size>
parameter of glPointSize.

The primary motivation is to allow the size of a point to be
affected by distance attenuation. When distance attenuation has an
effect, the final point size decreases as the distance of the point
from the eye increases.

The secondary motivation is a mean to control the mapping from the
point size to the raster point area and point transparency. This is
done in order to increase the dynamic range of the raster brightness
of points. In other words, the alpha component of a point may be
decreased (and its transparency increased) as its area shrinks below
a defined threshold.

This extension defines a derived point size to be closely related to
point brightness. The brightness of a point is given by:

1
dist_atten(d) = -------------------
a + b * d + c * d^2

brightness(Pe) = Brightness * dist_atten(|Pe|)

where 'Pe' is the point in eye coordinates, and 'Brightness' is some
initial value proportional to the square of the size provided with
PointSize. Here we simplify the raster brightness to be a function
of the rasterized point area and point transparency.

brightness(Pe) brightness(Pe) >= Threshold_Area
area(Pe) =
Threshold_Area Otherwise

factor(Pe) = brightness(Pe)/Threshold_Area

alpha(Pe) = Alpha * factor(Pe)

where 'Alpha' comes with the point color (possibly modified by
lighting).

'Threshold_Area' above is in area units. Thus, it is proportional to
the square of the threshold provided by the programmer through this
extension.

The new point size derivation method applies to all points, while
the threshold applies to multisample points only.

IP Status


    None.

Issues


    * Does point alpha modification affect the current color ?

No.

* Do we need a special function GetPointParameterfvARB, or get by
with GetFloat ?

GetFloat is sufficient.

* If alpha is 0, then we could toss the point before it reaches the
fragment stage.

No. This can be achieved with enabling the alpha test with
reference of 0 and function of LEQUAL.

* Do we need a disable for applying the threshold ? The default
threshold value is 1.0. It is applied even if the point size is
constant.

If the default threshold is not overridden, the area of
multisample points with provided constant size of less than 1.0,
is mapped to 1.0, while the alpha component is modulated
accordingly, to compensate for the larger area. For multisample
points this is not a problem, as there are no relevant
applications yet. As mentioned above, the threshold does not apply
to alias or antialias points.

The alternative is to have a disable of threshold application, and
state that threshold (if not disabled) applies to non antialias
points only (that is, alias and multisample points).

The behavior without an enable/disable looks fine.

* Future extensions (to the extension)

1. POINT_FADE_ALPHA_CLAMP_ARB

When the derived point size is larger than the threshold size
defined by the POINT_FADE_THRESHOLD_SIZE_ARB parameter, it might
be desired to clamp the computed alpha to a minimum value, in
order to keep the point visible. In this case the formula below
change:

factor = (derived_size/threshold)^2

factor clamp <= factor
clamped_value =
clamp factor < clamp

1.0 derived_size >= threshold
alpha *=
clamped_value Otherwise

where clamp is defined by the POINT_FADE_ALPHA_CLAMP_ARB new
parameter.

New Procedures and Functions


    void PointParameterfARB(enum pname,
float param);
void PointParameterfvARB(enum pname,
float *params);

New Tokens


    Accepted by the <pname> parameter of PointParameterfARB, and the
<pname> of Get:

POINT_SIZE_MIN_ARB
POINT_SIZE_MAX_ARB
POINT_FADE_THRESHOLD_SIZE_ARB

Accepted by the <pname> parameter of PointParameterfvARB, and the
<pname> of Get:

POINT_SIZE_MIN_ARB 0x8126
POINT_SIZE_MAX_ARB 0x8127
POINT_FADE_THRESHOLD_SIZE_ARB 0x8128
POINT_DISTANCE_ATTENUATION_ARB 0x8129

Additions to Chapter 2 of the OpenGL 1.2.1 Specification (OpenGL Operation)


    None

Additions to Chapter 3 of the OpenGL 1.2.1 Specification (Rasterization)


    In section 3.3, the following is inserted after the description of
PointSize:

The point size is multiplied with a distance attenuation factor
and clamped as follows:

derived_size = Clamp(size * sqrt(dist_atten(dist)))

where dist_atten is specified as

1
dist_atten(d) = -------------------
a + b * d + c * d^2

and 'd' is the eye-coordinate distance from the eye, (0, 0, 0, 1) in
eye coordinates, to the vertex.

The derived point size is clamped to a given range, and then
clamped to the implementation-dependent point size range.

If multisampling is enabled, an implementation may optionally fade
the point alpha (section 3.12) instead of allowing the size to go
below a given threshold. In this case, the diameter of the
rasterized point is

derived_size derived_size >= threshold
diameter =
threshold Otherwise

and the fade factor is computed as follows:

1 derived_size >= threshold
fade =
(derived_size/threshold)^2 Otherwise

The distance attenuation function coefficients, 'a', 'b', and 'c',
the bounds of the clamp, and the point fade 'threshold', are
specified with

void PointParameterfARB( enum pname, float param );
void PointParameterfvARB( enum pname, const float *params );

If <pname> is POINT_SIZE_MIN_ARB or POINT_SIZE_MAX_ARB, then
<param> specifies, or <params> points to the lower or upper bound
respectively on the derived point size. If the lower bound is
greater than the upper bound, the resulting point size is
undefined. If <pname> is POINT_DISTANCE_ATTENUATION_ARB, then
<params> points to the coefficients 'a', 'b', and 'c'. If <pname>
is POINT_FADE_THRESHOLD_SIZE_ARB, <param> specifies, or <params>
points to the point fade threshold.

This extension doesn't change the feedback or selection behavior of
points.

In section 3.11, the word "Finally" is removed from the first
sentence.

Add the following after section 3.11.

Section 3.12 Multisample Point Fade

If multisampling is enabled and the rasterized fragment results
from a point primitive, then the computed fade factor is applied
to the fragment. In RGBA mode, the fade factor is multiplied by
the fragment's alpha (A) value to yield a final alpha value. In
color index mode, the fade factor has no effect.

Additions to Chapter 4 of the OpenGL 1.2.1 Specification (Per-Fragment Operations and the Frame Buffer)


    None

Additions to Chapter 5 of the OpenGL 1.2.1 Specification (Special Functions)


    None

Additions to Chapter 6 of the OpenGL 1.2.1 Specification (State and State Requests)


    None

Additions to Appendix A of the OpenGL 1.2.1 Specification (Invariance)


    None

Additions to the GLX / WGL / AGL Specifications


    None

GLX Protocol


    Two new GL rendering commands are added. The following commands are
sent to the server as part of a glXRender request:

PointParameterfARB
2 8+4*n rendering command length
2 2065 rendering command opcode
4 ENUM pname
0x8126 n=1 POINT_SIZE_MIN_ARB
0x8127 n=1 POINT_SIZE_MAX_ARB
0x8128 n=1 POINT_FADE_THRESHOLD_SIZE_ARB
4 FLOAT32 param

PointParameterfvARB
2 8+4*n rendering command length
2 2066 rendering command opcode
4 ENUM pname
0x8126 n=1 POINT_SIZE_MIN_ARB
0x8127 n=1 POINT_SIZE_MAX_ARB
0x8128 n=1 POINT_FADE_THRESHOLD_SIZE_ARB
0x8129 n=3 POINT_DISTANCE_ATTENUATION_ARB
4*n LISTofFLOAT32 params

Dependencies on ARB_multisample


    If ARB_multisample is not implemented, then the references to
multisample points are invalid, and should be ignored.

Errors


    INVALID_ENUM is generated if PointParameterfARB parameter <pname> is
not POINT_SIZE_MIN_ARB, POINT_SIZE_MAX_ARB, or
POINT_FADE_THRESHOLD_SIZE_ARB.

INVALID_ENUM is generated if PointParameterfvARB parameter <pname>
is not POINT_SIZE_MIN_ARB, POINT_SIZE_MAX_ARB,
POINT_FADE_THRESHOLD_SIZE_ARB, or POINT_DISTANCE_ATTENUATION_ARB

INVALID_VALUE is generated when values are out of range according
to:

<pname> valid range
-------- -----------
POINT_SIZE_MIN_ARB >= 0
POINT_SIZE_MAX_ARB >= 0
POINT_FADE_THRESHOLD_SIZE_ARB >= 0


New State


(table 6.11, p. 201)
Initial
Get Value Type Get Command Value Description Sec. Attribute
--------- ---- ----------- ------- ----------- ---- ---------
POINT_SIZE_MIN_ARB R+ GetFloatv 0.0 Attenuated 3.3 point
Min point
size

POINT_SIZE_MAX_ARB R+ GetFloatv M Attenuated 3.3 point
Max point
size

POINT_FADE_THRESHOLD_SIZE_ARB R+ GetFloatv 1.0 Threshold 3.3 point
for alpha
attenuation

POINT_DISTANCE_ATTENUATION_ARB 3xR GetFloatv (1.0,0.0,0.0) 3.3 point
Attenuation
coefficients

M is the larger of the max antialiased and non antialiased point
sizes.

New Implementation Dependent State


    None

Revision History


    11/09/1999	0.1
- First ARB draft based on the original SGI and EXT drafts.

12/07/1999 0.2
- clarified behavior when POINT_SIZE_MIN exceeds POINT_SIZE_MAX
- clarified when the point size is clamped to the supported range
- removed issues from "Errors" section
- fixed various typos
- Updated to new extension template
- added GLX protocol

04/20/2000 0.3
- rewritten to fit within the context of the 1.2 specification
- added language describing where the fade alpha is applied.
- added language which indicates that some implementations may not
implement POINT_FADE_THRESHOLD_SIZE_ARB

06/20/2000 0.4
- removed alternate behavior for fade alpha, since it is optional
- added new section describing fade alpha application

03/12/2002 0.5
- added GLX protocol for PointParameterfARB and assigned ropcodes

Implementation Support


   List of OpenGL implementations supporting the GL_ARB_point_parameters extension

Original File


   Original text file for the GL_ARB_point_parameters extension


Page generated on Sun Nov 20 18:35:59 2005