表示するサンプルコードの言語を指定できます。

ポーズ

Altseedでは、2Dオブジェクト描画の際に追加で図形を描画できます。

シェーダー

シェーダーを使用して追加で図形を描画するサンプルです。

SS

C++

#include <Altseed.h>

// 専用のシェーダーを使用してスプライトを追加で描画するサンプル。

/**
@brief  DirectX向けシェーダー(HLSLで記述)
*/
static const char* shader2d_dx_ps = R"(
Texture2D g_texture : register( t0 );
SamplerState g_sampler : register( s0 );

struct PS_Input
{
    float4 SV_Position : SV_POSITION;
    float4 Position : POSITION;
    float2 UV : UV;
    float4 Color : COLOR;
};

float4 main( const PS_Input Input ) : SV_Target
{
    float4 color = g_texture.Sample(g_sampler, Input.UV);
    return float4( 1.0 - color.x, 1.0 - color.y, 1.0 - color.z, color.w);
}

)";

/**
@brief  OpenGL向けシェーダー(GLSLで記述)
*/
static const char* shader2d_gl_ps = R"(
uniform sampler2D   g_texture;

in vec4 inPosition;
in vec2 inUV;
in vec4 inColor;

out vec4 outOutput;

void main()
{
    vec4 color = texture(g_texture, inUV.xy);
    outOutput = vec4( 1.0 - color.x, 1.0 - color.y, 1.0 - color.z, color.w);
}

)";

/**
@brief  階調を反転して画像を描画するオブジェクト
*/
class InvertedDrawnObject2D : public asd::TextureObject2D
{
public:
    std::shared_ptr<asd::Shader2D>      shader;
    std::shared_ptr<asd::Material2D>    material2d;
    std::shared_ptr<asd::Texture2D>     texture;
public:
    InvertedDrawnObject2D()
    {
        // シェーダーをHLSL/GLSLから生成する。
        if (asd::Engine::GetGraphics()->GetGraphicsDeviceType() == asd::GraphicsDeviceType::DirectX11)
        {
            shader = asd::Engine::GetGraphics()->CreateShader2D(
                asd::ToAString(shader2d_dx_ps).c_str()
                );
        }
        else if (asd::Engine::GetGraphics()->GetGraphicsDeviceType() == asd::GraphicsDeviceType::OpenGL)
        {
            shader = asd::Engine::GetGraphics()->CreateShader2D(
                asd::ToAString(shader2d_gl_ps).c_str()
                );
        }

        material2d = asd::Engine::GetGraphics()->CreateMaterial2D(shader);

        // 画像を読み込む。
        texture = asd::Engine::GetGraphics()->CreateTexture2D(asd::ToAString("Data/Texture/Picture1.png").c_str());

        // 画像を設定する。
        material2d->SetTexture2D(asd::ToAString("g_texture").c_str(), texture);
        material2d->SetTextureFilterType(asd::ToAString("g_texture").c_str(), asd::TextureFilterType::Linear);
        material2d->SetTextureWrapType(asd::ToAString("g_texture").c_str(), asd::TextureWrapType::Repeat);
    }

protected:
    void OnDrawAdditionally() override
    {
        // 画像を描画する。
        DrawSpriteWithMaterialAdditionally(
            asd::Vector2DF(100, 100),
            asd::Vector2DF(400, 100),
            asd::Vector2DF(400, 400),
            asd::Vector2DF(100, 400),
            asd::Color(255, 255, 255, 255),
            asd::Color(255, 255, 255, 255),
            asd::Color(255, 255, 255, 255),
            asd::Color(255, 255, 255, 255),
            asd::Vector2DF(0.0f, 0.0f),
            asd::Vector2DF(1.0f, 0.0f),
            asd::Vector2DF(1.0f, 1.0f),
            asd::Vector2DF(0.0f, 1.0f),
            material2d,
            asd::AlphaBlendMode::Blend,
            0);
    }
};

int main()
{
    // Altseedを初期化する
    asd::Engine::Initialize(asd::ToAString("DrawAdditionally2D_Material").c_str(), 640, 480, asd::EngineOption());

    // シーン、レイヤー、画像を表示するオブジェクトを生成する。
    auto scene = std::make_shared<asd::Scene>();
    auto layer = std::make_shared<asd::Layer2D>();
    auto obj = std::make_shared<InvertedDrawnObject2D>();

    // シーンを変更し、そのシーンにレイヤーを追加し、そのレイヤーにオブジェクトを追加する。
    asd::Engine::ChangeScene(scene);
    scene->AddLayer(layer);
    layer->AddObject(obj);

    while (asd::Engine::DoEvents())
    {
        asd::Engine::Update();
    }

    asd::Engine::Terminate();
}

