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

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.

主站蜘蛛池模板: 兴海县| 克拉玛依市| 区。| 虹口区| 林甸县| 八宿县| 万源市| 惠东县| 公安县| 衡水市| 乡城县| 邵阳市| 扎鲁特旗| 喀喇| 辽中县| 邻水| 承德县| 梓潼县| 五河县| 内丘县| 巢湖市| 乐业县| 南和县| 额尔古纳市| 鹤山市| 贺兰县| 高清| 东阿县| 叙永县| 江源县| 威海市| 贺州市| 全椒县| 成武县| 获嘉县| 榆树市| 卢湾区| 丰城市| 宝应县| 永春县| 宁波市|