문제가 발생하기 전에 더 많은 컨텍스트가 필요합니다. 나는 텍스트를 렌더링하기 위해 FontRenderer
클래스를 작성했다. 작동 방법은 다음과 같습니다. 런타임 중에 문자열을 표시하려면 ABC, GameObject
이 생성되고 각각 3 개의 쿼드가 있고 각각은 각 글리프의 UV 좌표가 아트라스 텍스처에서 조회됩니다.텍스처의 글리프의 전경색 변경
충분히 간단합니다. 동일한 재질이 사용되면 단일 그리기 호출이 허용됩니다.
그러나 특정 글리프의 전경을 변경하는 기능을 추가하는 경우 어떻게이 문제에 접근 할 수 있습니까? 난 \c
다음과 같은 탈출 시퀀스를 계획하고있다 : \c[A-F]{2}[A-F]{2}[A-F]{2}
. 내가 ABC 빨간색과 흰색 문자열의 나머지 부분에 색상을한다면 예를 들어
는, 나는 FontRenderer
에 다음 문자열을 전달합니다 : "\cFF0000A\cFFFFFFBC"
.
내 생각은 아틀라스 텍스처를 사용하는 것이 었습니다. 이 배경의 아이디어는 새로운 전경색을 사용하여 새로운 글리프를 플롯하고 아틀라스 텍스처 내에 스프라이트를 할당하는 것입니다. 그러나 이것은 상당히 복잡 할 수 있습니다.
내 생각으로는 버텍스/프래그먼트 쉐이더를 사용하는 것이지만 이것이 가능한지 확실하지 않습니다. 또 다른 문제는 드로잉 호출 수가 증가하는 모든 렌더링 된 문자열에 대해 가능한 경우 내 셰이더를 사용하는 재질의 인스턴스가 필요하다는 것입니다.
다른 방법으로 수행 할 수 있습니까?
두 번째 옵션을 사용하면 특정 글립 색을 설정하기 위해 매개 변수를 수정해야하므로이 인스턴스의 재질 인스턴스를 해당 문자열과 연결해야합니다. 내 생각 엔 4 개의 정점 그룹을 전달해야한다는 것입니다. 같은 재질의 인스턴스가 여러 개 있으면 그리기 호출이 늘어나지 않겠습니까? 패키지를 찾는 데 너무 많은 것을 보지 못했지만 불행한 점은 내가 찾은 패키지가 폐쇄 된 소스라는 것입니다. 또한 'float4' 데이터 유형을 사용하여 알파와 함께 색상을 지정하지 않겠습니까? 나는 256 비트가 어떻게 사용되고 있는지 보지 못했다. – mrkotfw
예 내 256 비트 색상 제한이 틀렸습니다 (이전 정보!), 제거했습니다. 버텍스의 색을 기반으로 메쉬를 색칠 할 셰이더를 구현할 링크를 몇 개 추가했습니다. 최종 결과는 여전히 1 드로우 콜이어야합니다. –
정점 색상을 지정하면 티켓이되었습니다! 유의해야 할 중요한 점은'BindChannels'을 사용하여 정점 데이터를 매핑하는 방법을 지정할 수있게하는 것입니다. – mrkotfw