|
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.
|