Siv3D | ColorMul, ColorAdd 사용 방법

11556 단어 siv3dtech

그릴 도면 또는 텍스쳐 색상 사용

ScopedColorMul2DScopedColorAdd2D를 사용하면 도형과 무늬를 그릴 때 RGBA 성분을 원래의 색깔과 곱하고 더할 수 있다.
입력한 색상을 c, ScopedColorMul2D에 설정된 색상을 cM, ScopedColorAdd2D에 설정된 색상을 cA, 출력된 색상을 c * cM + cA로 계산합니다.(이곳에서 더 나아가 혼합 상태에 따라 알파 투과 등을 계산하여 쓴 색을 결정하지만 본 글은 설명을 생략한다)
예제
  • Rect{ 100 }.draw(ColorF{ 0.6, 0.8, 1.0 });에서 드로잉
  • cM = ColorF{ 0.8, 0.7, 0.6, 1.0 }
  • cA = ColorF{ 0.2, 0.3, 0.4, 0.0 }
  • 를 클릭하면 ColorF{ (0.6 * 0.8 + 0.2), (0.8 * 0.7 + 0.3), (1.0 * 0.6 + 0.4), (1.0 * 1.0 + 0.0) }ColorF{ 0.68, 0.86, 1.0, 1.0 } 색상으로 그려집니다.
    별도의 설정이 없는 경우cM = ColorF{ 1.0, 1.0, 1.0, 1.0 }, cA = ColorF{ 0.0, 0.0, 0.0, 0.0 }가 기본값입니다.

    프로그램 예

    ScopedColorMul2DScopedColorAdd2D 대상이 존재할 때 설정이 적용됩니다.프로그램의 드로잉 일부에만 해당되는 경우 { }의 적용 범위를 사용하여 해당 부분을 둘러쌉니다.
    # include <Siv3D.hpp> // OpenSiv3D v0.4.3
    
    void Main()
    {
    	Scene::SetBackground(ColorF{ 0.4, 0.8, 0.6 });
    
    	const Array<Texture> textures =
    	{
    		Texture{Emoji{U"🐕"}},
    		Texture{Emoji{U"🐤"}},
    		Texture{Emoji{U"🐄"}},
    		Texture{Emoji{U"🐧"}},
    	};
    
    	ColorF cM{ 1.0, 1.0, 1.0, 1.0 };
    	ColorF cA{ 0.0, 0.0, 0.0, 0.0 };
    
    	while (System::Update())
    	{
    		SimpleGUI::Headline(U"Mul", Vec2{ 20, 20 });
    		SimpleGUI::Slider(cM.r, Vec2{ 20, 60 });
    		SimpleGUI::Slider(cM.g, Vec2{ 20, 100 });
    		SimpleGUI::Slider(cM.b, Vec2{ 20, 140 });
    
    		SimpleGUI::Headline(U"Add", Vec2{ 20, 200 });
    		SimpleGUI::Slider(cA.r, Vec2{ 20, 240 });
    		SimpleGUI::Slider(cA.g, Vec2{ 20, 280 });
    		SimpleGUI::Slider(cA.b, Vec2{ 20, 320 });
    
    		{
    			ScopedColorMul2D colorMul{ cM };
    			ScopedColorAdd2D colorAdd{ cA };
    
    			for (auto [i, texture] : Indexed(textures))
    			{
    				texture.drawAt(260 + i * 140, 200);
    			}
    		}
    	}
    }
    

    샘플 색상 설정


    절반 밝기 도달 시texture.draw(ColorF{ 0.5 })
  • cM = ColorF{ 0.5, 0.5, 0.5, 1.0 }
  • cA = ColorF{ 0.0, 0.0, 0.0, 0.0 }

  • 검은색 윤곽의 경우
  • cM = ColorF{ 0.0, 0.0, 0.0, 1.0 }
  • cA = ColorF{ 0.0, 0.0, 0.0, 0.0 }

  • 연한 파란색 윤곽선을 선택할 때
  • cM = ColorF{ 0.0, 0.0, 0.0, 1.0 }
  • cA = ColorF{ 0.0, 1.0, 1.0, 0.0 }

  • 흰 실루엣
  • cM = ColorF{ 0.0, 0.0, 0.0, 1.0 }
  • cA = ColorF{ 1.0, 1.0, 1.0, 0.0 }
  • 좋은 웹페이지 즐겨찾기