mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-10-01 10:05:40 +00:00
vs_out tri picking works from all angles
This commit is contained in:
@@ -84,9 +84,6 @@ void trianglePath(uint threadID)
|
||||
uint vertid0 = 0;
|
||||
uint vertid1 = 0;
|
||||
uint vertid2 = 0;
|
||||
uint idx0 = 0;
|
||||
uint idx1 = 0;
|
||||
uint idx2 = 0;
|
||||
switch (meshpick.meshMode)
|
||||
{
|
||||
case MESH_TRIANGLE_LIST:
|
||||
|
||||
@@ -195,9 +195,6 @@ void trianglePath(uint threadID)
|
||||
uint vertid0 = 0;
|
||||
uint vertid1 = 0;
|
||||
uint vertid2 = 0;
|
||||
uint idx0 = 0;
|
||||
uint idx1 = 0;
|
||||
uint idx2 = 0;
|
||||
switch (PickMeshMode)
|
||||
{
|
||||
case MESH_TRIANGLE_LIST:
|
||||
|
||||
@@ -2313,6 +2313,10 @@ uint32_t D3D11DebugManager::PickVertex(uint32_t eventID, const MeshDisplay &cfg,
|
||||
Vec3f CameraToWorldFarPosition =
|
||||
InversePickMVP.Transform(Vec3f(pickXCanonical, pickYCanonical, 1), 1);
|
||||
RayDir = (CameraToWorldFarPosition - CameraToWorldNearPosition);
|
||||
if(cfg.position.unproject && cfg.cam->GetForward().z < 0)
|
||||
{
|
||||
RayDir = -RayDir;
|
||||
}
|
||||
RayDir.Normalise();
|
||||
RayPos = CameraToWorldNearPosition;
|
||||
}
|
||||
|
||||
@@ -1061,9 +1061,15 @@ uint32_t GLReplay::PickVertex(uint32_t eventID, const MeshDisplay &cfg, uint32_t
|
||||
|
||||
vec3 CameraToWorldNearPosition =
|
||||
InversePickMVP.Transform(Vec3f(pickXCanonical, pickYCanonical, -1), 1);
|
||||
|
||||
vec3 CameraToWorldFarPosition =
|
||||
InversePickMVP.Transform(Vec3f(pickXCanonical, pickYCanonical, 1), 1);
|
||||
|
||||
rayDir = (CameraToWorldFarPosition - CameraToWorldNearPosition);
|
||||
if(cfg.position.unproject && cfg.cam->GetForward().z < 0)
|
||||
{
|
||||
rayDir = -rayDir;
|
||||
}
|
||||
rayDir.Normalise();
|
||||
rayPos = CameraToWorldNearPosition;
|
||||
}
|
||||
|
||||
@@ -3029,7 +3029,6 @@ FloatVector VulkanDebugManager::InterpretVertex(byte *data, uint32_t vert, const
|
||||
return ret;
|
||||
}
|
||||
|
||||
// TODO: VS_Out triangles doesn't pick correctly if you look back on the frustrum
|
||||
// TODO: Point meshes don't pick correctly
|
||||
uint32_t VulkanDebugManager::PickVertex(uint32_t eventID, const MeshDisplay &cfg, uint32_t x,
|
||||
uint32_t y, uint32_t w, uint32_t h)
|
||||
@@ -3084,6 +3083,10 @@ uint32_t VulkanDebugManager::PickVertex(uint32_t eventID, const MeshDisplay &cfg
|
||||
vec3 CameraToWorldFarPosition =
|
||||
InversePickMVP.Transform(Vec3f(pickXCanonical, pickYCanonical, 1), 1);
|
||||
rayDir = (CameraToWorldFarPosition - CameraToWorldNearPosition);
|
||||
if(cfg.position.unproject && cfg.cam->GetForward().z < 0)
|
||||
{
|
||||
rayDir = -rayDir;
|
||||
}
|
||||
rayDir.Normalise();
|
||||
rayPos = CameraToWorldNearPosition;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user