[orx-shade-styles] Add rotation support to pattern dots
This commit is contained in:
@@ -46,11 +46,14 @@ open class GradientBase<C>(
|
||||
this.resetFill = false
|
||||
fragmentPreamble = """
|
||||
|vec4 g_fill;
|
||||
|#ifndef SP_ROTATE2D
|
||||
|#define SP_ROTATE2D
|
||||
|vec2 rotate2D(vec2 x, float angle){
|
||||
| float rad = angle / 180.0 * $PI;
|
||||
| mat2 m = mat2(cos(rad),-sin(rad), sin(rad),cos(rad));
|
||||
| return m * x;
|
||||
|}
|
||||
|#endif
|
||||
|$oklabToLinearRgbPhrase
|
||||
|$linearRgbToOklabPhrase
|
||||
|${structure.gradientFunction}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.openrndr.extra.shadestyles.fills.patterns
|
||||
|
||||
import org.openrndr.draw.ShadeStyle
|
||||
import kotlin.math.PI
|
||||
|
||||
|
||||
class PatternBaseStructure(
|
||||
@@ -16,6 +17,14 @@ class PatternBase(structure: PatternBaseStructure) : ShadeStyle() {
|
||||
|
||||
init {
|
||||
fragmentPreamble = """
|
||||
#ifndef SP_ROTATE2D
|
||||
#define SP_ROTATE2D
|
||||
vec2 rotate2D(vec2 x, float angle){
|
||||
float rad = angle / 180.0 * $PI;
|
||||
mat2 m = mat2(cos(rad),-sin(rad), sin(rad),cos(rad));
|
||||
return m * x;
|
||||
}
|
||||
#endif
|
||||
${structure.domainWarpFunction}
|
||||
${structure.patternFunction}
|
||||
""".trimIndent()
|
||||
|
||||
@@ -135,9 +135,10 @@ class XorMod2PatternBuilder(builder: PatternBuilder) {
|
||||
class DotsPatternBuilder(builder: PatternBuilder) {
|
||||
var dotSize: Double by builder.Parameter("patternDotSize", 0.25)
|
||||
var strokeWeight: Double by builder.Parameter("patternStrokeWeight", 1E10)
|
||||
var rotation: Double by builder.Parameter("patternDotRotation", 0.0)
|
||||
init {
|
||||
builder.patternFunction = """float pattern(vec2 coord) {
|
||||
vec2 scoord = coord * p_patternScale;
|
||||
vec2 scoord = rotate2D(coord, p_patternDotRotation) * p_patternScale;
|
||||
vec2 mcoord = mod(scoord + vec2(0.5), vec2(1.0)) - vec2(0.5);
|
||||
float d = length(mcoord) - p_patternDotSize;
|
||||
float dw = fwidth(d);
|
||||
|
||||
@@ -9,6 +9,7 @@ import org.openrndr.extra.color.presets.LIME_GREEN
|
||||
import org.openrndr.extra.imageFit.imageFit
|
||||
import org.openrndr.extra.shadestyles.fills.SpreadMethod
|
||||
import org.openrndr.extra.shadestyles.fills.gradients.gradient
|
||||
import org.openrndr.extra.shadestyles.fills.patterns.pattern
|
||||
|
||||
fun main() = application {
|
||||
configure {
|
||||
@@ -18,10 +19,21 @@ fun main() = application {
|
||||
program {
|
||||
val image = loadImage("demo-data/images/image-001.png")
|
||||
extend {
|
||||
drawer.shadeStyle = pattern {
|
||||
foregroundColor = ColorRGBa.WHITE
|
||||
backgroundColor = ColorRGBa.WHITE.shade(0.75)
|
||||
checkers {
|
||||
scale = 72.0
|
||||
}
|
||||
}
|
||||
|
||||
drawer.rectangle(drawer.bounds.offsetEdges(-10.0))
|
||||
|
||||
drawer.shadeStyle = gradient<ColorRGBa> {
|
||||
stops[0.0] = ColorRGBa.CRIMSON
|
||||
stops[0.7] = ColorRGBa.DODGER_BLUE
|
||||
stops[1.0] = ColorRGBa.LIME_GREEN
|
||||
stops[0.0] = ColorRGBa.CRIMSON.opacify(0.0)
|
||||
stops[0.19] = ColorRGBa.CRIMSON.opacify(0.0)
|
||||
stops[0.25] = ColorRGBa.DODGER_BLUE.opacify(1.0)
|
||||
stops[1.0] = ColorRGBa.LIME_GREEN.opacify(1.0)
|
||||
|
||||
spreadMethod = SpreadMethod.REFLECT
|
||||
luma {
|
||||
|
||||
Reference in New Issue
Block a user