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