⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cidade.cpp

📁 3d游戏开发的基础应用,3d场景的真实展现,可以是很好的教材
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    
	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 + -