📄 cidade.cpp
字号:
for(r=raiz;r;r=r->nx) {
rN=rS=rW=rE=0.0f;
// Paredes
if(!r->e) {
criaParede(&(r->raiz), QUAD);
if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 4*sizeof(PAREDEVERTEX),
D3DUSAGE_WRITEONLY, PAREDEVERTEX::FVF,
D3DPOOL_MANAGED, &(r->raiz->buf), NULL ) ) )
{ return hr; }
r->raiz->buf->Lock( 0, 0, (void**)&vp, 0 );
vp[0].p = D3DXVECTOR3( -EstradaL/2.0f, 0.0f, 0.0f );
vp[0].color = r->Pe.color;
vp[1].p = D3DXVECTOR3( -EstradaL/2.0f, r->Pe.altura, 0.0f );
vp[1].color = r->Pe.color;
vp[2].p = D3DXVECTOR3( -EstradaL/2.0f, 0.0f, EstradaL );
vp[2].color = r->Pe.color;
vp[3].p = D3DXVECTOR3( -EstradaL/2.0f, r->Pe.altura, EstradaL );
vp[3].color = r->Pe.color;
r->raiz->buf->Unlock();
if(r->n)
if(r->Pe.altura>r->n->Pe.altura && r->n->Pe.altura) {
criaParede(&(r->raiz), QUAD);
if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 4*sizeof(PAREDEVERTEX),
D3DUSAGE_WRITEONLY, PAREDEVERTEX::FVF,
D3DPOOL_MANAGED, &(r->raiz->buf), NULL ) ) )
{ return hr; }
r->raiz->buf->Lock( 0, 0, (void**)&vp, 0 );
vp[0].p = D3DXVECTOR3( -EstradaL/2.0f, r->n->Pe.altura, EstradaL );
vp[0].color = r->Pe.color;
vp[1].p = D3DXVECTOR3( -EstradaL/2.0f, r->Pe.altura, EstradaL );
vp[1].color = r->Pe.color;
vp[2].p = D3DXVECTOR3( -EstradaL, r->n->Pe.altura, EstradaL );
vp[2].color = r->Pe.color;
vp[3].p = D3DXVECTOR3( -EstradaL, r->Pe.altura, EstradaL );
vp[3].color = r->Pe.color;
r->raiz->buf->Unlock();
}
if(r->s)
if(r->Pe.altura>r->s->Pe.altura && r->s->Pe.altura) {
criaParede(&(r->raiz), QUAD);
if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 4*sizeof(PAREDEVERTEX),
D3DUSAGE_WRITEONLY, PAREDEVERTEX::FVF,
D3DPOOL_MANAGED, &(r->raiz->buf), NULL ) ) )
{ return hr; }
r->raiz->buf->Lock( 0, 0, (void**)&vp, 0 );
vp[0].p = D3DXVECTOR3( -EstradaL, r->s->Pe.altura, 0.0f );
vp[0].color = r->Pe.color;
vp[1].p = D3DXVECTOR3( -EstradaL, r->Pe.altura, 0.0f );
vp[1].color = r->Pe.color;
vp[2].p = D3DXVECTOR3( -EstradaL/2.0f, r->s->Pe.altura, 0.0f );
vp[2].color = r->Pe.color;
vp[3].p = D3DXVECTOR3( -EstradaL/2.0f, r->Pe.altura, 0.0f );
vp[3].color = r->Pe.color;
r->raiz->buf->Unlock();
}
// Telhado
if(r->Pe.altura<TelhAlt) {
criaParede(&(r->raiz), FAN4);
if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 6*sizeof(PAREDEVERTEX),
D3DUSAGE_WRITEONLY, PAREDEVERTEX::FVF,
D3DPOOL_MANAGED, &(r->raiz->buf), NULL ) ) )
{ return hr; }
r->raiz->buf->Lock( 0, 0, (void**)&vp, 0 );
vp[0].p = D3DXVECTOR3( -EstradaL, r->Pe.altura+TelhAltura, EstradaL/2.0f );
vp[0].color = TelhColor;
vp[1].p = D3DXVECTOR3( -EstradaL/2.0f, r->Pe.altura, 0.0f );
vp[1].color = TelhColor;
vp[2].p = D3DXVECTOR3( -EstradaL-EstradaL/2.0f, r->Pe.altura, 0.0f );
vp[2].color = TelhColor;
vp[3].p = D3DXVECTOR3( -EstradaL-EstradaL/2.0f, r->Pe.altura, EstradaL );
vp[3].color = TelhColor;
vp[4].p = D3DXVECTOR3( -EstradaL/2.0f, r->Pe.altura, EstradaL );
vp[4].color = TelhColor;
vp[5].p = D3DXVECTOR3( -EstradaL/2.0f, r->Pe.altura, 0.0f );
vp[5].color = TelhColor;
r->raiz->buf->Unlock();
}
// Passeio
re=rd=false;
if(r->n)
if(r->n->e) re=true;
if(r->s)
if(r->s->e) rd=true;
criaParede(&(r->raiz), QUAD);
if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 4*sizeof(PAREDEVERTEX),
D3DUSAGE_WRITEONLY, PAREDEVERTEX::FVF,
D3DPOOL_MANAGED, &(r->raiz->buf), NULL ) ) )
{ return hr; }
r->raiz->buf->Lock( 0, 0, (void**)&vp, 0 );
vp[0].p = D3DXVECTOR3( -EstradaL/2.0f+PasseioL, PasAlt, 0.0f-rd*PasseioL );
vp[0].color = PasColor1;
vp[1].p = D3DXVECTOR3( -EstradaL/2.0f, PasAlt, 0.0f );
vp[1].color = PasColor1;
vp[2].p = D3DXVECTOR3( -EstradaL/2.0f+PasseioL, PasAlt, EstradaL+re*PasseioL );
vp[2].color = PasColor1;
vp[3].p = D3DXVECTOR3( -EstradaL/2.0f, PasAlt, EstradaL );
vp[3].color = PasColor1;
r->raiz->buf->Unlock();
criaParede(&(r->raiz), QUAD);
if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 4*sizeof(PAREDEVERTEX),
D3DUSAGE_WRITEONLY, PAREDEVERTEX::FVF,
D3DPOOL_MANAGED, &(r->raiz->buf), NULL ) ) )
{ return hr; }
r->raiz->buf->Lock( 0, 0, (void**)&vp, 0 );
vp[0].p = D3DXVECTOR3( -EstradaL/2.0f+PasseioL, 0.0f, 0.0f-rd*PasseioL );
vp[0].color = PasColor2;
vp[1].p = D3DXVECTOR3( -EstradaL/2.0f+PasseioL, PasAlt, 0.0f-rd*PasseioL );
vp[1].color = PasColor2;
vp[2].p = D3DXVECTOR3( -EstradaL/2.0f+PasseioL, 0.0f, EstradaL+re*PasseioL );
vp[2].color = PasColor2;
vp[3].p = D3DXVECTOR3( -EstradaL/2.0f+PasseioL, PasAlt, EstradaL+re*PasseioL );
vp[3].color = PasColor2;
r->raiz->buf->Unlock();
rE=1.0f;
// Semaforo
if(r->s)
if((r->s->e && r->s->s) || (r->s->e && r->s->w) || (r->s->w && r->s->s))
criaSemaforo(&(r->rsem), D3DXVECTOR3(EstradaL/2.0f-PasseioL/2.0f, -PasAlt, 0.0f), &Sns, SUL);
}
if(!r->w) {
criaParede(&(r->raiz), QUAD);
if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 4*sizeof(PAREDEVERTEX),
D3DUSAGE_WRITEONLY, PAREDEVERTEX::FVF,
D3DPOOL_MANAGED, &(r->raiz->buf), NULL ) ) )
{ return hr; }
r->raiz->buf->Lock( 0, 0, (void**)&vp, 0 );
vp[0].p = D3DXVECTOR3( EstradaL/2.0f, 0.0f, EstradaL );
vp[0].color = r->Pw.color;
vp[1].p = D3DXVECTOR3( EstradaL/2.0f, r->Pw.altura, EstradaL );
vp[1].color = r->Pw.color;
vp[2].p = D3DXVECTOR3( EstradaL/2.0f, 0.0f, 0.0f );
vp[2].color = r->Pw.color;
vp[3].p = D3DXVECTOR3( EstradaL/2.0f, r->Pw.altura, 0.0f );
vp[3].color = r->Pw.color;
r->raiz->buf->Unlock();
if(r->n)
if(r->Pw.altura>r->n->Pw.altura && r->n->Pw.altura) {
criaParede(&(r->raiz), QUAD);
if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 4*sizeof(PAREDEVERTEX),
D3DUSAGE_WRITEONLY, PAREDEVERTEX::FVF,
D3DPOOL_MANAGED, &(r->raiz->buf), NULL ) ) )
{ return hr; }
r->raiz->buf->Lock( 0, 0, (void**)&vp, 0 );
vp[0].p = D3DXVECTOR3( EstradaL, r->n->Pw.altura, EstradaL );
vp[0].color = r->Pw.color;
vp[1].p = D3DXVECTOR3( EstradaL, r->Pw.altura, EstradaL );
vp[1].color = r->Pw.color;
vp[2].p = D3DXVECTOR3( EstradaL/2.0f, r->n->Pw.altura, EstradaL );
vp[2].color = r->Pw.color;
vp[3].p = D3DXVECTOR3( EstradaL/2.0f, r->Pw.altura, EstradaL );
vp[3].color = r->Pw.color;
r->raiz->buf->Unlock();
}
if(r->s)
if(r->Pw.altura>r->s->Pw.altura && r->s->Pw.altura) {
criaParede(&(r->raiz), QUAD);
if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 4*sizeof(PAREDEVERTEX),
D3DUSAGE_WRITEONLY, PAREDEVERTEX::FVF,
D3DPOOL_MANAGED, &(r->raiz->buf), NULL ) ) )
{ return hr; }
r->raiz->buf->Lock( 0, 0, (void**)&vp, 0 );
vp[0].p = D3DXVECTOR3( EstradaL/2.0f, r->s->Pw.altura, 0.0f );
vp[0].color = r->Pw.color;
vp[1].p = D3DXVECTOR3( EstradaL/2.0f, r->Pw.altura, 0.0f );
vp[1].color = r->Pw.color;
vp[2].p = D3DXVECTOR3( EstradaL, r->s->Pw.altura, 0.0f );
vp[2].color = r->Pw.color;
vp[3].p = D3DXVECTOR3( EstradaL, r->Pw.altura, 0.0f );
vp[3].color = r->Pw.color;
r->raiz->buf->Unlock();
}
// Telhado
if(r->Pw.altura<TelhAlt) {
criaParede(&(r->raiz), FAN4);
if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 6*sizeof(PAREDEVERTEX),
D3DUSAGE_WRITEONLY, PAREDEVERTEX::FVF,
D3DPOOL_MANAGED, &(r->raiz->buf), NULL ) ) )
{ return hr; }
r->raiz->buf->Lock( 0, 0, (void**)&vp, 0 );
vp[0].p = D3DXVECTOR3( EstradaL, r->Pw.altura+TelhAltura, EstradaL/2.0f );
vp[0].color = TelhColor;
vp[1].p = D3DXVECTOR3( EstradaL+EstradaL/2.0f, r->Pw.altura, 0.0f );
vp[1].color = TelhColor;
vp[2].p = D3DXVECTOR3( EstradaL/2.0f, r->Pw.altura, 0.0f );
vp[2].color = TelhColor;
vp[3].p = D3DXVECTOR3( EstradaL/2.0f, r->Pw.altura, EstradaL );
vp[3].color = TelhColor;
vp[4].p = D3DXVECTOR3( EstradaL+EstradaL/2.0f, r->Pw.altura, EstradaL );
vp[4].color = TelhColor;
vp[5].p = D3DXVECTOR3( EstradaL+EstradaL/2.0f, r->Pw.altura, 0.0f );
vp[5].color = TelhColor;
r->raiz->buf->Unlock();
}
// Passeio
re=rd=false;
if(r->n)
if(r->n->w) rd=true;
if(r->s)
if(r->s->w) re=true;
criaParede(&(r->raiz), QUAD);
if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 4*sizeof(PAREDEVERTEX),
D3DUSAGE_WRITEONLY, PAREDEVERTEX::FVF,
D3DPOOL_MANAGED, &(r->raiz->buf), NULL ) ) )
{ return hr; }
r->raiz->buf->Lock( 0, 0, (void**)&vp, 0 );
vp[0].p = D3DXVECTOR3( EstradaL/2.0f-PasseioL, PasAlt, EstradaL+rd*PasseioL );
vp[0].color = PasColor1;
vp[1].p = D3DXVECTOR3( EstradaL/2.0f, PasAlt, EstradaL );
vp[1].color = PasColor1;
vp[2].p = D3DXVECTOR3( EstradaL/2.0f-PasseioL, PasAlt, 0.0f-re*PasseioL );
vp[2].color = PasColor1;
vp[3].p = D3DXVECTOR3( EstradaL/2.0f, PasAlt, 0.0f );
vp[3].color = PasColor1;
r->raiz->buf->Unlock();
criaParede(&(r->raiz), QUAD);
if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 4*sizeof(PAREDEVERTEX),
D3DUSAGE_WRITEONLY, PAREDEVERTEX::FVF,
D3DPOOL_MANAGED, &(r->raiz->buf), NULL ) ) )
{ return hr; }
r->raiz->buf->Lock( 0, 0, (void**)&vp, 0 );
vp[0].p = D3DXVECTOR3( EstradaL/2.0f-PasseioL, 0.0f, EstradaL+rd*PasseioL );
vp[0].color = PasColor2;
vp[1].p = D3DXVECTOR3( EstradaL/2.0f-PasseioL, PasAlt, EstradaL+rd*PasseioL );
vp[1].color = PasColor2;
vp[2].p = D3DXVECTOR3( EstradaL/2.0f-PasseioL, 0.0f, 0.0f-re*PasseioL );
vp[2].color = PasColor2;
vp[3].p = D3DXVECTOR3( EstradaL/2.0f-PasseioL, PasAlt, 0.0f-re*PasseioL );
vp[3].color = PasColor2;
r->raiz->buf->Unlock();
rW=1.0f;
if(r->n)
if((r->n->w && r->n->n) || (r->n->w && r->n->e) || (r->n->e && r->n->n))
criaSemaforo(&(r->rsem), D3DXVECTOR3(-EstradaL/2.0f+PasseioL/2.0f, -PasAlt, -EstradaL), &Sns, NORTE);
}
if(!r->s) {
criaParede(&(r->raiz), QUAD);
if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 4*sizeof(PAREDEVERTEX),
D3DUSAGE_WRITEONLY, PAREDEVERTEX::FVF,
D3DPOOL_MANAGED, &(r->raiz->buf), NULL ) ) )
{ return hr; }
r->raiz->buf->Lock( 0, 0, (void**)&vp, 0 );
vp[0].p = D3DXVECTOR3( EstradaL/2.0f, 0.0f, 0.0f );
vp[0].color = r->Ps.color;
vp[1].p = D3DXVECTOR3( EstradaL/2.0f, r->Ps.altura, 0.0f );
vp[1].color = r->Ps.color;
vp[2].p = D3DXVECTOR3( -EstradaL/2.0f, 0.0f, 0.0f );
vp[2].color = r->Ps.color;
vp[3].p = D3DXVECTOR3( -EstradaL/2.0f, r->Ps.altura, 0.0f );
vp[3].color = r->Ps.color;
r->raiz->buf->Unlock();
if(r->e)
if(r->Ps.altura>r->e->Ps.altura && r->e->Ps.altura) {
criaParede(&(r->raiz), QUAD);
if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 4*sizeof(PAREDEVERTEX),
D3DUSAGE_WRITEONLY, PAREDEVERTEX::FVF,
D3DPOOL_MANAGED, &(r->raiz->buf), NULL ) ) )
{ return hr; }
r->raiz->buf->Lock( 0, 0, (void**)&vp, 0 );
vp[0].p = D3DXVECTOR3( -EstradaL/2.0f, r->e->Ps.altura, 0.0f );
vp[0].color = r->Ps.color;
vp[1].p = D3DXVECTOR3( -EstradaL/2.0f, r->Ps.altura, 0.0f );
vp[1].color = r->Ps.color;
vp[2].p = D3DXVECTOR3( -EstradaL/2.0f, r->e->Ps.altura, -EstradaL/2.0f );
vp[2].color = r->Ps.color;
vp[3].p = D3DXVECTOR3( -EstradaL/2.0f, r->Ps.altura, -EstradaL/2.0f );
vp[3].color = r->Ps.color;
r->raiz->buf->Unlock();
}
if(r->w)
if(r->Ps.altura>r->w->Ps.altura && r->w->Ps.altura) {
criaParede(&(r->raiz), QUAD);
if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 4*sizeof(PAREDEVERTEX),
D3DUSAGE_WRITEONLY, PAREDEVERTEX::FVF,
D3DPOOL_MANAGED, &(r->raiz->buf), NULL ) ) )
{ return hr; }
r->raiz->buf->Lock( 0, 0, (void**)&vp, 0 );
vp[0].p = D3DXVECTOR3( EstradaL/2.0f, r->w->Ps.altura, -EstradaL/2.0f );
vp[0].color = r->Ps.color;
vp[1].p = D3DXVECTOR3( EstradaL/2.0f, r->Ps.altura, -EstradaL/2.0f );
vp[1].color = r->Ps.color;
vp[2].p = D3DXVECTOR3( EstradaL/2.0f, r->w->Ps.altura, 0.0f );
vp[2].color = r->Ps.color;
vp[3].p = D3DXVECTOR3( EstradaL/2.0f, r->Ps.altura, 0.0f );
vp[3].color = r->Ps.color;
r->raiz->buf->Unlock();
}
// Telhado
if( !Esquina(r, SUL) && r->Ps.altura<TelhAlt ) {
criaParede(&(r->raiz), FAN4);
if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 6*sizeof(PAREDEVERTEX),
D3DUSAGE_WRITEONLY, PAREDEVERTEX::FVF,
D3DPOOL_MANAGED, &(r->raiz->buf), NULL ) ) )
{ return hr; }
r->raiz->buf->Lock( 0, 0, (void**)&vp, 0 );
vp[0].p = D3DXVECTOR3( 0.0f, r->Ps.altura+TelhAltura, -EstradaL/2.0f );
vp[0].color = TelhColor;
vp[1].p = D3DXVECTOR3( EstradaL/2.0f, r->Ps.altura, 0.0f );
vp[1].color = TelhColor;
vp[2].p = D3DXVECTOR3( EstradaL/2.0f, r->Ps.altura, -EstradaL );
vp[2].color = TelhColor;
vp[3].p = D3DXVECTOR3( -EstradaL/2.0f, r->Ps.altura, -EstradaL );
vp[3].color = TelhColor;
vp[4].p = D3DXVECTOR3( -EstradaL/2.0f, r->Ps.altura, 0.0f );
vp[4].color = TelhColor;
vp[5].p = D3DXVECTOR3( EstradaL/2.0f, r->Ps.altura, 0.0f );
vp[5].color = TelhColor;
r->raiz->buf->Unlock();
}
// Passeio
re=rd=false;
if(r->w)
if(r->w->s) rd=true;
if(r->e)
if(r->e->s) re=true;
criaParede(&(r->raiz), QUAD);
if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 4*sizeof(PAREDEVERTEX),
D3DUSAGE_WRITEONLY, PAREDEVERTEX::FVF,
D3DPOOL_MANAGED, &(r->raiz->buf), NULL ) ) )
{ return hr; }
r->raiz->buf->Lock( 0, 0, (void**)&vp, 0 );
vp[0].p = D3DXVECTOR3( EstradaL/2.0f+rd*PasseioL, PasAlt, PasseioL );
vp[0].color = PasColor1;
vp[1].p = D3DXVECTOR3( EstradaL/2.0f, PasAlt, 0.0f );
vp[1].color = PasColor1;
vp[2].p = D3DXVECTOR3( -EstradaL/2.0f-re*PasseioL, PasAlt, PasseioL );
vp[2].color = PasColor1;
vp[3].p = D3DXVECTOR3( -EstradaL/2.0f, PasAlt, 0.0f );
vp[3].color = PasColor1;
r->raiz->buf->Unlock();
criaParede(&(r->raiz), QUAD);
if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 4*sizeof(PAREDEVERTEX),
D3DUSAGE_WRITEONLY, PAREDEVERTEX::FVF,
D3DPOOL_MANAGED, &(r->raiz->buf), NULL ) ) )
{ return hr; }
r->raiz->buf->Lock( 0, 0, (void**)&vp, 0 );
vp[0].p = D3DXVECTOR3( EstradaL/2.0f+rd*PasseioL, 0.0f, PasseioL );
vp[0].color = PasColor2;
vp[1].p = D3DXVECTOR3( EstradaL/2.0f+rd*PasseioL, PasAlt, PasseioL );
vp[1].color = PasColor2;
vp[2].p = D3DXVECTOR3( -EstradaL/2.0f-re*PasseioL, 0.0f, PasseioL );
vp[2].color = PasColor2;
vp[3].p = D3DXVECTOR3( -EstradaL/2.0f-re*PasseioL, PasAlt, PasseioL );
vp[3].color = PasColor2;
r->raiz->buf->Unlock();
rS=1.0f;
if(r->w)
if((r->w->s && r->w->w) || (r->w->s && r->w->n) || (r->w->n && r->w->w))
criaSemaforo(&(r->rsem), D3DXVECTOR3(-EstradaL/2.0f, -PasAlt, -PasseioL/2.0f), &Sew, OESTE);
}
if(!r->n) {
criaParede(&(r->raiz), QUAD);
if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 4*sizeof(PAREDEVERTEX),
D3DUSAGE_WRITEONLY, PAREDEVERTEX::FVF,
D3DPOOL_MANAGED, &(r->raiz->buf), NULL ) ) )
{ return hr; }
r->raiz->buf->Lock( 0, 0, (void**)&vp, 0 );
vp[0].p = D3DXVECTOR3( -EstradaL/2.0f, 0.0f, EstradaL );
vp[0].color = r->Pn.color;
vp[1].p = D3DXVECTOR3( -EstradaL/2.0f, r->Pn.altura, EstradaL );
vp[1].color = r->Pn.color;
vp[2].p = D3DXVECTOR3( EstradaL/2.0f, 0.0f, EstradaL );
vp[2].color = r->Pn.color;
vp[3].p = D3DXVECTOR3( EstradaL/2.0f, r->Pn.altura, EstradaL );
vp[3].color = r->Pn.color;
r->raiz->buf->Unlock();
if(r->e)
if(r->Pn.altura>r->e->Pn.altura && r->e->Pn.altura) {
criaParede(&(r->raiz), QUAD);
if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 4*sizeof(PAREDEVERTEX),
D3DUSAGE_WRITEONLY, PAREDEVERTEX::FVF,
D3DPOOL_MANAGED, &(r->raiz->buf), NULL ) ) )
{ return hr; }
r->raiz->buf->Lock( 0, 0, (void**)&vp, 0 );
vp[0].p = D3DXVECTOR3( -EstradaL/2.0f, r->e->Pn.altura, EstradaL+EstradaL/2.0f );
vp[0].color = r->Pn.color;
vp[1].p = D3DXVECTOR3( -EstradaL/2.0f, r->Pn.altura, EstradaL+EstradaL/2.0f );
vp[1].color = r->Pn.color;
vp[2].p = D3DXVECTOR3( -EstradaL/2.0f, r->e->Pn.altura, EstradaL );
vp[2].color = r->Pn.color;
vp[3].p = D3DXVECTOR3( -EstradaL/2.0f, r->Pn.altura, EstradaL );
vp[3].color = r->Pn.color;
r->raiz->buf->Unlock();
}
if(r->w)
if(r->Pn.altura>r->w->Pn.altura && r->w->Pn.altura) {
criaParede(&(r->raiz), QUAD);
if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 4*sizeof(PAREDEVERTEX),
D3DUSAGE_WRITEONLY, PAREDEVERTEX::FVF,
D3DPOOL_MANAGED, &(r->raiz->buf), NULL ) ) )
{ return hr; }
r->raiz->buf->Lock( 0, 0, (void**)&vp, 0 );
vp[0].p = D3DXVECTOR3( EstradaL/2.0f, r->w->Pn.altura, EstradaL );
vp[0].color = r->Pn.color;
vp[1].p = D3DXVECTOR3( EstradaL/2.0f, r->Pn.altura, EstradaL );
vp[1].color = r->Pn.color;
vp[2].p = D3DXVECTOR3( EstradaL/2.0f, r->w->Pn.altura, EstradaL+EstradaL/2.0f );
vp[2].color = r->Pn.color;
vp[3].p = D3DXVECTOR3( EstradaL/2.0f, r->Pn.altura, EstradaL+EstradaL/2.0f );
vp[3].color = r->Pn.color;
r->raiz->buf->Unlock();
}
// Telhado
if( !Esquina(r, NORTE) && r->Pn.altura<TelhAlt ) {
criaParede(&(r->raiz), FAN4);
if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 6*sizeof(PAREDEVERTEX),
D3DUSAGE_WRITEONLY, PAREDEVERTEX::FVF,
D3DPOOL_MANAGED, &(r->raiz->buf), NULL ) ) )
{ return hr; }
r->raiz->buf->Lock( 0, 0, (void**)&vp, 0 );
vp[0].p = D3DXVECTOR3( 0.0f, r->Pn.altura+TelhAltura, EstradaL+EstradaL/2.0f );
vp[0].color = TelhColor;
vp[1].p = D3DXVECTOR3( EstradaL/2.0f, r->Pn.altura, 2.0f*EstradaL );
vp[1].color = TelhColor;
vp[2].p = D3DXVECTOR3( EstradaL/2.0f, r->Pn.altura, EstradaL );
vp[2].color = TelhColor;
vp[3].p = D3DXVECTOR3( -EstradaL/2.0f, r->Pn.altura, EstradaL )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -