Add PerspectivePlane distortion filter
This commit is contained in:
60
orx-fx/src/main/kotlin/distort/Raycast.kt
Normal file
60
orx-fx/src/main/kotlin/distort/Raycast.kt
Normal file
@@ -0,0 +1,60 @@
|
||||
package org.openrndr.extra.fx.distort
|
||||
|
||||
import org.openrndr.draw.*
|
||||
import org.openrndr.extra.fx.filterFragmentCode
|
||||
import org.openrndr.extra.parameters.BooleanParameter
|
||||
import org.openrndr.extra.parameters.Description
|
||||
import org.openrndr.extra.parameters.DoubleParameter
|
||||
import org.openrndr.math.Vector3
|
||||
import org.openrndr.math.transforms.transform
|
||||
|
||||
@Description("Perspective plane")
|
||||
class PerspectivePlane : Filter(Shader.createFromCode(filterVertexCode, filterFragmentCode("distort/perspective-plane.frag"))) {
|
||||
|
||||
// @DoubleParameter("camera x", -1.0, 1.0, order = 0)
|
||||
var cameraX : Double = 0.0
|
||||
// @DoubleParameter("camera y", -1.0, 1.0, order = 1)
|
||||
var cameraY : Double = 0.0
|
||||
// @DoubleParameter("camera z", -1.0, 1.0, order = 2)
|
||||
var cameraZ : Double = 1.0
|
||||
|
||||
|
||||
@DoubleParameter("plane x", -1.0, 1.0, order = 3)
|
||||
var planeX : Double = 0.0
|
||||
@DoubleParameter("plane y", -1.0, 1.0, order = 4)
|
||||
var planeY : Double = 0.0
|
||||
@DoubleParameter("plane z", -1.0, 1.0, order = 5)
|
||||
var planeZ : Double = 0.5
|
||||
|
||||
@DoubleParameter("plane yaw", -180.0, 180.0, order = 6)
|
||||
var planeYaw : Double = 0.0
|
||||
@DoubleParameter("plane pitch", -180.0, 180.0, order = 7)
|
||||
var planePitch : Double = 0.0
|
||||
@DoubleParameter("plane roll", -180.0, 180.0, order = 8)
|
||||
var planeRoll : Double = 0.0
|
||||
|
||||
|
||||
@BooleanParameter("tile input")
|
||||
var tile: Boolean by parameters
|
||||
|
||||
var seconds:Double by parameters
|
||||
init {
|
||||
seconds = 0.0
|
||||
tile = false
|
||||
}
|
||||
|
||||
override fun apply(source: Array<ColorBuffer>, target: Array<ColorBuffer>) {
|
||||
source[0].generateMipmaps()
|
||||
source[0].filter(MinifyingFilter.LINEAR_MIPMAP_LINEAR, MagnifyingFilter.LINEAR)
|
||||
source[0].wrapU = WrapMode.REPEAT
|
||||
source[0].wrapV = WrapMode.REPEAT
|
||||
parameters["cameraPosition"] = Vector3(cameraX, cameraY, cameraZ)
|
||||
parameters["planePosition"] = Vector3(planeX, planeY, planeZ)
|
||||
parameters["planeMatrix"] = transform {
|
||||
rotate(Vector3.UNIT_X, planePitch)
|
||||
rotate(Vector3.UNIT_Y, planeYaw)
|
||||
rotate(Vector3.UNIT_Z, planeRoll)
|
||||
}
|
||||
super.apply(source, target)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user