HaxeJolt
This commit is contained in:
@ -0,0 +1,42 @@
|
||||
// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
|
||||
// SPDX-FileCopyrightText: 2026 Jorrit Rouwe
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
#include "HairApplyDeltaTransformBindings.h"
|
||||
#include "HairCommon.h"
|
||||
|
||||
JPH_SHADER_FUNCTION_BEGIN(void, main, cHairPerVertexBatch, 1, 1)
|
||||
JPH_SHADER_PARAM_THREAD_ID(tid)
|
||||
JPH_SHADER_FUNCTION_END
|
||||
{
|
||||
// Check if this is a valid vertex
|
||||
uint vtx = tid.x + cNumStrands; // Skip the root of each strand, it's fixed
|
||||
if (vtx >= cNumVertices)
|
||||
return;
|
||||
if (IsVertexFixed(gVerticesFixed, vtx))
|
||||
return;
|
||||
|
||||
// Load the material
|
||||
uint strand_idx = vtx % cNumStrands;
|
||||
JPH_HairMaterial material = gMaterials[GetStrandMaterialIndex(gStrandMaterialIndex, strand_idx)];
|
||||
|
||||
// Load the vertex
|
||||
float strand_fraction = GetVertexStrandFraction(gStrandFractions, vtx);
|
||||
JPH_HairPosition pos = gPositions[vtx];
|
||||
JPH_HairVelocity vel = gVelocities[vtx];
|
||||
|
||||
// Transform the position so that it stays in the same place in world space (if influence is 1)
|
||||
float influence = GradientSamplerSample(material.mWorldTransformInfluence, strand_fraction);
|
||||
pos.mPosition += influence * (JPH_Mat44Mul3x4Vec3(cDeltaTransform, pos.mPosition) - pos.mPosition);
|
||||
|
||||
// Linear interpolate the rotation based on the influence
|
||||
pos.mRotation = normalize(JPH_QuatMulQuat(influence * cDeltaTransformQuat + float4(0, 0, 0, 1.0f - influence), pos.mRotation));
|
||||
|
||||
// Transform velocities
|
||||
vel.mVelocity = JPH_Mat44Mul3x3Vec3(cDeltaTransform, vel.mVelocity);
|
||||
vel.mAngularVelocity = JPH_Mat44Mul3x3Vec3(cDeltaTransform, vel.mAngularVelocity);
|
||||
|
||||
// Write back vertex
|
||||
gPositions[vtx] = pos;
|
||||
gVelocities[vtx] = vel;
|
||||
}
|
||||
Reference in New Issue
Block a user