<HTML> <HEAD> <TITLE>faceforward</TITLE> <STYLE TYPE="text/css" MEDIA=screen> <!-- BODY { font-family: Arial,Helvetica; } BLOCKQUOTE { margin: 10pt; } H1,A { color: #336699; } /*** Top menu style ****/ .mmenuon { font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; color: #ff6600; font-size: 10pt; } .mmenuoff { font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; color: #ffffff; font-size: 10pt; } .cpyright { font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; color: #ffffff; font-size: xx-small; } .cpyrightText { font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; color: #ffffff; font-size: xx-small; } .sections { font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; color: #336699; font-size: 11pt; } .dsections { font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; color: #336699; font-size: 12pt; } .slink { font-family: Arial,Helvetica; font-weight: normal; text-decoration: none; color: #336699; font-size: 9pt; } .slink2 { font-family: Arial,Helvetica; text-decoration: none; color: #336699; } .maintitle { font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; color: #336699; font-size: 18pt; } .dblArrow { font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; color: #336699; font-size: small; } .menuSec { font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; color: #336699; font-size: small; } .newstext { font-family: Arial,Helvetica; font-size: small; } .linkmenu { font-family: Arial,Helvetica; color: #000000; font-weight: bold; text-decoration: none; } P { font-family: Arial,Helvetica; } PRE { font-family: monospace; white-space: pre; font-color: #333333; font-weight: 100; background-color: #eeeeee; padding: 5px; width: 90%; border-style: solid; border-width: 2px; border-color: #bebebe; } .quote { font-family: Times; text-decoration: none; color: #000000; font-size: 9pt; font-style: italic; } .smstd { font-family: Arial,Helvetica; color: #000000; font-size: x-small; } .std { font-family: Arial,Helvetica; color: #000000; } .meerkatTitle { font-family: sans-serif; font-size: x-small; color: black; } .meerkatDescription { font-family: sans-serif; font-size: 10pt; color: black } .meerkatCategory { font-family: sans-serif; font-size: 9pt; font-weight: bold; font-style: italic; color: brown; } .meerkatChannel { font-family: sans-serif; font-size: 9pt; font-style: italic; color: brown; } .meerkatDate { font-family: sans-serif; font-size: xx-small; color: #336699; } .tocTitle { font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; color: #333333; font-size: 10pt; } .toc-item { font-family: Arial,Helvetica; font-weight: bold; color: #336699; font-size: 10pt; text-decoration: underline; } .perlVersion { font-family: Arial,Helvetica; font-weight: bold; color: #336699; font-size: 10pt; text-decoration: none; } .docTitle { font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; color: #000000; font-size: 10pt; } .dotDot { font-family: Arial,Helvetica; font-weight: bold; color: #000000; font-size: 9pt; } .docSec { font-family: Arial,Helvetica; font-weight: normal; color: #333333; font-size: 9pt; } .docVersion { font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; color: #336699; font-size: 10pt; } .docSecs-on { font-family: Arial,Helvetica; font-weight: normal; text-decoration: none; color: #ff0000; font-size: 10pt; } .docSecs-off { font-family: Arial,Helvetica; font-weight: normal; text-decoration: none; color: #333333; font-size: 10pt; } h3 { font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; color: #336699; font-size: small; } h2 { font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; color: #336699; font-size: medium; } h1 { font-family: Verdana,Arial,Helvetica; font-weight: bold; text-decoration: none; color: #336699; font-size: large; } DL { font-family: Arial,Helvetica; font-weight: normal; text-decoration: none; color: #333333; font-size: 10pt; } UL > LI > A { font-family: Arial,Helvetica; font-weight: bold; color: #336699; font-size: 10pt; } .moduleInfo { font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; color: #333333; font-size: 11pt; } .moduleInfoSec { font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; color: #336699; font-size: 10pt; } .moduleInfoVal { font-family: Arial,Helvetica; font-weight: normal; text-decoration: underline; color: #000000; font-size: 10pt; } .cpanNavTitle { font-family: Arial,Helvetica; font-weight: bold; color: #ffffff; font-size: 10pt; } .cpanNavLetter { font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; color: #333333; font-size: 9pt; } .cpanCat { font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; color: #336699; font-size: 9pt; } --> </STYLE> </HEAD> <BODY> <object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> </object> <BLOCKQUOTE> <H1><A NAME="NAME"><A NAME="1">NAME </A></A></H1> <P> <B>faceforward</B> - returns a normal as-is if a vertex's eye-space position vector points in the opposite direction of a geometric normal, otherwise return the negated version of the normal </P> <H1><A NAME="SYNOPSIS"><A NAME="2">SYNOPSIS </A></A></H1> <PRE> float faceforward(float N, float I, float Ng); float1 faceforward(float1 N, float1 I, float1 Ng); float2 faceforward(float2 N, float2 I, float2 Ng); float3 faceforward(float3 N, float3 I, float3 Ng); float4 faceforward(float4 N, float4 I, float4 Ng); half faceforward(half N, half I, half Ng); half1 faceforward(half1 N, half1 I, half1 Ng); half2 faceforward(half2 N, half2 I, half2 Ng); half3 faceforward(half3 N, half3 I, half3 Ng); half4 faceforward(half4 N, half4 I, half4 Ng); fixed faceforward(fixed N, fixed I, fixed Ng); fixed1 faceforward(fixed1 N, fixed1 I, fixed1 Ng); fixed2 faceforward(fixed2 N, fixed2 I, fixed2 Ng); fixed3 faceforward(fixed3 N, fixed3 I, fixed3 Ng); fixed4 faceforward(fixed4 N, fixed4 I, fixed4 Ng); </PRE> <H1><A NAME="PARAMETERS"><A NAME="3">PARAMETERS </A></A></H1> <DL> <DT><STRONG>N </STRONG></DT> <DD> <P> Peturbed normal vector. </P> <DT><STRONG>I </STRONG></DT> <DD> <P> Incidence vector (typically a direction vector from the eye to a vertex). </P> <DT><STRONG>Ng </STRONG></DT> <DD> <P> Geometric normal vector (for some facet the peturbed normal belongs). </P> </DD></DL> <H1><A NAME="DESCRIPTION"><A NAME="4">DESCRIPTION </A></A></H1> <P> Returns a (peturbed) normal as-is if a vertex's eye-space position vector points in the opposite direction of a geometric normal, otherwise return the negated version of the (peturbed) normal </P> <P> Mathematically, if the dot product of <I>I</I> and <I>Ng</I> is negative, <I>N</I> is returned unchanged; otherwise -<I>N</I> is returned. </P> <P> This function is inspired by a RenderMan funciton of the same name though the RenderMan version has only two parameters. </P> <H1><A NAME="REFERENCE_IMPLEMENTATION"><A NAME="5">REFERENCE IMPLEMENTATION </A></A></H1> <P> <B>faceforward</B> for <B>float3</B> vectors could be implemented this way: </P> <PRE> float3 faceforward( float3 N, float3 I, float Ng ) { return dot(I, Ng) < 0 ? N : -N; } </PRE> <H1><A NAME="PROFILE_SUPPORT"><A NAME="6">PROFILE SUPPORT </A></A></H1> <P> <B>refract</B> is supported in all profiles. </P> <H1><A NAME="SEE_ALSO"><A NAME="7">SEE ALSO </A></A></H1> <P> <A HREF="dot.html"><I>dot</I></A>, <A HREF="reflect.html"><I>reflect</I></A>, <A HREF="refract.html"><I>refract</I></A>, <A HREF="normalize.html"><I>normalize</I></A> </P> </BLOCKQUOTE> </BODY>