C#


/// <summary>
/// 階調を反転して画像を描画するオブジェクト
/// </summary>
class InvertedDrawnObject2D : asd.TextureObject2D
{
    /// <summary>
    /// DirectX向けシェーダー(HLSLで記述)
    /// </summary>
    private static string shader2d_dx_ps = @"
Texture2D g_texture : register( t0 );
SamplerState g_sampler : register( s0 );

struct PS_Input
{
    float4 SV_Position : SV_POSITION;
    float4 Position : POSITION;
    float2 UV : UV;
    float4 Color : COLOR;
};

float4 main( const PS_Input Input ) : SV_Target
{
    float4 color = g_texture.Sample(g_sampler, Input.UV);
    return float4( 1.0 - color.x, 1.0 - color.y, 1.0 - color.z, color.w);
}

";

    /// <summary>
    /// OpenGL向けシェーダー(GLSLで記述)
    /// </summary>
    private static string shader2d_gl_ps = @"
uniform sampler2D g_texture;

in vec4 inPosition;
in vec2 inUV;
in vec4 inColor;

out vec4 outOutput;

void main()
{
    vec4 color = texture(g_texture, inUV.xy);
    outOutput = vec4( 1.0 - color.x, 1.0 - color.y, 1.0 - color.z, color.w);
}

";

    asd.Shader2D shader;
    asd.Material2D material2d;
    asd.Texture2D texture;

    public InvertedDrawnObject2D()
    {
        // シェーダーをHLSL/GLSLから生成する。
        if(asd.Engine.Graphics.GraphicsDeviceType == asd.GraphicsDeviceType.DirectX11)
        {
            shader = asd.Engine.Graphics.CreateShader2D(shader2d_dx_ps);
        }
        else if(asd.Engine.Graphics.GraphicsDeviceType == asd.GraphicsDeviceType.OpenGL)
        {
            shader = asd.Engine.Graphics.CreateShader2D(shader2d_gl_ps);
        }

        // シェーダーからマテリアルを生成する。
        material2d = asd.Engine.Graphics.CreateMaterial2D(shader);

        // 画像を読み込む。
        texture = asd.Engine.Graphics.CreateTexture2D("Data/Texture/Picture1.png");

        // 画像を設定する。
        material2d.SetTexture2D("g_texture", texture);
        material2d.SetTextureFilterType("g_texture", asd.TextureFilterType.Linear);
        material2d.SetTextureWrapType("g_texture", asd.TextureWrapType.Repeat);
    }

    protected override void OnDrawAdditionally()
    {
        // 画像を描画する。
        DrawSpriteWithMaterialAdditionally(
            new asd.Vector2DF(100, 100),
            new asd.Vector2DF(400, 100),
            new asd.Vector2DF(400, 400),
            new asd.Vector2DF(100, 400),
            new asd.Color(255, 255, 255, 255),
            new asd.Color(255, 255, 255, 255),
            new asd.Color(255, 255, 255, 255),
            new asd.Color(255, 255, 255, 255),
            new asd.Vector2DF(0.0f, 0.0f),
            new asd.Vector2DF(1.0f, 0.0f),
            new asd.Vector2DF(1.0f, 1.0f),
            new asd.Vector2DF(0.0f, 1.0f),
            material2d,
            asd.AlphaBlendMode.Blend,
            0);
    }
}

/// <summary>
/// 専用のシェーダーを使用してスプライトを追加で描画するサンプル。
/// </summary>
class DrawAdditionally2D_Material
{
    [System.STAThread]
    static void Main(string[] args)
    {
        // Altseedを初期化する。
        asd.Engine.Initialize("DrawAdditionally2D_Material", 640, 480, new asd.EngineOption());

        // シーン、レイヤー、画像を表示するオブジェクトを生成する。
        var scene = new asd.Scene();
        var layer = new asd.Layer2D();
        var obj = new InvertedDrawnObject2D();

        // シーンを変更し、そのシーンにレイヤーを追加し、そのレイヤーにオブジェクトを追加する。
        asd.Engine.ChangeScene(scene);
        scene.AddLayer(layer);
        layer.AddObject(obj);

        while (asd.Engine.DoEvents())
        {
            asd.Engine.Update();
        }

        asd.Engine.Terminate();
    }

    public string Description
    {
        get { return "専用のシェーダーを使用してスプライトを追加で描画するサンプル。"; }
    }

    public string Title
    {
        get { return "追加描画(シェーダー)"; }
    }

    public string ClassName
    {
        get { return "DrawAdditionally2D_Material"; }
    }
}


