Material properties descriptor.
Material properties describes the behaviour of a surface to light emissions, allowing a 3D surface to be represented with realistic responses to light source emissions.
Basic lighting refers to the most standard lighting methods applied within 3D rendering applications, such as with classic OpenGL.
- Basic lighting
Basic material properties are:
Ambient lighting (
m_uiAmbient) is the light an object gives even in the absence of lighting environment.
Diffuse lighting (
m_uiDiffuse) relies on the surface orientation and light direction. It results in changes across the surface of an object.
Specular lighting (
m_uiEmissive) simulates the bright effect when a light hits an object and reflects back to the viewer. It relies on the surface and light properties as well ad the viewer’s position.
Emissive lighting (
m_dShininess) is the light which is emitted by an object, such as a light bulb. When an emissive light is used in a graphics scene, it is treated the same as a light source.
Lights are represented using red-green-blue (RGB) color codes. Within
A3DGraphMaterialDatathese colors are indexed into a global state and can be queried using their respective indexes and
A3DGlobalGetGraphRgbColorData. The following code retrieves the diffuse color from
material, assuming a light gray as default:
A3DGraphRgbColorData rgb_diffuse; A3D_INITIALIZE_DATA(A3DGraphRgbColorData, rgb_diffuse); rgb_diffuse.m_dRed = rgb_diffuse.m_dGreen = rgb_diffuse.m_dBlue = 0.75f; A3DStatus result = A3DGlobalGetGraphRgbColorData(material.m_uiDiffuse, &rgb_diffuse); assert(result == A3D_SUCCESS || result == A3D_DEFAULT_COLOR);
Most material instances are stored within the global state and identified using an index. It is then possible to retrieve the actual material content by calling
A3DGlobalGetGraphMaterialData. Like with any other entity, a material can be associated to metadata known as generic attributes. These attributes can hold any data and extend the capabilities of the associated
A3DGraphMaterialDatainstance. For example, physically-based rendering is implemented in HOOPS using generic attriutes. To obtain these attributes, use
A3DMiscPointerFromIndexGetinstead which returns the underlying
A3DSDKRootEntityinstance.Then the generic attributes can be browsed from the
// Retrieves the underlying entity of a globally stored material object using // its index `i`. A3DEntity* material_handle = 0; A3DStatus result = A3DMiscPointerFromIndexGet(i, kA3DTypeGraphMaterial, &material_handle); assert(result == A3D_SUCCESS); assert(material_handle != 0); A3DRootBaseData root_base; A3D_INITIALIZE_DATA(A3DRootBaseData, root_base) result = A3DRootBaseGet(material_handle, &root_base); assert(result == A3D_SUCCESS);
- Alpha component
Colors within HOOPS Exchange are three-components codes using
A3DGraphRgbColorData(red, green and blue). Most graphics implementations use a fourth component, alpha, which is typically used to hold per-channel transparency information. If you are interesed in transparency at material level, check out the
A3DGraphMaterialDatastores the additional alpha channels in separate
A3DDoublemembers. As for color channels, they range from 0.0 to 1.0.
- Material Attributes