2011-01-02 3 views
1

여기 거래가 있습니다. 입자 시스템을 텍스처 기반으로 만들고 싶습니다. 구름 텍스처가 있습니다. 텍스처와 텍스처가 같은 10 개의 폴리곤에 텍스처를 매핑합니다. 서로 섞으면 문제가 생겨서 5 개의 다각형이 너무 희게됩니다! 나는 이것을 원하지 않는다. 내가 원하는 것은 누적 버퍼 효과와 같은 것입니다. 다음과 같은 효과를 원합니다.여러 텍스처를 혼합하여 입자 시스템 만들기

다각형이 페이지 안에 있고 픽셀이 내부에있는 경우 Rx, Bx, Gx가 각 픽셀 색상이됩니다. 이제 우리는 각각 크기와 질감이 같은 n 개의 다각형을 갖게되었습니다.

Rtotal = R1/R2 N +/N + ... + Rn의/N I 알파 블렌딩에서 같은 결과를 얻을 수있는 일 GTOTAL 및 Btotal

대한 동일한 .

여기에 초기화가 있습니다.

glEnable(GL_TEXTURE_2D); 
glEnable(GL_BLEND); 
glEnable(GL_DEPTH_TEST) ; 
glDepthFunc(GL_ALWAYS); 

glEnable(GL_NORMALIZE); 
glColor4f(.5,.5, .5,.2); 
glBlendFunc (GL_SRC_ALPHA, GL_DST_ALPHA); 
+0

당신은 당신의 목표는 OpenGL 버전을 말할 것을 잊었다 (또한, 입자 전에 솔리드 형상을 렌더링하지 않도록 Z-쓰기 다음. 잊지 마세요). – Kos

+1

첫 번째 패스에서 각 조각의 입자 수를 계산하는 쉐이더가있는 2 패스 솔루션을 사용할 수 있습니다. 그럼 당신이 묘사하는 방식대로 분할 할 수 있습니다. – Plow

+0

시원한 답변 : D는 들리지만 나는 쉐이더를 처음 사용하기 때문에 힘들다. –

답변

1

그것은 당신이 원하는대로 당신이 많은 조각이 얼마나 각 픽셀에 대한 을 알 필요가 원하는만큼 정확하게 결과를 확인하기는 어렵습니다.

입자가 잘 보이게하려면 블렌드 모드를 변경하면 충분합니다.

result = source_color*source_alpha + destination_color 

또는 일반 첨가제의 혼합 : 당신은 아마 첨가제 알파 블렌딩을 사용하고 있기 때문에 그들은 흰색에 축적되어

result = source_color + destination_color 

(소스는 "주어진 조각의 색상이"어디에 목적지는 "그 곳의 프레임 버퍼에 이미 있던 것"입니다).

둘 다 흰색으로 부패하여 "레이어"가 많습니다. 그러나 "진정한"알파 블렌딩을 사용할 수 있습니다 :

result = source_color * source_alpha + destination_color * (1-source_alpha) 

흰색으로 변하지 않습니다. 는 OpenGL에서

,이 대응에 :

결과가 순서에 의존 할 것이다, 그러나이 입자 시스템에 대한 100 % 충분해야하기 때문에 당신이 원하는 것을 정확히 아니다
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

. 희망이 도움이됩니다.

+0

내가 말했듯이, 폴리곤은 서로 섞이지 않았습니다! 어쩌면 내가 코드를 게시해야합니다. 스키밍 시간이 있다면 알려주세요. –

+0

또한 마지막 줄도 얻지 못했습니다. 좀 더 설명해 주시겠습니까 –

+0

glEnable (GL_BLEND)을 기억하나요?마음에 드시면 코드의 관련 부분과 아마도 GLintercept의 프레임 로그를 게시 할 수 있습니다. – Kos