• R/O
  • SSH
  • HTTPS

Commit

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

X operations(XOPS)に非常に近いFPSゲームを制作・リメイクし、成果物をオープンソースとして公開することを目的としたプロジェクトです。


Commit MetaInfo

Revision143 (tree)
Zeit2016-08-23 01:34:08
Autorxops-mikan

Log Message

円柱とレイの当たり判定が、特定の角度で正しく行われないバグの修正。(弾と人の当たり判定に影響があった)

Ändern Zusammenfassung

Diff

--- trunk/collision.cpp (revision 142)
+++ trunk/collision.cpp (revision 143)
@@ -1124,6 +1124,7 @@
11241124 {
11251125 float x, z, d;
11261126 float cMinDist, cRayDist, cRDist;
1127+ float RayXZ_min, RayXZ_max;
11271128 float Ray_min[2];
11281129 float Ray_max[2];
11291130 float Ray_tmin, Ray_tmax;
@@ -1148,10 +1149,10 @@
11481149 cRDist = sqrt(c_r*c_r - cMinDist*cMinDist); //(点半径から)点に最も近づく距離
11491150
11501151 if( d < c_r ){
1151- Ray_min[0] = 0; //始点が円の中なら距離ゼロ
1152+ RayXZ_min = 0; //始点が円の中なら距離ゼロ
11521153 }
11531154 else{
1154- Ray_min[0] = cRayDist - cRDist; //レイ視点最短 - 半径最短 = レイ視点から半径までの最短
1155+ RayXZ_min = cRayDist - cRDist; //レイ視点最短 - 半径最短 = レイ視点から半径までの最短
11551156 }
11561157
11571158 //点とレイ終点の距離
@@ -1160,13 +1161,18 @@
11601161 d = sqrt(x*x + z*z);
11611162
11621163 if( d < c_r ){
1163- Ray_max[0] = maxDist; //終点が円の中なら最大距離
1164+ RayXZ_max = maxDist; //終点が円の中なら最大距離
11641165 }
11651166 else{
1166- Ray_max[0] = cRayDist + cRDist;
1167+ RayXZ_max = cRayDist + cRDist;
11671168 }
11681169
1170+ //Y軸と比べる前に、Y軸と比較できるよう変換 (底辺の値を斜辺へ変換)
1171+ float Ray_ry = atan2(RayDir_y, sqrt(RayDir_x*RayDir_x + RayDir_z*RayDir_z));
1172+ Ray_min[0] = RayXZ_min / cos(Ray_ry);
1173+ Ray_max[0] = RayXZ_max / cos(Ray_ry);
11691174
1175+
11701176 //Y軸のみAABBと同様の処理
11711177
11721178 if( ( (RayPos_y < c_y)||((c_y+c_h) < RayPos_y) )&&(RayDir_y == 0.0f) ){