A3DGraphMaterialData
Fields
Detailed Description
-
struct A3DGraphMaterialData
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.
- Version
2.0
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_uiSpecular
,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.
These properties are used within graphical applications to simulate shading, such as with Gouraud or Phong.
Lights are represented using red-green-blue (RGB) color codes. Within
A3DGraphMaterialData
these colors are indexed into a global state and can be queried using their respective indexes andA3DGlobalGetGraphRgbColorData
. The following code retrieves the diffuse color frommaterial
, 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 associatedA3DGraphMaterialData
instance. For example, physically-based rendering is implemented in HOOPS using generic attriutes. To obtain these attributes, useA3DMiscPointerFromIndexGet
instead which returns the underlyingA3DSDKRootEntity
instance.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);
A3DRootBaseData
instance.- 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 them_ucTransparency
member inA3DGraphStyleData
.A3DGraphMaterialData
stores the additional alpha channels in separateA3DDouble
members. As for color channels, they range from 0.0 to 1.0.- Material Attributes
Public Members