Re: large FOV, large triangles == trouble

New Message Reply Date view Thread view Subject view Author view

Javier Castellar (javier++at++sixty.engr.sgi.com)
Thu, 3 Sep 1998 13:00:54 -0700


It seems that you were using a single wiewport covering all channels. Despite
the effect on the rasterization you also got lower "efective" precission on Z
buffer on the sides as well as a lot of perspective distortion on the side
channels.

The rearrangement of channels in a vertical layout (= you need three views )
will allow you to both workaround the implementation limitation, reduce the
distortion and increase the "effective" Zbuffer precission on the sides.

You can use ircombine to create your own channel layout for the vertical tiling
of channels in the framebuffer but you will need to modify the performer
channel layout.

-Javier

On Sep 3, 12:17pm, Max Waterman wrote:
> Subject: Re: large FOV, large triangles == trouble
> I'm pretty sure this is an OpenGL/X bug (580844) which is currently being
worked
> on.
>
> Try a narrower managed area, less than 2477 (at 1024 height), just to see if
it
> is the same problem. One way to do this is to arrange your channels
vertically
> (if this is possible).
>
> Max.
> --
> Max Waterman. mailto:maxw++at++sgi.com "Get off me cheese! Get off! Get off!
> PSE-GPS Grommit, Grommit! Go for him! Off!"
> Mattias.Johansson++at++saab.se wrote:
> >
> > Hi all,
> >
> > We seem to be getting into trouble using three channels on one IR pipe.
> > We have a terrain database of partially generic terrain with
> > fairly large triangles.
> >
> > Sometimes when such a triangle covers a large portion of the pipe
> > pieces of it gets missing (clipped).
> >
> > This can also be demonstrated using perfly (3++at++1280x1024_60 format)
> >
> > perfly -l 2 -g 0 -p 27.835300,15.988377,5.0 -e 0.0,-90.0,0.000000
> > sampler.nff
> >
> > Here one can see an object close to the eye getting drawn correctly
> > but the "floor" polygon in the distance is clipped.
> >
> > We have seen this before on other IR based systems and did
> > send a test case to SGI Sweden, but nothing happened :-(
> >
> > The current setup is an Onyx2 with 4 RM7's and all the latest patches.
> >
> > We are using the standard distributed 3++at++1280x1024_60 video combination
> > format.
> >
> > I attach a small performer program that sets up three channels
> > to demonstrate the problem.
> >
> > Anybody else seen this? solutions/workarounds?
> >
> > /Mattias
> >
> > --
> >
----------------------------------------------------------------------------
> > Mattias Johansson Email:
> > Mattias.Johansson++at++saab.se
> > Systems Engineer Phone: +46 (0)13 - 181740
> > Saab Aerospace - Simulation Center Fax : +46 (0)13 - 184177
> > 581 88 Linkoping - Sweden
> >
----------------------------------------------------------------------------
> >
> >
  --------------------------------------------------------------------------------
> > #include <stdlib.h>
> > #include <Performer/pf.h>
> > #include <Performer/pfutil.h>
> > #include <Performer/pfdu.h>
> >
> > int main (int argc, char *argv[])
> > {
> > pfScene *scene;
> > pfNode *root;
> > pfPipe *p;
> > pfPipeWindow *pw;
> > pfChannel *left;
> > pfChannel *middle;
> > pfChannel *right;
> > pfVec3 middleHPR = {0.0, 0.0, 0.0};
> > pfVec3 leftHPR = {60.0, 0.0, 0.0};
> > pfVec3 rightHPR = {-60.0, 0.0, 0.0};
> > pfVec3 zeroOffset = {0.0, 0.0, 0.0};
> > pfDCS *dcs;
> > int n;
> >
> > pfCoord view;
> > char *model = "/usr/share/Performer/data/board.sv";
> >
> > pfInit();
> > pfMultiprocess( PFMP_DEFAULT );
> > pfdInitConverter(model);
> >
> > pfConfig();
> >
> > pfFilePath("/usr/share/Performer/data/");
> >
> > if ((root = pfdLoadFile(model)) == NULL) {
> > pfExit();
> > exit(-1);
> > }
> >
> > scene = pfNewScene();
> > dcs = pfNewDCS();
> > pfAddChild(dcs, root);
> > pfDCSScale(dcs, 10000); /* Scale up them polys */
> > pfAddChild(scene, dcs);
> >
> > pfAddChild(scene, pfNewLSource());
> >
> > p = pfGetPipe(0);
> > pw = pfNewPWin(p);
> > pfPWinType(pw, PFPWIN_TYPE_X);
> > pfPWinName(pw, "DBTest");
> > pfPWinOriginSize(pw, 0, 0, 3840, 1024);
> > pfOpenPWin(pw);
> >
> > /* We use 3 channels */
> > middle = pfNewChan(p);
> > left = pfNewChan(p);
> > right = pfNewChan(p);
> >
> > pfChanScene(middle, scene);
> > pfChanFOV(middle, 60.0f, 40.0f);
> >
> > pfChanShare(middle, PFCHAN_FOV |
> > PFCHAN_VIEW |
> > PFCHAN_NEARFAR | PFCHAN_SCENE);
> >
> > pfAttachChan(middle,left);
> > pfAttachChan(middle,right);
> >
> >
> > /* feel free to insert your fav near/far ratio */
> > pfChanNearFar(middle, 1.0f, 550000.0f);
> >
> > pfChanViewport(middle, 0.0, 1.0/3.0, 0.0, 1.0);
> > pfChanViewport(right, 1.0/3.0, 2.0/3.0, 0.0, 1.0);
> > pfChanViewport(left, 2.0/3.0, 1.0, 0.0, 1.0);
> >
> >
> > pfChanViewOffsets(middle, zeroOffset, middleHPR);
> > pfChanViewOffsets(left, zeroOffset, leftHPR);
> > pfChanViewOffsets(right, zeroOffset, rightHPR);
> >
> > /* somewhere over the chessboard */
> > view.xyz[PF_X] = 8000;
> > view.xyz[PF_Y] = 19000;
> >
> > /* 2000m over the board looking down. In the middle channel there
> > is a crack in the chessboard :-( */
> > view.xyz[PF_Z] = 2000.0;
> > view.hpr[PF_H] = 0.0;
> > view.hpr[PF_P] = -90.0;
> > view.hpr[PF_R] = 0.0;
> >
> > pfChanView(middle, view.xyz, view.hpr);
> >
> > /* display the crack for 500 frames */
> > for(n=0;n<500;n++) {
> > pfSync();
> > pfFrame();
> > }
> >
> > /* Move away to see the "big picture" */
> > for(;view.xyz[PF_Z] < 200000;view.xyz[PF_Z]+=100.0) {
> > pfSync();
> > pfChanView(middle, view.xyz, view.hpr);
> > pfFrame();
> > }
> > pfExit();
> > }
> =======================================================================
> List Archives, FAQ, FTP: http://www.sgi.com/Technology/Performer/
> Submissions: info-performer++at++sgi.com
> Admin. requests: info-performer-request++at++sgi.com
>-- End of excerpt from Max Waterman

-- 
*****************************************************************
* Javier Castellar Arribas          * Email:     javier++at++sgi.com *                 
*                                   * Vmail:           933-1589 *            
* Member of Technical Staff         * Phone:       650-933-1589 *
* Applied Research & Development    * Fax:         415-964-8671 *     
* Advanced Graphics Division        * MailStop:          8L-525 *
***************************************************************** 
* Silicon Graphics Inc.                                         *
* 2011 N. Shoreline Boulevard,                                  *                        
* Mountain View, California 94043-1386, USA                     *
*****************************************************************
"Violence is the last refuge of the incompetent"
						Hardin Seldon

New Message Reply Date view Thread view Subject view Author view

This archive was generated by hypermail 2.0b2 on Thu Sep 03 1998 - 13:01:27 PDT

This message has been cleansed for anti-spam protection. Replace '++at++' in any mail addresses with the '@' symbol.