Jump to content

[Circle Shader] [AYUDA]


Looney;3

Recommended Posts

Holus nececito ayuda para saber como solucionar el Circle Shader, porque sale pixelado

iUYdR6c.png

  
function dxDrawCircle( x, y, width, height, color, angleStart, angleSweep, borderWidth ) 
    height = height or width 
    color = color or tocolor(255,255,255) 
    borderWidth = borderWidth or 1e9 
    angleStart = angleStart or 0 
    angleSweep = angleSweep or 360 - angleStart 
    if ( angleSweep < 360 ) then 
        angleEnd = math.fmod( angleStart + angleSweep, 360 ) + 0 
    else 
        angleStart = 0 
        angleEnd = 360 
    end 
    x = x - width / 2 
    y = y - height / 2 
    if not circleShader then 
        circleShader = dxCreateShader ( "files/circle.fx" ) 
    end 
    dxSetShaderValue ( circleShader, "sCircleWidthInPixel", width ); 
    dxSetShaderValue ( circleShader, "sCircleHeightInPixel", height ); 
    dxSetShaderValue ( circleShader, "sBorderWidthInPixel", borderWidth ); 
    dxSetShaderValue ( circleShader, "sAngleStart", math.rad( angleStart ) - math.pi ); 
    dxSetShaderValue ( circleShader, "sAngleEnd", math.rad( angleEnd ) - math.pi ); 
    dxDrawImage( x, y, width, height, circleShader, 0, 0, 0, color ) 
end 

circle.fx

// 
// Example shader - circle.fx 
// 
  
// 
// Based on code from: 
// [url=http://www.geeks3d.com/20130705/shader-library-circle-disc-fake-sphere-in-glsl-opengl-glslhacker/]http://www.geeks3d.com/20130705/shader- ... lslhacker/[/url] 
// 
  
float sCircleHeightInPixel = 100; 
float sCircleWidthInPixel = 100; 
float sBorderWidthInPixel = 10; 
float sAngleStart = -3.14; 
float sAngleEnd = 3.14; 
  
//------------------------------------------------------------------------------------------ 
// PixelShaderFunction 
//  1. Read from PS structure 
//  2. Process 
//  3. Return pixel color 
//------------------------------------------------------------------------------------------ 
float4 PixelShaderFunction(float4 Diffuse : COLOR0, float2 TexCoord : TEXCOORD0) : COLOR0 
{ 
    float2 uv = float2( TexCoord.x, TexCoord.y ) - float2( 0.5, 0.5 ); 
  
    // Clip unwanted pixels from partial pie 
    float angle = atan2( -uv.x, uv.y );  // -PI to +PI 
    if ( sAngleStart > sAngleEnd ) 
    { 
        if ( angle < sAngleStart && angle > sAngleEnd ) 
            return 0; 
    } 
    else 
    { 
        if ( angle < sAngleStart || angle > sAngleEnd ) 
            return 0; 
    } 
  
    // Calc border width to use 
    float2 vec = normalize( uv ); 
    float CircleRadiusInPixel = lerp( sCircleWidthInPixel, sCircleHeightInPixel, vec.y * vec.y ); 
    float borderWidth = sBorderWidthInPixel / CircleRadiusInPixel; 
  
    // Check if pixel is inside circle 
    float dist =  sqrt( dot( uv, uv ) ); 
    if ( ( dist > 0.5 ) || ( dist < 0.5 - borderWidth ) ) 
        return 0; 
    else  
        return Diffuse; 
} 
  
//------------------------------------------------------------------------------------------ 
// Techniques 
//------------------------------------------------------------------------------------------ 
technique tec0 
{ 
    pass P0 
    { 
        PixelShader = compile ps_2_0 PixelShaderFunction(); 
    } 
} 
  

:D

Link to comment
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...