#1
|
|||
|
|||
Different projection matrix per viewpoint
Dear Jeff,
I have implemented a solution where i can change the viewpoint with a toggle button, so i can see a topview instead of a view through the "virtual eyes". In very brief: Code:
BirdEyeView = viz.addView() BirdEyeView.setPosition([0, 50, 0]) # move camera up BirdEyeView.lookAt([0,0,0], 0) viz.MainWindow.setView(BirdEyeView) In that case, is there a way to backup the stereo projection setup and later restore it? I see you can get the projection matrix, but which one should i get, left eye, right eye, both eyes, all? the <window>.setProjectionMatrix documentation suggests if specifying a matrix for both eyes, it is automatically adjusted for the individual eyes... (NB: i see that the steamVR module has an apply method to set the projection matrix, but i am searching for a general solution, that would e.g. also work when developing on the desktop with a single non-stereo window.) Thanks and all the best, Dee |
#2
|
|||
|
|||
Dear Jeff,
Perhaps it is useful if i provide some more background. I am trying to get some items i render with parent=viz.SCREEN or parent=viz.ORTHO to show up on the Vive. Since my last post, i have found this: http://forum.worldviz.com/showthread.php?t=5573. So I am trying a canvas. But i'd like the vizshapes i parent to this canvas to be rendered with orthographic projection. If i set Code:
canvas = viz.addGUICanvas() canvas.setPosition([0,0,0]) canvas.alignment(viz.ALIGN_CENTER) canvas.setRenderScreenOrtho() canvas.setReferenceFrame(viz.RF_VIEW) # with or without doesn't make a difference Using Code:
canvas.setRenderWorldOverlay() Could you let me know how i can get things rendered orthographically to show up on the Vive? |
#3
|
|||
|
|||
And i have a related question. In an overlay, the sizes I should specify my objects in are in pixels, after setting the overlay to the correct resolution. I am having difficulty getting the size of the HMD's screen.
With the vive, I open a window with the default vizconnect setup for the Vive. I then try to get screen resolution: print viz.MainWindow.getSize(mode=viz.WINDOW_PIXELS) What is returned is [3840.0, 1080.0], which is the resolution of my desktop (two 1920x1080 screens, side by side) and not the Vive's resolution of 1080x1200 per eye. Similarly, the returned aspect ratio is 1.77777777778, which is the aspect ratio of one of my 1920x1080 screens. Would you know how i can get the size of the Vive (or other HMD's) screen, instead of of those automatically opened desktop windows? And specifically, how to get the size of a single eye's screen, which is what I (think I) need? Thanks! |
#4
|
|||
|
|||
Sorry to keep adding. to the last message:
specifically, i am trying to get the following info: Code:
w,h = viz.MainWindow.getSize() params.resolution = (w,h) params.refreshRate= viz.getOption('viz.monitor.refresh_rate',type=int) params.FOVy = viz.MainWindow.getVerticalFOV() params.aspectr = viz.MainWindow.getAspectRatio() print (params.resolution,params.refreshRate,params.FOVy,params.aspectr) ((3840, 1080), 60, 40.0, 1.7777777777777775) which is not the Vive, but my desktop. How to get each of these from the Vive? This is what i get after calling vizconnect.go(), with the vive setup file as argument (which works fine, 3D world looks good) |
#5
|
|||
|
|||
I'll check in with our developers and get back to you on both questions, orthographic projection and getting Vive specs. I'm not sure there is a Vizard command that will return the resolution and FOV of the Vive. You can use vizconnect or vizard commands to find out if a Vive is connected. Then you could retrieve specs saved to variables or a file. Would that work?
|
#6
|
|||
|
|||
Hi Jeff,
Thanks for getting back to me! First off, is it perhaps better if we handle this through a support ticket and then post the final results here? I have hacked together the following to get Vive specs: Code:
display_node = vizconnect.getRawDisplay('main_display').displayNode if type(display_node.getSensor()).__name__=='SteamVRHMD': resolution = (1080.*2,1200.) refreshRate= 90. # get FOVy and aspectr from the Vive's projection matrices import vizmat a=vizmat.Transform() a.set(display_node.getSensor().getProjectionMatrix(viz.LEFT_EYE)) left = a.getPerspective() a.set(display_node.getSensor().getProjectionMatrix(viz.RIGHT_EYE)) right = a.getPerspective() FOVy = (left[0]+right[0])/2. aspectr = (left[1]+right[1])/2. This also leaves me with a new question. In this situation, should i open the overlay (setRenderWorldOverlay())with the resolution of the two screens combined (i.e., 2160x1200), or should i open it at a single eye size, 1080x1200? When i do the latter, things are positioned way off in the HMD, so i used the former which seems to work ok. Its however hard to know if things are positioned correctly, since we can't use a ruler to measure. Thank you and all the best, Dee |
#7
|
|||
|
|||
Hi Jeff,
I just realize that more is affected by the fact that viz.MainWindow refers to the auxiliary window on the desktop: calls to functions such as viz.MainWindow.worldToScreen() don't do the right thing either, returning values in desktop screen instead of HMD screen pixel-coordinates. I hope there is some "he, dude, tell me about the HMD screen please" flag somewhere All the best, Dee |
Thread Tools | |
Display Modes | Rate This Thread |
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Regarding Viconnect viewpoint | rajnishv | Precision Position Tracker (PPT) | 3 | 03-20-2017 11:03 PM |
Regarding viewpoint with vizconfig,addFloatRangeItem&Storing viewpoint in PREFERENCES | rajnishv | Vizard | 0 | 06-27-2016 03:57 AM |
Projection Matrix (onto oblique near plane) | andrewjworz | Vizard | 1 | 07-13-2012 09:10 AM |
projection matrix control & child window | kwkim | Vizard | 0 | 08-31-2011 12:53 AM |