changes
This commit is contained in:
24
ShaderError.txt
Normal file
24
ShaderError.txt
Normal file
@@ -0,0 +1,24 @@
|
||||
#version 330 core
|
||||
|
||||
uniform sampler2D tex0;
|
||||
in vec2 v_texCoord0;
|
||||
|
||||
out vec4 o_color;
|
||||
|
||||
void main() {
|
||||
vec2 step = 1.0 / textureSize(tex0, 0);
|
||||
float ref = step(0.5 , texture(tex0, v_texCoord0).r);
|
||||
vec4 outc = vec4(-1.0, -1.0, 0.0, 1.0);
|
||||
|
||||
float contour = 0.0;
|
||||
for (y = -1; y <= 1; ++y) {
|
||||
for (x = -1; x <= 1; ++x) {
|
||||
float smp = step(0.5, texture(tex0, v_texCoord0 + vec2(x,y) * step).r);
|
||||
if (smp != ref) {
|
||||
contour = 1.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
o_color = vec4(contour, contour, contour, 1.0);
|
||||
}
|
||||
@@ -4,7 +4,7 @@ plugins {
|
||||
|
||||
allprojects {
|
||||
group 'org.openrndr.extra'
|
||||
version '0.0.19'
|
||||
version '0.0.20'
|
||||
}
|
||||
|
||||
repositories {
|
||||
|
||||
@@ -8,11 +8,11 @@ import org.openrndr.math.Matrix44
|
||||
import org.openrndr.math.Vector3
|
||||
|
||||
@Suppress("unused")
|
||||
class Debug3D(eye: Vector3 = Vector3(0.0, 0.0, 10.0), lookAt: Vector3 = Vector3.ZERO, private val fov: Double = 90.0) : Extension {
|
||||
class Debug3D(eye: Vector3 = Vector3(0.0, 0.0, 10.0), lookAt: Vector3 = Vector3.ZERO, fov:Double = 90.0) : Extension {
|
||||
|
||||
override var enabled: Boolean = true
|
||||
var showGrid = false
|
||||
val orbitalCamera = OrbitalCamera(eye, lookAt)
|
||||
val orbitalCamera = OrbitalCamera(eye, lookAt, 90.0)
|
||||
private val orbitalControls = OrbitalControls(orbitalCamera)
|
||||
private var lastSeconds: Double = -1.0
|
||||
|
||||
@@ -39,7 +39,7 @@ class Debug3D(eye: Vector3 = Vector3(0.0, 0.0, 10.0), lookAt: Vector3 = Vector3.
|
||||
orbitalCamera.update(delta)
|
||||
|
||||
drawer.background(ColorRGBa.BLACK)
|
||||
drawer.perspective(fov, program.window.size.x / program.window.size.y, 0.1, 1000.0)
|
||||
drawer.perspective(orbitalCamera.fov, program.window.size.x / program.window.size.y, 0.1, 1000.0)
|
||||
drawer.view = orbitalCamera.viewMatrix()
|
||||
|
||||
if (showGrid) {
|
||||
|
||||
@@ -13,7 +13,8 @@ import org.openrndr.math.Vector2
|
||||
import org.openrndr.math.Vector3
|
||||
import org.openrndr.math.transforms.lookAt as lookAt_
|
||||
|
||||
class OrbitalCamera(eye: Vector3, lookAt: Vector3) {
|
||||
class OrbitalCamera(eye: Vector3, lookAt: Vector3, var fov:Double) {
|
||||
|
||||
|
||||
// current position in spherical coordinates
|
||||
var spherical = Spherical.fromVector(eye)
|
||||
@@ -25,9 +26,20 @@ class OrbitalCamera(eye: Vector3, lookAt: Vector3) {
|
||||
private var lookAtEnd = lookAt.copy()
|
||||
private var dirty: Boolean = true
|
||||
|
||||
var fovEnd = fov
|
||||
|
||||
var dampingFactor = 0.05
|
||||
var zoomSpeed = 1.0
|
||||
|
||||
fun setView(lookAt: Vector3, spherical: Spherical, fov:Double) {
|
||||
this.lookAt = lookAt
|
||||
this.lookAtEnd = lookAt
|
||||
this.spherical = spherical
|
||||
this.sphericalEnd = spherical
|
||||
this.fov = fov
|
||||
this.fovEnd= fov
|
||||
}
|
||||
|
||||
fun rotate(rotX: Double, rotY: Double) {
|
||||
sphericalEnd += Spherical(0.0, rotX, rotY)
|
||||
sphericalEnd = sphericalEnd.makeSafe()
|
||||
@@ -56,7 +68,7 @@ class OrbitalCamera(eye: Vector3, lookAt: Vector3) {
|
||||
dolly(sphericalEnd.radius / zoomScale - sphericalEnd.radius)
|
||||
}
|
||||
|
||||
private fun dolly(distance: Double) {
|
||||
fun dolly(distance: Double) {
|
||||
sphericalEnd += Spherical(distance, 0.0, 0.0)
|
||||
dirty = true
|
||||
}
|
||||
@@ -80,6 +92,10 @@ class OrbitalCamera(eye: Vector3, lookAt: Vector3) {
|
||||
dirty = true
|
||||
}
|
||||
|
||||
fun zoom(degrees: Double) {
|
||||
fovEnd += degrees
|
||||
}
|
||||
|
||||
fun update(timeDelta: Double) {
|
||||
if (!dirty) return
|
||||
dirty = false
|
||||
@@ -87,17 +103,20 @@ class OrbitalCamera(eye: Vector3, lookAt: Vector3) {
|
||||
val dampingFactor = dampingFactor * timeDelta / 0.0060
|
||||
val sphericalDelta = sphericalEnd - spherical
|
||||
val lookAtDelta = lookAtEnd - lookAt
|
||||
|
||||
val fovDelta = fovEnd - fov
|
||||
if (
|
||||
Math.abs(sphericalEnd.radius) > EPSILON ||
|
||||
Math.abs(sphericalEnd.theta) > EPSILON ||
|
||||
Math.abs(sphericalEnd.phi) > EPSILON ||
|
||||
Math.abs(lookAtDelta.x) > EPSILON ||
|
||||
Math.abs(lookAtDelta.y) > EPSILON ||
|
||||
Math.abs(lookAtDelta.z) > EPSILON
|
||||
Math.abs(lookAtDelta.z) > EPSILON ||
|
||||
Math.abs(fovDelta) > EPSILON
|
||||
) {
|
||||
|
||||
fov += (fovDelta * dampingFactor)
|
||||
spherical += (sphericalDelta * dampingFactor)
|
||||
spherical = spherical.makeSafe()
|
||||
lookAt += (lookAtDelta * dampingFactor)
|
||||
dirty = true
|
||||
|
||||
|
||||
@@ -86,6 +86,34 @@ class OrbitalControls(val orbitalCamera: OrbitalCamera) {
|
||||
if (keyEvent.key == KEY_ARROW_DOWN) {
|
||||
orbitalCamera.pan(0.0, -1.0, 0.0)
|
||||
}
|
||||
|
||||
if (keyEvent.name == "q") {
|
||||
orbitalCamera.pan(0.0, -1.0, 0.0)
|
||||
}
|
||||
if (keyEvent.name == "e") {
|
||||
orbitalCamera.pan(0.0, 1.0, 0.0)
|
||||
}
|
||||
if (keyEvent.name == "w") {
|
||||
orbitalCamera.pan(0.0, 0.0, -1.0)
|
||||
}
|
||||
if (keyEvent.name == "s") {
|
||||
orbitalCamera.pan(0.0, 0.0, 1.0)
|
||||
}
|
||||
if (keyEvent.name == "a") {
|
||||
orbitalCamera.pan(-1.0, 0.0, 0.0)
|
||||
}
|
||||
if (keyEvent.name == "d") {
|
||||
orbitalCamera.pan(1.0, 0.0, 0.0)
|
||||
}
|
||||
|
||||
if (keyEvent.key == KEY_PAGE_UP) {
|
||||
orbitalCamera.zoom(1.0)
|
||||
}
|
||||
|
||||
if (keyEvent.key == KEY_PAGE_DOWN) {
|
||||
orbitalCamera.zoom(-1.0)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fun setup(program: Program) {
|
||||
|
||||
31
orx-examples/build.gradle
Normal file
31
orx-examples/build.gradle
Normal file
@@ -0,0 +1,31 @@
|
||||
plugins {
|
||||
id 'org.jetbrains.kotlin.jvm' version '1.2.71'
|
||||
}
|
||||
|
||||
group 'org.openrndr.extra'
|
||||
version '0.0.1'
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
maven {
|
||||
url "https://dl.bintray.com/openrndr/openrndr"
|
||||
}
|
||||
}
|
||||
|
||||
ext.openrndrVersion = "0.3.26"
|
||||
ext.orxVersion = "0.0.5"
|
||||
dependencies {
|
||||
compile "org.openrndr.extra:orx:0.0.1"
|
||||
compile "org.openrndr.extra:orx-jumpflood:$orxVersion"
|
||||
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
|
||||
compile "org.openrndr:openrndr-core:$openrndrVersion"
|
||||
runtime "org.openrndr:openrndr-gl3:$openrndrVersion"
|
||||
runtime "org.openrndr:openrndr-gl3-natives-windows:$openrndrVersion"
|
||||
}
|
||||
|
||||
compileKotlin {
|
||||
kotlinOptions.jvmTarget = "1.8"
|
||||
}
|
||||
compileTestKotlin {
|
||||
kotlinOptions.jvmTarget = "1.8"
|
||||
}
|
||||
BIN
orx-examples/gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
BIN
orx-examples/gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
Binary file not shown.
6
orx-examples/gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
6
orx-examples/gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
#Fri Oct 05 14:22:23 CEST 2018
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.8-all.zip
|
||||
172
orx-examples/gradlew
vendored
Normal file
172
orx-examples/gradlew
vendored
Normal file
@@ -0,0 +1,172 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
## Gradle start up script for UN*X
|
||||
##
|
||||
##############################################################################
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
# Resolve links: $0 may be a link
|
||||
PRG="$0"
|
||||
# Need this for relative symlinks.
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG=`dirname "$PRG"`"/$link"
|
||||
fi
|
||||
done
|
||||
SAVED="`pwd`"
|
||||
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||
APP_HOME="`pwd -P`"
|
||||
cd "$SAVED" >/dev/null
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS=""
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
||||
warn () {
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "`uname`" in
|
||||
CYGWIN* )
|
||||
cygwin=true
|
||||
;;
|
||||
Darwin* )
|
||||
darwin=true
|
||||
;;
|
||||
MINGW* )
|
||||
msys=true
|
||||
;;
|
||||
NONSTOP* )
|
||||
nonstop=true
|
||||
;;
|
||||
esac
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||
else
|
||||
JAVACMD="$JAVA_HOME/bin/java"
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD="java"
|
||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
||||
MAX_FD_LIMIT=`ulimit -H -n`
|
||||
if [ $? -eq 0 ] ; then
|
||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||
MAX_FD="$MAX_FD_LIMIT"
|
||||
fi
|
||||
ulimit -n $MAX_FD
|
||||
if [ $? -ne 0 ] ; then
|
||||
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||
fi
|
||||
else
|
||||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||
fi
|
||||
fi
|
||||
|
||||
# For Darwin, add options to specify how the application appears in the dock
|
||||
if $darwin; then
|
||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||
fi
|
||||
|
||||
# For Cygwin, switch paths to Windows format before running java
|
||||
if $cygwin ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||
|
||||
# We build the pattern for arguments to be converted via cygpath
|
||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||
SEP=""
|
||||
for dir in $ROOTDIRSRAW ; do
|
||||
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||
SEP="|"
|
||||
done
|
||||
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||
# Add a user-defined pattern to the cygpath arguments
|
||||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||
fi
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
i=0
|
||||
for arg in "$@" ; do
|
||||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||
|
||||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||
else
|
||||
eval `echo args$i`="\"$arg\""
|
||||
fi
|
||||
i=$((i+1))
|
||||
done
|
||||
case $i in
|
||||
(0) set -- ;;
|
||||
(1) set -- "$args0" ;;
|
||||
(2) set -- "$args0" "$args1" ;;
|
||||
(3) set -- "$args0" "$args1" "$args2" ;;
|
||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Escape application args
|
||||
save () {
|
||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||
echo " "
|
||||
}
|
||||
APP_ARGS=$(save "$@")
|
||||
|
||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||
|
||||
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
|
||||
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
|
||||
cd "$(dirname "$0")"
|
||||
fi
|
||||
|
||||
exec "$JAVACMD" "$@"
|
||||
84
orx-examples/gradlew.bat
vendored
Normal file
84
orx-examples/gradlew.bat
vendored
Normal file
@@ -0,0 +1,84 @@
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS=
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windows variants
|
||||
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
|
||||
:win9xME_args
|
||||
@rem Slurp the command line arguments.
|
||||
set CMD_LINE_ARGS=
|
||||
set _SKIP=2
|
||||
|
||||
:win9xME_args_slurp
|
||||
if "x%~1" == "x" goto execute
|
||||
|
||||
set CMD_LINE_ARGS=%*
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
||||
2
orx-examples/settings.gradle
Normal file
2
orx-examples/settings.gradle
Normal file
@@ -0,0 +1,2 @@
|
||||
rootProject.name = 'orx-examples'
|
||||
|
||||
56
orx-examples/src/main/kotlin/jumpfil-001.kt
Normal file
56
orx-examples/src/main/kotlin/jumpfil-001.kt
Normal file
@@ -0,0 +1,56 @@
|
||||
import org.openrndr.Program
|
||||
import org.openrndr.application
|
||||
import org.openrndr.color.ColorRGBa
|
||||
import org.openrndr.configuration
|
||||
import org.openrndr.draw.ColorType
|
||||
import org.openrndr.draw.colorBuffer
|
||||
import org.openrndr.extra.jumpfill.EncodePoints
|
||||
import org.openrndr.extra.jumpfill.JumpFlood
|
||||
|
||||
class JumpFill001 : Program() {
|
||||
|
||||
|
||||
var drawFunc = {}
|
||||
override fun setup() {
|
||||
|
||||
val encodePoints = EncodePoints()
|
||||
val jumpFill = JumpFlood()
|
||||
|
||||
val input = colorBuffer(512, 1024)
|
||||
val coordinates =
|
||||
listOf(colorBuffer(input.width, input.height, type = ColorType.FLOAT32),
|
||||
colorBuffer(input.width, input.height, type = ColorType.FLOAT32))
|
||||
|
||||
for (i in 0 until 100) {
|
||||
input.shadow[(Math.random() * input.width).toInt(), (Math.random() * input.height).toInt()] =
|
||||
ColorRGBa.WHITE
|
||||
}
|
||||
input.shadow.upload()
|
||||
|
||||
drawFunc = {
|
||||
encodePoints.apply(input, coordinates[0])
|
||||
drawer.image(coordinates[0])
|
||||
jumpFill.maxSteps = 10
|
||||
for (i in 0 until 10) {
|
||||
jumpFill.step = i
|
||||
jumpFill.apply(coordinates[i % 2], coordinates[(i + 1) % 2])
|
||||
}
|
||||
|
||||
drawer.image(coordinates[0])
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
override fun draw() {
|
||||
drawFunc()
|
||||
}
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
application(JumpFill001(), configuration {
|
||||
|
||||
width = 1024
|
||||
height = 1024
|
||||
|
||||
})
|
||||
}
|
||||
45
orx-examples/src/main/kotlin/jumpfil-002.kt
Normal file
45
orx-examples/src/main/kotlin/jumpfil-002.kt
Normal file
@@ -0,0 +1,45 @@
|
||||
import org.openrndr.Program
|
||||
import org.openrndr.application
|
||||
import org.openrndr.color.ColorRGBa
|
||||
import org.openrndr.configuration
|
||||
import org.openrndr.draw.colorBuffer
|
||||
import org.openrndr.extra.jumpfill.contourPoints
|
||||
import org.openrndr.extra.jumpfill.jumpFlood
|
||||
import org.openrndr.extra.jumpfill.threshold
|
||||
|
||||
class JumpFill002 : Program() {
|
||||
|
||||
var drawFunc = {}
|
||||
override fun setup() {
|
||||
|
||||
val input = colorBuffer(512, 1024)
|
||||
|
||||
for (i in 0 until 3) {
|
||||
input.shadow[(Math.random() * input.width).toInt(), (Math.random() * input.height).toInt()] =
|
||||
ColorRGBa.WHITE
|
||||
}
|
||||
input.shadow.upload()
|
||||
|
||||
val result = jumpFlood(drawer, input)
|
||||
|
||||
// threshold.apply(result, result)
|
||||
// contourPoints.apply(result, result)
|
||||
|
||||
drawFunc = {
|
||||
drawer.image(result)
|
||||
}
|
||||
}
|
||||
|
||||
override fun draw() {
|
||||
drawFunc()
|
||||
}
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
application(JumpFill002(), configuration {
|
||||
|
||||
width = 1024
|
||||
height = 1024
|
||||
|
||||
})
|
||||
}
|
||||
@@ -49,8 +49,8 @@ class JumpFlooder(val width: Int, val height: Int) {
|
||||
}
|
||||
|
||||
private var contourUsed = false
|
||||
private val thresholded by lazy { colorBuffer(width, height) }
|
||||
private val edges by lazy { colorBuffer(width, height) }
|
||||
val thresholded by lazy { colorBuffer(width, height) }
|
||||
val edges by lazy { colorBuffer(width, height) }
|
||||
|
||||
fun distanceToContour(drawer: Drawer, input: ColorBuffer, thresholdValue: Double = 0.5): ColorBuffer {
|
||||
threshold.threshold = thresholdValue
|
||||
@@ -85,7 +85,7 @@ class JumpFlooder(val width: Int, val height: Int) {
|
||||
jumpFlood.apply(coordinates[i % 2], coordinates[(i + 1) % 2])
|
||||
}
|
||||
|
||||
pixelDistance.apply( arrayOf(coordinates[exp % 2], thresholded), coordinates[exp % 2])
|
||||
pixelDistance.apply(arrayOf(coordinates[exp % 2], thresholded), coordinates[exp % 2])
|
||||
drawer.isolatedWithTarget(final) {
|
||||
drawer.background(ColorRGBa.BLACK)
|
||||
drawer.ortho(final)
|
||||
|
||||
Reference in New Issue
Block a user