[Day 33] 再访碰撞侦测与解析(五) - Debug Ray vs Rect (二)

今日目标

  • 继续Debug Ray vs Rect的部分

MISSION FAILED!

QAQ 今天又很晚下班了 只有单纯的把昨天的部分再抄一遍,但还是理解不能....,目前我先测试上传了,可能要到假日有时间再来理解可能会比较好,脑袋会比较清楚,然後这是我原本写的,很乱,目前比较看不出问题在哪>

            ray_dir = V2F_ZERO;
            contact_point = V2F_ZERO;
            contact_norm = V2F_ZERO;
            hit_near = false;
            is_hit = true;

            ray_dir = V2fSub(end_point, start_point);

            V2f min_pos = obstacle.pos;
            V2f near = V2fSub(min_pos, start_point);
            near.x /= ray_dir.x;
            near.y /= ray_dir.y;

            V2f max_pos = { obstacle.pos.x + obstacle.rec.w, obstacle.pos.y + obstacle.rec.h };
            V2f far = V2fSub( max_pos, start_point);
            far.x /= ray_dir.x;
            far.y /= ray_dir.y;

            if (near.x > far.x) {
                float tmp = near.x;
                near.x = far.x;
                far.x = tmp;
            }

            if (near.y > far.y) {
                float tmp = near.y;
                near.y = far.y;
                far.y = tmp;
            }

            if (near.x > far.y || near.y > far.x) {
                is_hit = false;
            }

            if (near.x > near.y) {
                hit_near = near.x;
            } else {
                hit_near = near.y;
            }

            contact_point = V2fAdd(V2fScalef(ray_dir, hit_near), start_point);

            if (near.x > near.y) {
                if (ray_dir.x < 0.0f) {
                    contact_norm.x = 1.0f;
                    contact_norm.y = 0.0f;
                } else {
                    contact_norm.x = -1.0f;
                    contact_norm.y = 0.0f;
                }
            } else if (near.x < near.y) {
                if (ray_dir.x < 0.0f) {
                    contact_norm.x = 0.0f;
                    contact_norm.y = -1.0f;
                } else {
                    contact_norm.x = 0.0f;
                    contact_norm.y = 1.0f;
                }
            }

            if (hit_near > 1.0f) {
                is_hit = false;
            }

参考 抄自


<<:  DAY 28 - 殭屍女孩 (1)

>>:  Day29 React - Styled-Components

Day27 用於AR的3D物件制作过程,一路凄凄惨惨惨惨凄凄

制作自己的AR有很多种方式,但首先要先做个3D模型出来,网路上有很多可以用来制作3D模型的程序,有看...

Day4 - 几何抽象

目前近几年的不管是唱片 演唱会 线上设计风格开始走向几何风格形象 金曲30很美的背景设计 gerne...

[Day1] 简单介绍 Google Assistant 语音应用程序

大家好,我是Hank。 目前就读於台科大资工所的研究生。 很高兴有机会向大家分享我在开发Google...

马可夫模型

马可夫模型 (Markov Model) 会用来表达状态以及转移机率及它们的随机过程使用的模型,或许...

[Day28] Security

在网路世界中,安全永远是最最重要的事情,而云端安全当然也不例外。任何的安全问题都来自於人为的疏忽,部...