From: <axl...@us...> - 2009-05-16 13:03:28
|
Revision: 258 http://hgengine.svn.sourceforge.net/hgengine/?rev=258&view=rev Author: axlecrusher Date: 2009-05-16 13:03:19 +0000 (Sat, 16 May 2009) Log Message: ----------- Cylindrical Billboards looks like it works Modified Paths: -------------- Mercury2/scenegraph.xml Mercury2/src/BillboardNode.cpp Mercury2/src/Viewport.cpp Mercury2/src/Viewport.h Modified: Mercury2/scenegraph.xml =================================================================== --- Mercury2/scenegraph.xml 2009-05-16 04:36:19 UTC (rev 257) +++ Mercury2/scenegraph.xml 2009-05-16 13:03:19 UTC (rev 258) @@ -1,35 +1,35 @@ <SceneGraph> - <node type="transformnode" movy="0" rotx="90"> - <node type="transformnode" movy="-8" movz="5"> + <node type="transformnode" rotx="0" roty="-90"> + <node type="transformnode" movx="-6" movz="5"> <node type="viewport" fov="45" aspect="1.3333" near="0.01" far="100"/> </node> </node> <node type="transformnode" rotx="-90" movz="-10" movx="0" movy="-5"> - <node type="renderablenode"> - <asset type="texture" file="map.png"/> - <asset type="hgmdlmodel" file="map.hgmdl" /> - </node> + <node type="renderablenode"> + <asset type="texture" file="map.png"/> + <asset type="hgmdlmodel" file="map.hgmdl" /> </node> - <node type="renderablenode" name="lampForest"> - <asset type="texture" file="lamp.png"/> - <node type="transformnode" movz="-5" movx="0" movy="0" name="lamprow" > - <node type="transformnode" rotx="-90" name="lamp"> - <node type="renderablenode" > - <asset type="hgmdlmodel" file="lamp.hgmdl" /> - </node> + </node> + <node type="renderablenode" name="lampForest"> + <asset type="texture" file="lamp.png"/> + <node type="transformnode" movz="-5" movx="0" movy="0" name="lamprow" > + <node type="transformnode" rotx="-90" name="lamp"> + <node type="billboard" > + <asset type="hgmdlmodel" file="lamp.hgmdl" /> </node> - <node type="transformnode" movx="1" fallback="lampForest.lamprow.lamp" /> - <node type="transformnode" movx="2" fallback="lampForest.lamprow.lamp" /> - <node type="transformnode" movx="3" fallback="lampForest.lamprow.lamp" /> - <node type="transformnode" movx="-1" fallback="lampForest.lamprow.lamp" /> - <node type="transformnode" movx="-2" fallback="lampForest.lamprow.lamp" /> - <node type="transformnode" movx="-3" fallback="lampForest.lamprow.lamp" /> </node> - <node type="transformnode" movz="-6" fallback="lampForest.lamprow"/> - <node type="transformnode" movz="-7" fallback="lampForest.lamprow"/> - <node type="transformnode" movz="-8" fallback="lampForest.lamprow"/> - <node type="transformnode" movz="-9" fallback="lampForest.lamprow"/> - <node type="transformnode" movz="-4" fallback="lampForest.lamprow"/> - <node type="transformnode" movz="-3" fallback="lampForest.lamprow"/> + <node type="transformnode" movx="1" fallback="lampForest.lamprow.lamp" /> + <node type="transformnode" movx="2" fallback="lampForest.lamprow.lamp" /> + <node type="transformnode" movx="3" fallback="lampForest.lamprow.lamp" /> + <node type="transformnode" movx="-1" fallback="lampForest.lamprow.lamp" /> + <node type="transformnode" movx="-2" fallback="lampForest.lamprow.lamp" /> + <node type="transformnode" movx="-3" fallback="lampForest.lamprow.lamp" /> </node> + <node type="transformnode" movz="-6" fallback="lampForest.lamprow"/> + <node type="transformnode" movz="-7" fallback="lampForest.lamprow"/> + <node type="transformnode" movz="-8" fallback="lampForest.lamprow"/> + <node type="transformnode" movz="-9" fallback="lampForest.lamprow"/> + <node type="transformnode" movz="-4" fallback="lampForest.lamprow"/> + <node type="transformnode" movz="-3" fallback="lampForest.lamprow"/> + </node> </SceneGraph> Modified: Mercury2/src/BillboardNode.cpp =================================================================== --- Mercury2/src/BillboardNode.cpp 2009-05-16 04:36:19 UTC (rev 257) +++ Mercury2/src/BillboardNode.cpp 2009-05-16 13:03:19 UTC (rev 258) @@ -8,23 +8,30 @@ { MercuryMatrix m = RenderableNode::ManipulateMatrix( matrix ); - MercuryVertex center(m.Ptr()[3], m.Ptr()[7], m.Ptr()[11]); + //Compute the object's center point (position?) in world space + MercuryVertex center(0,0,0,1); + center = matrix * center; -// printf( "%f %f %f %f %f %f\n", center[0], center[1], center[2], EYE[0], EYE[1], EYE[2] ); -// MercuryVector v = center.Normalize() *-1; + //vector from object to eye projected on XZ + MercuryVector objToEye = (EYE - center); objToEye[1] = 0; objToEye.NormalizeSelf(); + + MercuryVector objLookAt(0,0,1); //origional look vector of object + objLookAt = matrix * objLookAt; //convert to world space + objLookAt.NormalizeSelf(); +// objLookAt.Print(); + +// MercuryVector up = (objLookAt.CrossProduct( objToEye )).Normalize(); +// up = objLookAt; +// up.Print(); + MercuryVector up(0,0,1); //we wan't the camera's up + + float angleCos = LOOKAT.DotProduct(objToEye); - MercuryVector v = (EYE - center).Normalize(); - MercuryVector up = (LOOKAT.CrossProduct( v )).Normalize(); - - float angleCos = LOOKAT.DotProduct(v); - - if ((angleCos < 0.99990) && (angleCos > -0.9999)) { float f = ACOS(angleCos)*RADDEG; - MercuryMatrix mtmp; - mtmp.RotateAngAxis(-f, up[0], up[1], up[2]); + mtmp.RotateAngAxis(f, up[0], up[1], up[2]); m = m * mtmp; } Modified: Mercury2/src/Viewport.cpp =================================================================== --- Mercury2/src/Viewport.cpp 2009-05-16 04:36:19 UTC (rev 257) +++ Mercury2/src/Viewport.cpp 2009-05-16 13:03:19 UTC (rev 258) @@ -29,15 +29,23 @@ glMatrixMode(GL_MODELVIEW); + //compute the position of the eye + EYE = MercuryVertex(0,0,0,1); + EYE = matrix * EYE; + EYE *= -1; + +// VIEWMATRIX = MercuryMatrix::Identity(); +// VIEWMATRIX.Scale(1,1,1); +// VIEWMATRIX.Translate( EYE[0], EYE[1], EYE[2] ); +// VIEWMATRIX.RotateXYZ( matrix[0][0], matrix[1][1], matrix[2][2] ); VIEWMATRIX = matrix; - EYE[0] = matrix[0][3]; // same as float* [3] - EYE[1] = matrix[1][3]; // same as float* [7] - EYE[2] = matrix[2][3]; // same as float* [11] - EYE *= -1; +// matrix.Print(); MercuryVector l(0,0,1); LOOKAT = (matrix * l).Normalize(); -// LOOKAT.Print(); + + //Sets up the clipping frustum + m_frustum.LookAt(EYE, LOOKAT, MercuryVertex(0,1,0)); } void Viewport::LoadFromXML(const XMLNode& node) @@ -54,8 +62,6 @@ // StrToFloat(node.Attribute("aspect")), StrToFloat(node.Attribute("near")), StrToFloat(node.Attribute("far"))); - - m_frustum.LookAt(MercuryVertex(), MercuryVertex(0,0,1), MercuryVertex(0,1,0)); RenderableNode::LoadFromXML(node); } Modified: Mercury2/src/Viewport.h =================================================================== --- Mercury2/src/Viewport.h 2009-05-16 04:36:19 UTC (rev 257) +++ Mercury2/src/Viewport.h 2009-05-16 13:03:19 UTC (rev 258) @@ -19,7 +19,7 @@ virtual void PreRender(const MercuryMatrix& matrix); virtual void LoadFromXML(const XMLNode& node); - + GENRTTI(Viewport); private: Frustum m_frustum; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |