학술 프로젝트의 경우 게시판을 처음부터 그리기위한 코드를 작성하려고합니다. 이제 나는 그들을 반투명하게 만들었다. 나는 그들이 배경에 대해 잘 보이게하기 위해 관리했습니다하지만 그들은 여전히이 그림처럼, 자신의-해야 투명 모서리가 서로를 커버 할 수있다 : 나는 '모르겠어요서로 덮는 투명한 오브젝트
잘못하고있다. 이 광고판을 그릴 때 사용하는 효과 파일입니다. 버텍스 쉐이더와 관련된 부분은 생략했는데, 지금은 부적절하다고 생각합니다. 텍스처와 MaskTexture 이름
나는 두 개의 텍스처를 가지고//cut
texture Texture;
texture MaskTexture;
sampler Sampler = sampler_state
{
Texture = (Texture);
MinFilter = Linear;
MagFilter = Linear;
MipFilter = Point;
AddressU = Clamp;
AddressV = Clamp;
};
sampler MaskSampler = sampler_state
{
Texture = (MaskTexture);
MinFilter = Linear;
MagFilter = Linear;
MipFilter = Point;
AddressU = Clamp;
AddressV = Clamp;
};
//cut
struct VertexShaderOutput
{
float4 Position : POSITION0;
float4 Color : COLOR;
float2 TexCoord : TEXCOORD0;
};
//cut
float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0
{
float4 result = tex2D(Sampler, input.TexCoord) * input.Color;
float4 mask = tex2D(MaskSampler, input.TexCoord);
float alpha = mask.r;
result.rgb *= alpha;
result.a = alpha;
return result;
}
technique Technique1
{
pass Pass1
{
VertexShader = compile vs_2_0 VertexShaderFunction();
PixelShader = compile ps_2_0 PixelShaderFunction();
AlphaBlendEnable = true;
SrcBlend = SrcAlpha;
DestBlend = InvSrcAlpha;
}
}
, 그레이 스케일에서 후자. 게시판은 대부분 같은 정점 버퍼에 있으며 XNA에서 GraphicsDevice.DrawIndexedPrimitives()
이라는 단일 호출로 그려집니다.
나는 모든 일을 제대로하지 못하고 있다고 생각합니다.
당신이 GL_BLEND을 사용할 수 있나요? 여기 GL_BLEND 섹션을 참고하십시오. http://www.opengl.org/sdk/docs/man/xhtml/glEnable.xml – Ani
@ananthonline 미안하지만, 프로젝트가 XNA가 아닌 OpenGL이 아니라는 정보를 숨 겼습니다. 게시물의 끝. 글쎄, 블렌딩을 가능하게하기 위해 내가했던 (또는 적어도 기억할 수있는) 유일한 것은'AlphaBlendEnable = true; '를'pass' 블록에 추가하는 것입니다. 충분하지 않니? – kamilk
HLSL에 잘못된 것이 실제로 보이지 않을 것입니다. 픽셀 쉐이더를 변경하여 마스크 텍스처에서 가져온 값을 반환하여 의도 한대로 사용하고 있는지 확인하십시오. 또한 백 버퍼 형식이 무엇입니까? – Andy