Re: large FOV, large triangles == trouble

New Message Reply Date view Thread view Subject view Author view

Max Waterman (maxw++at++sgi.com)
Thu, 03 Sep 1998 12:17:18 -0700


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();
> }

New Message Reply Date view Thread view Subject view Author view

This archive was generated by hypermail 2.0b2 on Thu Sep 03 1998 - 12:16:07 PDT

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