From 38d10282f41c55d35e87366200d6af52a834d57d Mon Sep 17 00:00:00 2001 From: zeromus Date: Mon, 2 Feb 2009 22:15:46 +0000 Subject: [PATCH] rasterize: fix viewport and perspective transformations. now triangles are rendered terribly in the correct place --- desmume/src/rasterize.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/desmume/src/rasterize.cpp b/desmume/src/rasterize.cpp index 1b7efc3e1..63758ce24 100644 --- a/desmume/src/rasterize.cpp +++ b/desmume/src/rasterize.cpp @@ -245,15 +245,18 @@ static void Render() { VERT &vert = gfx3d.vertlist->list[i]; - //perspective division - vert.coord[0] = (vert.coord[0] + vert.coord[3]) / 2 / vert.coord[3]; - vert.coord[1] = (vert.coord[1] + vert.coord[3]) / 2 / vert.coord[3]; - vert.coord[2] = (vert.coord[2] + vert.coord[3]) / 2 / vert.coord[3]; - vert.coord[3] = 1; + ////perspective division + //vert.coord[0] = (vert.coord[0] + vert.coord[3]) / 2 / vert.coord[3]; + //vert.coord[1] = (vert.coord[1] + vert.coord[3]) / 2 / vert.coord[3]; + //vert.coord[2] = (vert.coord[2] + vert.coord[3]) / 2 / vert.coord[3]; + //vert.coord[3] = 1; - //transform to viewport. this is badly broken - vert.coord[0] = (vert.coord[0])*128; - vert.coord[1] = (vert.coord[1])*96; + ////transform to viewport. this is badly broken + //vert.coord[0] = (vert.coord[0])*128; + //vert.coord[1] = (vert.coord[1])*96; + + vert.coord[0] = (vert.coord[0]+vert.coord[3])*256 / (2*vert.coord[3]) + 0; + vert.coord[1] = (vert.coord[1]+vert.coord[3])*192 / (2*vert.coord[3]) + 0; int zzz=9; }