官术网_书友最值得收藏!

Vector reflection

Vector reflection can mean one of two things: a mirror-like reflection or a bounce-like reflection. The following figure shows the different types of reflections:

Figure 2.8: A comparison of the mirror and bounce reflections

Figure 2.8: A comparison of the mirror and bounce reflections

The bounce reflection is more useful and intuitive than the mirror reflection. To make a bounce projection work, project vector A onto vector B. This will yield a vector that points in the opposite direction to the reflection. Negate this projection and subtract it twice from vector A. The following figure demonstrates this:

Figure 2.9: Visualizing a bounce reflection

Figure 2.9: Visualizing a bounce reflection

Implement the reflect function in vec3.cpp. Don't forget to add the function declaration to vec3.h:

vec3 reflect(const vec3 &a, const vec3 &b) {

    float magBSq = len(b);

    if (magBSq < VEC3_EPSILON) {

        return vec3();

    }

    float scale = dot(a, b) / magBSq;

    vec3 proj2 = b * (scale * 2);

    return a - proj2;

}

Vector reflection is useful for physics and AI. We won't need to use reflection for animation, but it's good to have the function implemented in case it is needed.

主站蜘蛛池模板: 永安市| 宜良县| 海宁市| 民丰县| 合山市| 防城港市| 九江市| 湘乡市| 镇赉县| 民丰县| 西林县| 扶风县| 汉阴县| 张北县| 太湖县| 琼结县| 冀州市| 句容市| 洪江市| 西城区| 林芝县| 德清县| 马关县| 金湖县| 佛学| 调兵山市| 沙田区| 茌平县| 禹城市| 郴州市| 呼和浩特市| 香河县| 浙江省| 巴中市| 贡山| 葫芦岛市| 卢氏县| 灵山县| 吴桥县| 平阳县| 高淳县|