Java

/**
 * 専用のシェーダーを使用してスプライトを追加で描画するサンプル。
*/
class DrawAdditionally2D_Material 
{
    public java.lang.String getDescription() {
        return "専用のシェーダーを使用してスプライトを追加で描画するサンプル。";
    }
    public java.lang.String getTitle() {
        return "追加描画(シェーダー)";
    }
    public java.lang.String getClassName() {
        return "DrawAdditionally2D_Material";
    }
    public static void main(String args[])
    {
        // Altseedを初期化する。
        asd.Engine.Initialize("DrawAdditionally2D_Material", 640, 480, new asd.EngineOption());

        // シーン、レイヤー、画像を表示するオブジェクトを生成する。
        asd.Scene scene = new asd.Scene();
        asd.Layer2D layer = new asd.Layer2D();
        InvertedDrawnObject2D obj = new InvertedDrawnObject2D();

        // シーンを変更し、そのシーンにレイヤーを追加し、そのレイヤーにオブジェクトを追加する。
        asd.Engine.ChangeScene(scene);
        scene.AddLayer(layer);
        layer.AddObject(obj);

        while(asd.Engine.DoEvents())
        {
            asd.Engine.Update();
        }


        asd.Engine.Terminate();
    }
}
/**
 * 階調を反転して画像を描画するオブジェクト
*/
class InvertedDrawnObject2D extends asd.TextureObject2D
{
    private static java.lang.String shader2d_dx_ps = ""+
"Texture2D g_texture : register( t0 );"+
"SamplerState g_sampler : register( s0 );"+
""+
"struct PS_Input"+
"{"+
"   float4 SV_Position : SV_POSITION;"+
"   float4 Position : POSITION;"+
"   float2 UV : UV;"+
"   float4 Color : COLOR;"+
"};"+
""+
"float4 main( const PS_Input Input ) : SV_Target"+
"{"+
"   float4 color = g_texture.Sample(g_sampler, Input.UV);"+
"   return float4( 1.0 - color.x, 1.0 - color.y, 1.0 - color.z, color.w);"+
"}"+
""+
"";
    private static java.lang.String shader2d_gl_ps = ""+
"uniform sampler2D g_texture;"+
""+
"in vec4 inPosition;"+
"in vec2 inUV;"+
"in vec4 inColor;"+
""+
"out vec4 outOutput;"+
""+
"void main()"+
"{"+
"   vec4 color = texture(g_texture, inUV.xy);"+
"   outOutput = vec4( 1.0 - color.x, 1.0 - color.y, 1.0 - color.z, color.w);"+
"}"+
""+
"";
    private asd.Shader2D shader;
    private asd.Material2D material2d;
    private asd.Texture2D texture;
    protected void OnDrawAdditionally()
    {
        // 画像を描画する。
        DrawSpriteWithMaterialAdditionally(new asd.Vector2DF(100, 100), new asd.Vector2DF(400, 100), new asd.Vector2DF(400, 400), new asd.Vector2DF(100, 400), new asd.Color(255, 255, 255, 255), new asd.Color(255, 255, 255, 255), new asd.Color(255, 255, 255, 255), new asd.Color(255, 255, 255, 255), new asd.Vector2DF(0.0f, 0.0f), new asd.Vector2DF(1.0f, 0.0f), new asd.Vector2DF(1.0f, 1.0f), new asd.Vector2DF(0.0f, 1.0f), material2d, asd.AlphaBlendMode.Blend,            0);
    }
    public InvertedDrawnObject2D()
    {
        // シェーダーをHLSL/GLSLから生成する。
        if((asd.Engine.getGraphics().getGraphicsDeviceType() == asd.GraphicsDeviceType.DirectX11))
        {
            shader = asd.Engine.getGraphics().CreateShader2D(shader2d_dx_ps);
        }
        else
        {
            if((asd.Engine.getGraphics().getGraphicsDeviceType() == asd.GraphicsDeviceType.OpenGL))
            {
                shader = asd.Engine.getGraphics().CreateShader2D(shader2d_gl_ps);
            }
        }

        // シェーダーからマテリアルを生成する。
        material2d = asd.Engine.getGraphics().CreateMaterial2D(shader);

        // 画像を読み込む。
        texture = asd.Engine.getGraphics().CreateTexture2D("Data/Texture/Picture1.png");

        // 画像を設定する。
        material2d.SetTexture2D("g_texture", texture);
        material2d.SetTextureFilterType("g_texture", asd.TextureFilterType.Linear);
        material2d.SetTextureWrapType("g_texture", asd.TextureWrapType.Repeat);
    }
}