Path: chuka.playstation.co.uk!news From: will atkin Newsgroups: scee.yaroze.programming.3d_graphics Subject: Re: more 3d problems.. Date: Tue, 27 Apr 1999 17:45:28 +0100 Organization: PlayStation Net Yaroze (SCEE) Lines: 35 Message-ID: <3725E9A8.7CE7102A@hotmail.com> References: <3721F00A.D31147E8@bournemouth.ac.uk> <7g243s$7352@chuka.playstation.co.uk> NNTP-Posting-Host: nat95.bournemouth.ac.uk Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Mailer: Mozilla 4.07 [en] (WinNT; I) > > > void draw_3dsprite (GsSPRITE *sprite,VECTOR spritePosition) { > // The spritePosition is the point in 3D space (world coords) that your > sprite lies at. > > VECTOR transformedPosition; > extern MATRIX GsWSMATRIX; > > ApplyMatrixLV(&GsWSMATRIX,&spritePosition,&transformedPosition); > transformedPosition.vx += GsWSMATRIX.t[0]; > transformedPosition.vy += GsWSMATRIX.t[1]; > transformedPosition.vz += GsWSMATRIX.t[2]; > > if (transformedPosition.vz>0) { // Only draw sprite if it's in front > of the camera. > // Scales the sprite according to the distance. > sprite->scalex = sprite->scaley = (ONE << 12) / > transformedPosition.vz; > sprite->x = transformedPosition.vx * PROJECTION_DISTANCE / > transformedPosition.vz; > sprite->y = transformedPosition.vy * PROJECTION_DISTANCE / > transformedPosition.vz; > > GsSortSprite(&sprite,&OTable_Header[GsGetActiveBuffer()],transformedPosition > .vz >> (14 - ORDERING_TABLE_LENGTH)); > } > } > > Rikki Thanks for the tip... we'll try it out! Will