나는 그래픽 프로그래밍에 비교적 새로운 해요, 난 그냥이 바보 같은 질문을 보이는 경우 그래서 저를 용서하십시오, 책을 읽고 튜토리얼을 통해 스캔 한 있었어요.픽셀 쉐이더는 실제로 무엇을합니까?
나는 directx11의 및 실행의 기초를 가지고, 그리고 지금은 좀 재미를 찾고 있어요. 그래서 자연스럽게 나는 쉐이더 파이프 라인을 많이 읽고 있었고, 나는 이미 매료되었다. 자원을 낭비하지 않고 초당 60 분의 1 초마다 수만 번씩 실행하는 데 효율적이어야하는 간단하고 소소한 코드를 작성한다는 아이디어는 계속해서 혼란을 일으키기 전에 개념을 파악하기 위해 서둘러야합니다. 사물의. 내가 겪고있는 문제는 픽셀 쉐이더가 실제로 무엇을하는지 파악하는 것입니다.
꼭지점 셰이더는 위치 및 텍스처 좌표와 같은 정보를 관련시키는 균일 한 데이터 구조로 개체의 꼭지점을 구성한 다음 각 꼭지점을 셰이더에 전달하여 개체를 3 차원에서 2 차원으로 변환합니다. trasformation matrices의 방법. 내가 이해한다면, 코드를 작성하는 법을 배울 수 있습니다.
하지만 난 픽셀 쉐이더를하지 않습니다. 내가 얻은 것은 버텍스 쉐이더의 출력이 픽셀 쉐이더의 입력이라는 것입니다. 그러면 픽셀 쉐이더에 다각형의 정점의 2 차원 좌표를 건네 주면 안 될까요? 이해해야 할 것은 픽셀 쉐이더가 개별 픽셀을 받아서 색상 및 조명과 같은 것을 결정하기 위해 계산을 수행한다는 것입니다. 그러나 그것이 사실이라면 어떤 픽셀입니까? 전체 화면 또는 변환 된 2D 다각형 내에있는 픽셀 만?
또는 내가 완전히 뭔가 오해가?
이제 알았습니다. 나는 시각적 인 학습자이기 때문에, 나는 당신이 묘사 한 것이라고 생각하는 다이어그램을 만들었으므로, 나는 무엇인가 놓치고 있는지 말해주세요. http://postimage.org/image/9oy2nroqr/ – FatalCatharsis
하나의 실수 : 포스트 버텍스 쉐이더 좌표는 ** 픽셀 좌표가 아니라 _normalized_입니다. Direct3D의 경우 이것은 0.0에서 1.0 (OpenGL에서 -1.0 및 1.0) 사이에 있음을 의미합니다. 처음에는 화면이 정사각형이 아니기 때문에 처음에는 그리 직관적이지는 않지만 일반적으로 화면이 정사각형이 아니기 때문에 "그냥 작동합니다"(걱정할 필요가 없으며 특별히 할 일이 없습니다!).이 경우 하드웨어가 계산 (예 : 클리핑)을하는 것이 더 효율적입니다. 공간. 나머지 부분은 훌륭하게 보입니다 (기하학 쉐이더, 테셀레이션 및 클리핑을 "중간에 일어나는 물건"이라고합니다). – Damon
아아 gotcha, 내가 선택한 모든 화면의 해상도에 상관없이 같은 규모로 될 정상적으로 좌표를 선호합니다, (OpenGL을 조금 이상한, -1-1) 보인다. 그래서 기하학적 쉐이더와 테셀레이션 단계가 중간에 발생합니까? 새로운 꼭지점을 버텍스 쉐이더에 넣고 화면 좌표로 변환 할 수 있기 때문에 먼저 올 것입니다. 자동으로 생성 된 새 정점이 2 차원으로 바뀌 었습니까? – FatalCatharsis