2016-06-03 3 views
1

저는 Unity에서 작업 중이므로 C#으로 코딩하고 있지만 아이디어 나 시작 장소는 환영합니다.실루엣에서 메쉬를 만들고 싶습니다.

내 문제를 설명하는 방법을 모르겠다. '간단한'해결책이 있다면 시도해 보겠다. 2 개의 그림자를 투영하는 물체가 있습니다 (아마도 단순한 모양으로 제한 될 것입니다). 그 그림자의 모양 인 메쉬를 생성하고 싶습니다. 아래 이미지에서 알 수 있듯이 원하는 메쉬를 녹색으로 그렸습니다.

desired meshes drawn in green

내 초기 메쉬의 정점을 변경 주위에 엉망, 일부 특별한 경우 (NO 회전 물체)에 대한 해결책을 발견,하지만 난 충분히 잘 작동의 하나를 발견하지 않았습니다했습니다. 누구나 사용할 수있는 아이디어가 있습니까? 내가 예상 정점을 계산 raycasts를 사용 Preview it here

[방법]

: 사전에

감사합니다, 바트

+0

빨간 큐브의 모서리를 통해 광원에서 나오는 Raycast를 사용하고 벽이 벽에 닿는 곳을 확인해보십시오. – TheDjentleman

+0

"두께가 얼마나 큽니까"라는 것을 어떻게 알 수 있습니까? 그림자는 2D입니다 –

+0

너비가 고정됩니다. 1 단위 예를 들면. –

답변

1

나는 당신이 말한 않습니다 정확히 프로젝트를 생성하기 위해 시간이 걸렸습니다 광원의 특정 물체를 이 방법은 비효율적으로 보일 수 있지만 지정된 메쉬의 vert count가 낮 으면 모든 것이 잘되어야합니다.

그러면 투영 된 정점의 평균을 취하여 투영 된 큐브의 위치를 ​​계산했습니다. Vector3 averagePosition = new Vector3(verticies.Average(vector => vector.x), verticies.Average(vector => vector.y), verticies.Average(vector => vector.z));

그리고 투영 된 정점 위치 성분 (x, y, z)의 각 범위를 취하여 입방체의 크기를 계산했습니다. Vector3 averageScale = new Vector3(verticies.Max(vector => vector.x) - verticies.Min(vector => vector.x), verticies.Max(vector => vector.y) - verticies.Min(vector => vector.y), normalScale);

참고 : 완전히 새로운 메쉬를 생성하지는 않습니다. 나는 스크립트가 첨부 된 미리 만든 큐브의 변형을 조작하는 중이다.

단점은이 방법이 지금까지 한 축으로 만 제한된다는 것입니다. 고칠 수 있습니다.

다운로드 Github에서

에서 프로젝트 GitHub의 링크 : 당신은 당신이 지역 사회에 도움에 대한 모든 개선 사항을 커밋 할 수 있다면

https://github.com/MyIsaak/Shadow-Mesh/tree/master이 좋은 것입니다. 이 프로젝트는 상용 및 비상업적 용도로 자유롭게 사용할 수 있습니다.

+0

정말 고마워요. 감사합니다. 감사합니다. 감사합니다. 많은 흔적과 오류가 있었지만 비슷한 결과를 얻었지만 코드만큼이나 깨끗하고 직관적 인 것은 아니므로 이것이 도움이됩니다. 이제 섀도우 모양을 가진 메쉬를 변형하는 주된 문제는 그림자가 항상 원래 개체와 같은 모양 또는 많은 정점을 가지는 것은 아니라는 것입니다.(링크의 예) 그러나 원하는 메쉬를 빌드하는 데 필요한 꼭지점을 찾을 수있어 코드를 사용하여 문제를 해결할 수 있다고 확신합니다. ! [예제 및 개요] (http://imgur.com/a/5xAYI) –

관련 문제