11. cNodeTreeMesh::Render

 

因为渲染函数需要通过viewing frustum,你需要一条重载视角范围距离的路。如果你想画出网格的一部分,可以通过制定到视点的距离。比如,如果frustum可以看到20000单位,但你逆袭那个渲染5000单位的多边形,那么指定5000ZDistance

Render函数开始与计算viewing frustum和锁定顶点缓冲:

BOOL cNodeTreeMesh::Render(cFrustum *Frustum, float ZDistance)

{

D3DXMATRIX Matrix; // Matrix used for calculations

cFrustum ViewFrustum; // Local viewing frustum

// Error checking

if(m_Graphics==NULL || m_ParentNode==NULL || !m_NumPolygons)

return FALSE;

// Construct the viewing frustum (if none passed)

if((m_Frustum = Frustum) == NULL) {

ViewFrustum.Construct(m_Graphics, ZDistance);

m_Frustum = &ViewFrustum;

}

// Set the world transformation matrix to identity so that

// level mesh is rendered around the origin it was designed.

D3DXMatrixIdentity(&Matrix);

m_Graphics->GetDeviceCOM()->SetTransform(D3DTS_WORLD,&Matrix);

// Lock vertex buffers

for(unsigned long i=0;i<m_NumGroups;i++) {

m_Groups[i].VertexBuffer.Lock(0,0);

m_Groups[i].VertexPtr = /

(char*)m_Groups[i].VertexBuffer.GetPtr();

m_Groups[i].NumPolygonsToDraw = 0;

}

m_Mesh->m_Mesh->LockVertexBuffer(D3DLOCK_READONLY, /

(BYTE**)&m_VertexPtr);

 

在这一点,纹理组顶点缓冲被锁定并准备接收从锁定的资源网格顶点缓冲中的顶点信息(重调用AddNode函数).每个纹理组包含要绘出的多边形数量,并且执行下面的代码,所有的在view中的多边形被增加到纹理组的顶点缓冲。砸那是,所有锁定的顶点缓冲被解锁

// Store current time of render

m_Time = timeGetTime();

// Add all polygons to vertex buffer

AddNode(m_ParentNode);

// Unlock vertex buffers and draw

m_Mesh->m_Mesh->UnlockVertexBuffer();

for(i=0;i<m_NumGroups;i++) {

m_Groups[i].VertexBuffer.Unlock();

if(m_Groups[i].NumPolygonsToDraw) {

m_Graphics->GetDeviceCOM()->SetMaterial( /

&m_Mesh->m_Materials[i]);

m_Graphics->GetDeviceCOM()->SetTexture(0, /

m_Mesh->m_Textures[i]);

m_Groups[i].VertexBuffer.Render(0, /

m_Groups[i].NumPolygonsToDraw, D3DPT_TRIANGLELIST);

}

}

return TRUE;

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值