본문 바로가기

분류 전체보기119

Liquid Glass 타원을 만드는 코드a : x축 반지름, b : y축 반지름n > 2 면 사각형에 가까워지고, n float sdSuperellipse(float2 p, float r, float n) { p = abs(p / r); float m = pow(p.x, n) + pow(p.y, n); return (pow(m, 1.0 / n) - 1.0) * r;}리턴값의 의미- 리턴값이 0이면 경계, 리턴값이 음수면 원안쪽, 양수면 원 바깥쪽. float w1 = exp(-dg1 * dg1 * 8.0);float w2 = exp(-dg2 * dg2 * 8.0);float totalWeight = w1 + w2 + 1e-6;dg1 원내부는 음수, 원 밖은 양수, 경계는 0이다.-1을 한쪽에 곱해주면 .. 2025. 6. 16.
2.7 SkSurface SkSurface는 렌더 타겟이다.렌더 타겟에 렌더링을 하고 이미지로 가져오는 방식을 알아보자. CPU 기반 캔버스 다음 예제는 CPU기반 SkSurface를 생성하여 이미지로 전환 후 캔버스를 통해 렌더링하는 예제이다. SkCanvas를 생성하는 함수는 SkSurfaces::Raster() 이다.CPU Ram을 사용하여 만든 서피스 이며, GPU 없이 이미지 버퍼를 만들고 그 위에 그림을 그릴 수 있다.파라메터로 SkImageInfo를 사용하며, 예제에서는 프리멀티플 64, 64 크기의 서피스를 생성한다.SkSurface의 makeSurface 함수를 사용하면,동일한 ImageInfo를 사용하되, 속성 값은 다르게 사용 할 수 있으며, 내부 픽셀값은 공유 하지 않는다. SkPixmap이 등장하는데, S.. 2025. 5. 19.
2.6 Canvas CheckerBoard // 체커보드 패턴을 그리는 함수void checkerboard(SkCanvas* canvas) { SkColor color1 = SK_ColorLTGRAY; // 배경 색상 (밝은 회색) SkColor color2 = SK_ColorCYAN; // 패턴 색상 (청록색) SkScalar scale = 10.0f; // 타일 하나의 기본 크기 SkPath path; path.addRect(0, 0, scale, scale); // 패턴으로 사용할 사각형 경로 추가 (10x10) // 매트릭스를 생성해 사각형 패턴을 복제할 방법 정의 SkMatrix matrix = SkMatrix::Scale(2 * scale, scale); // 가로로 2배,.. 2025. 5. 13.
2.5 Canvas read&write Pixels, saveLayer ReadPixelsvoid draw(SkCanvas* canvas) { // 캔버스를 파란색으로 클리어 canvas->clear(SK_ColorBLUE); SkPaint paint; // 중심 (32,32), 반지름 28짜리 원을 그림 (기본색 = 검정) canvas->drawCircle(32, 32, 28, paint); // 64x64 크기, BGRA8888 포맷, Premultiplied 알파의 이미지 정보 생성 SkImageInfo info = SkImageInfo::Make(64, 64, kBGRA_8888_SkColorType, kPremul_SkAlphaType); // info에 맞는 크기의 메모리 할당 (64x64x4 = 16384바이트) .. 2025. 5. 9.