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

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.

主站蜘蛛池模板: 威宁| 兴义市| 石家庄市| 定州市| 息烽县| 凤山县| 拜城县| 民乐县| 兴山县| 张家港市| 抚松县| 大埔区| 凤城市| 田阳县| 桂林市| 纳雍县| 凯里市| 临清市| 衡东县| 天气| 武川县| 班戈县| 桓仁| 泰州市| 宝应县| 苏尼特左旗| 盐津县| 理塘县| 佛坪县| 二连浩特市| 望奎县| 西和县| 星座| 阿巴嘎旗| 东乡| 福贡县| 绩溪县| 沂水县| 山阴县| 平远县| 瓦房店市|