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;
}