#1
|
|||
|
|||
linear transform in 2D screen space
I intend to do some linear transform in 2D window (screen) space in order to do on-the-fly h-/v-keystone correction. I have all the code ready to calculate the linear distortion matrix from four registered corner points of the projection image. At the moment I choose this approach:
Code:
current_pm = viz.MainWindow.getProjectionMatrix() current_pm.postMult(distortion_matrix) viz.MainWindow.setProjectionMatrix(current_pm) My question: Is there a more elegant way in Vizard to implement this final viewport distortion as a 2D transform only rather than as a distortion of the 3D projection matrix? |
#2
|
|||
|
|||
You can use a post-process shader to perform your keystone correction. A shader may be overkill for a simple linear transformation, but it allows for more flexibility for distortion correction. The vizlens module that comes with Vizard uses a post-process shader to perform the lens correction. Here is a simple example of a post-process shader:
Code:
import viz import vizpp viz.go() KeystoneShader = """ uniform sampler2D vizpp_InputTex; uniform float osg_FrameTime; void main (void) { float s = gl_TexCoord[0].s + (gl_TexCoord[0].t * sin(osg_FrameTime) * 0.3); float t = gl_TexCoord[0].t; gl_FragColor = texture2D( vizpp_InputTex, vec2(s,t) ); } """ vizpp.addEffect( vizpp.ShaderEffect(frag=KeystoneShader) ) viz.add('gallery.ive') |
Thread Tools | |
Display Modes | Rate This Thread |
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
split screen | honey006 | Vizard | 3 | 05-21-2009 10:57 AM |
screen image | erchrastil | Vizard | 8 | 06-27-2008 12:45 PM |
position of html-file on screen | active_world | Vizard | 1 | 05-16-2008 08:24 PM |
Smooth transition from Linear to Bezier in animation | masaki | Vizard | 2 | 01-13-2008 12:22 PM |
Tracking a small space | aaThomas | Precision Position Tracker (PPT) | 3 | 05-31-2007 11:59 AM |