vs_out tri picking works from all angles

This commit is contained in:
James Fulop
2016-09-30 10:55:01 +02:00
committed by baldurk
parent 15978532e3
commit 67246868f5
5 changed files with 14 additions and 7 deletions
-3
View File
@@ -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:
-3
View File
@@ -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:
+4
View File
@@ -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;
}
+6
View File
@@ -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;
}
+4 -1
View File
@@ -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;
}