From: Miguel <mic...@us...> - 2004-05-12 16:05:58
|
Update of /cvsroot/jmol/Jmol/src/org/jmol/g3d In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3435/src/org/jmol/g3d Modified Files: Graphics3D.java Log Message: test class for shading/lighting Index: Graphics3D.java =================================================================== RCS file: /cvsroot/jmol/Jmol/src/org/jmol/g3d/Graphics3D.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- Graphics3D.java 11 May 2004 23:15:55 -0000 1.12 +++ Graphics3D.java 12 May 2004 16:05:16 -0000 1.13 @@ -484,9 +484,18 @@ public void fillQuadrilateral(short colix, Point3i screenA, Point3i screenB, Point3i screenC, Point3i screenD) { - fillTriangle(colix, screenA, screenB, screenC); - fillTriangle(colix, screenA, screenC, screenD); - } + calcSurfaceShade(colix, screenA, screenB, screenC); + fillTriangle(argbCurrent, screenA, screenB, screenC); + fillTriangle(argbCurrent, screenA, screenC, screenD); + } + + public void fillQuadrilateral(short colix, + Point3f screenA, Point3f screenB, + Point3f screenC, Point3f screenD) { + calcSurfaceShade(colix, screenA, screenB, screenC); + fillTriangle(argbCurrent, screenA, screenB, screenC); + fillTriangle(argbCurrent, screenA, screenC, screenD); + } public void fillTriangle(short colix, Point3i screenA, Point3i screenB, Point3i screenC) { @@ -537,12 +546,38 @@ triangle3d.fillTriangle(); } + public void fillTriangle(int argb, Point3f screenA, + Point3f screenB, Point3f screenC) { + argbCurrent = argb; + int[] t; + t = triangle3d.ax; + t[0] = (int)screenA.x; t[1] = (int)screenB.x; t[2] = (int)screenC.x; + t = triangle3d.ay; + t[0] = (int)screenA.y; t[1] = (int)screenB.y; t[2] = (int)screenC.y; + t = triangle3d.az; + t[0] = (int)screenA.z; t[1] = (int)screenB.z; t[2] = (int)screenC.z; + + triangle3d.fillTriangle(); + } + int intensity = 0; + void diff(Vector3f v, Point3i s1, Point3i s2) { + v.x = s1.x - s2.x; + v.y = s1.y - s2.y; + v.z = s1.z - s2.z; + } + void calcSurfaceShade(short colix, Point3i screenA, Point3i screenB, Point3i screenC) { + diff(vectorAB, screenB, screenA); + diff(vectorAC, screenC, screenA); + vectorNormal.cross(vectorAB, vectorAC); + int intensity = + vectorNormal.z >= 0 + ? calcIntensity(-vectorNormal.x, -vectorNormal.y, vectorNormal.z) + : calcIntensity(vectorNormal.x, vectorNormal.y, -vectorNormal.z); argbCurrent = getShades(colix)[intensity]; - intensity = (intensity + 10) & 63; } @@ -557,8 +592,8 @@ vectorNormal.cross(vectorAB, vectorAC); int intensity = vectorNormal.z >= 0 - ? calcIntensity(vectorNormal.x, -vectorNormal.y, vectorNormal.z) - : calcIntensity(-vectorNormal.x, vectorNormal.y, -vectorNormal.z); + ? calcIntensity(-vectorNormal.x, -vectorNormal.y, vectorNormal.z) + : calcIntensity(vectorNormal.x, vectorNormal.y, -vectorNormal.z); argbCurrent = getShades(colix)[intensity]; } |