fxi wirecapsule rotation

This commit is contained in:
DCFApixels 2025-10-12 21:56:13 +08:00
parent 2c376088a7
commit 5b64866ca4
3 changed files with 21 additions and 6 deletions

View File

@ -292,8 +292,7 @@ namespace DCFApixels
[IN(LINE)] [IN(LINE)]
private DrawHandler LineWireCapsule_Internal(Vector3 startPoint1, Vector3 startPoint2, Vector3 startCenter, Vector3 end, float radius) private DrawHandler LineWireCapsule_Internal(Vector3 startPoint1, Vector3 startPoint2, Vector3 startCenter, Vector3 end, float radius)
{ {
Quaternion rotation = Quaternion.LookRotation(startPoint2 - startPoint1, Vector3.up); Quaternion rotation = Quaternion.LookRotation(startPoint2 - startPoint1, Vector3.up) * _rot_x_90;
rotation = rotation * Quaternion.Euler(90, 0, 0);
LineWireCapsule(startCenter, end, rotation, radius, Vector3.Distance(startPoint1, startPoint2) + radius * 2f); LineWireCapsule(startCenter, end, rotation, radius, Vector3.Distance(startPoint1, startPoint2) + radius * 2f);
return this; return this;
} }

View File

@ -14,6 +14,8 @@ namespace DCFApixels
{ {
public readonly partial struct DrawHandler public readonly partial struct DrawHandler
{ {
private static Quaternion _rot_x_90 = Quaternion.Euler(90, 0, 0);
#region BillboardCircle #region BillboardCircle
[IN(LINE)] [IN(LINE)]
public DrawHandler BillboardCircle(Vector3 position, float radius) public DrawHandler BillboardCircle(Vector3 position, float radius)
@ -300,6 +302,13 @@ namespace DCFApixels
#region Capsule #region Capsule
public DrawHandler Capsule<TMat>(Vector3 point1, Vector3 point2, float radius)
where TMat : struct, IStaticMaterial
{
//var norm = Vector3.Cross(Vector3.Normalize(point2 - point1), Vector3.up);
var norm = Vector3.Normalize(point2 - point1);
return Capsule<TMat>((point1 + point2) * 0.5f, Quaternion.LookRotation(norm, Vector3.up) * _rot_x_90, radius, Vector3.Distance(point1, point2));
}
[IN(LINE)] [IN(LINE)]
public DrawHandler Capsule<TMat>(Vector3 position, Quaternion rotation, float radius, float height) public DrawHandler Capsule<TMat>(Vector3 position, Quaternion rotation, float radius, float height)
where TMat : struct, IStaticMaterial where TMat : struct, IStaticMaterial
@ -316,6 +325,13 @@ namespace DCFApixels
return this; return this;
} }
[IN(LINE)] [IN(LINE)]
public DrawHandler Capsule(Vector3 point1, Vector3 point2, float radius)
{
//var norm = Vector3.Cross(Vector3.Normalize(point2 - point1), Vector3.up);
var norm = Vector3.Normalize(point2 - point1);
return Capsule((point1 + point2) * 0.5f, Quaternion.LookRotation(norm, Vector3.up) * _rot_x_90, radius, Vector3.Distance(point1, point2));
}
[IN(LINE)]
public DrawHandler Capsule(Vector3 position, Quaternion rotation, float radius, float height) public DrawHandler Capsule(Vector3 position, Quaternion rotation, float radius, float height)
{ {
return Capsule<LitMat>(position, rotation, radius, height); return Capsule<LitMat>(position, rotation, radius, height);
@ -325,8 +341,9 @@ namespace DCFApixels
#region WireCapsule #region WireCapsule
public DrawHandler WireCapsule(Vector3 point1, Vector3 point2, float radius) public DrawHandler WireCapsule(Vector3 point1, Vector3 point2, float radius)
{ {
//TODO посмотреть поворот //var norm = Vector3.Cross(Vector3.Normalize(point2 - point1), Vector3.up);
return WireCapsule((point1 + point2) * 0.5f, Quaternion.LookRotation(point2 - point1), radius, Vector3.Distance(point1, point2)); var norm = Vector3.Normalize(point2 - point1);
return WireCapsule((point1 + point2) * 0.5f, Quaternion.LookRotation(norm, Vector3.up) * _rot_x_90, radius, Vector3.Distance(point1, point2));
} }
public DrawHandler WireCapsule(Vector3 position, Quaternion rotation, float radius, float height) public DrawHandler WireCapsule(Vector3 position, Quaternion rotation, float radius, float height)
{ {

View File

@ -100,8 +100,7 @@ namespace DCFApixels
public DrawHandler CapsuleCast(Vector3 point1, Vector3 point2, Vector3 direction, float radius, RaycastHit hit) public DrawHandler CapsuleCast(Vector3 point1, Vector3 point2, Vector3 direction, float radius, RaycastHit hit)
{ {
Vector3 center = (point1 + point2) * 0.5f; Vector3 center = (point1 + point2) * 0.5f;
Quaternion rotation = Quaternion.LookRotation(point2 - point1, Vector3.up); Quaternion rotation = Quaternion.LookRotation(point2 - point1, Vector3.up) * _rot_x_90;
rotation = rotation * Quaternion.Euler(90, 0, 0);
CapsuleCast(center, direction, rotation, radius, Vector3.Distance(point1, point2) + radius * 2f, hit); CapsuleCast(center, direction, rotation, radius, Vector3.Distance(point1, point2) + radius * 2f, hit);
return this; return this;
} }