您的位置:首页 > 其它

WorldWind学习系列六:渲染过程解析篇

2009-12-14 21:37 176 查看
  今天主要是分析学习了Render问题,搞明白了WorldWind中整个Render绘制处理过程。其中关键类是:RenderableObject.cs ,RenderobjectList.cs.
  WW中所有需要绘制的对象都RenderableObject,WW的各功能的执行显示都是不断地调用相应的Render方法。
1.RenderableObject整个绘制对象继承图

WavingFlagLayer类渲染代码

public override void Render(DrawArgs drawArgs)
{
if (!isInitialized)
return;
if (m_polygonFeature == null || !drawArgs.WorldCamera.ViewFrustum.Intersects(m_polygonFeature.BoundingBox))
return;
try
{
double offset = 0;

if (Bar3D != null && Bar3D.IsOn)
{

Bar3D.Render(drawArgs);
offset = Bar3D.RenderedHeight;

}

Cull cull = drawArgs.device.RenderState.CullMode;

drawArgs.device.RenderState.CullMode = Cull.None;

drawArgs.device.RenderState.ZBufferEnable = true;

drawArgs.device.TextureState[0].ColorOperation = TextureOperation.SelectArg1;

drawArgs.device.TextureState[0].ColorArgument1 = TextureArgument.TextureColor;

Vector3 surfacePos = MathEngine.SphericalToCartesian(m_latitude, m_longitude, World.EquatorialRadius);

Vector3 rc = new Vector3(

(float)drawArgs.WorldCamera.ReferenceCenter.X,

(float)drawArgs.WorldCamera.ReferenceCenter.Y,

(float)drawArgs.WorldCamera.ReferenceCenter.Z

);

Vector3 projectedPoint = drawArgs.WorldCamera.Project(surfacePos - rc);

int mouseBuffer = 15;
if (projectedPoint.X > DrawArgs.LastMousePosition.X - mouseBuffer &&

projectedPoint.X < DrawArgs.LastMousePosition.X + mouseBuffer &&

projectedPoint.Y > DrawArgs.LastMousePosition.Y - mouseBuffer &&

projectedPoint.Y < DrawArgs.LastMousePosition.Y + mouseBuffer)
{

if (!m_isMouseInside)
{

m_isMouseInside = true;

if (OnMouseEnterEvent != null)
{

OnMouseEnterEvent(this, null);

}

}

}

else
{

if (m_isMouseInside)
{

m_isMouseInside = false;

if (OnMouseLeaveEvent != null)
{

OnMouseLeaveEvent(this, null);

}

}

}

drawArgs.device.RenderState.CullMode = Cull.None;

if (ShowHighlight)

renderHighlight(drawArgs);

RenderFlag(drawArgs, offset);

drawArgs.device.RenderState.CullMode = cull;

}

catch (Exception ex)
{

Log.Write(ex);

}

}

本系列其他部分:

WorldWind学习系列五:插件加载过程全解析

WorldWind学习系列四:功能分析——Show Planet Axis、Show Position 、Show Cross Hairs功能

WorldWind学习系列三:简单功能分析——主窗体的键盘监听处理及拷贝和粘贴位置坐标功能

WorldWind学习系列三:功能分析——截屏功能和“关于”窗体分析

WorldWind学习系列二:擒贼先擒王篇2

WorldWind学习系列二:擒贼先擒王篇1

WorldWind学习系列一:顺利起航篇
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: