void CGraphics::DrawBox(float fLeft, float fTop, float fWidth, float fHeight, DWORD dwColorBox) { /* // Begin the sprite m_pSprite->Begin( D3DXSPRITE_ALPHABLEND | D3DXSPRITE_SORT_TEXTURE ); // Generate the matrix D3DXMATRIX matrix; D3DXMatrixTransformation2D( &matrix, NULL, 0.0f, &D3DXVECTOR2( fWidth, fHeight ), NULL, 0.0f, &D3DXVECTOR2( fLeft, fTop ) ); // Set the sprite transform m_pSprite->SetTransform( &matrix ); // Draw the box m_pSprite->Draw( m_pPixelTexture, NULL, NULL, NULL, dwColorBox ); // End the sprite* m_pSprite->End( );*/ D3DVERTEX vertex[4]; vertex[0] = D3DVERTEX(fLeft, fTop, 0.0f, 1.0f, dwColorBox); vertex[1] = D3DVERTEX((fLeft + fWidth), fTop, 0.0f, 1.0f, dwColorBox); vertex[2] = D3DVERTEX((fLeft + fWidth), (fTop + fHeight), 0.0f, 1.0f, dwColorBox); vertex[3] = D3DVERTEX(fLeft, (fTop + fHeight), 0.0f, 1.0f, dwColorBox); short indices[6] = {0,1,2,0,2,3}; m_pDevice->SetTexture(0, NULL); m_pDevice->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE); m_pDevice->DrawIndexedPrimitiveUP(D3DPT_TRIANGLELIST, 0, 4, 2, &indices[0], D3DFMT_INDEX16, &vertex[0], sizeof(D3DVERTEX)); }
CSelectSrv::CSelectSrv():CBMWnd() { m_ppxSrvBtn = NULL; D3DVECTOR vNorm(0, 0, -1); m_avBillBoard[0] = D3DVERTEX(D3DVECTOR(-0.5f, 0.5f, 0), vNorm, 0, 0); m_avBillBoard[1] = D3DVERTEX(D3DVECTOR(-0.5f,-0.5f, 0), vNorm, 0, 1); m_avBillBoard[2] = D3DVERTEX(D3DVECTOR( 0.5f, 0.5f, 0), vNorm, 1, 0); m_avBillBoard[3] = D3DVERTEX(D3DVECTOR( 0.5f,-0.5f, 0), vNorm, 1, 1); }
void RenderSquareShadow(LPDIRECT3DDEVICE7 lpDevice,float x,float y,float z,float w,float h) { WORD wIndices[] = { 0,1,2, 3,2,1, 1,5,3, 3,5,7, 0,4,1, 1,4,5, 0,2,4, 4,2,6, 2,3,6, 6,3,7, }; D3DLIGHT7 light; lpDevice->GetLight(0,&light); D3DVECTOR length=Normalize(light.dvDirection)*(-100); D3DVERTEX v[8]; v[0] = D3DVERTEX( D3DVECTOR( x-w/2, y, z-h/2 ),D3DVECTOR(0,1,0), 0, 1 ); v[1] = D3DVERTEX( D3DVECTOR( x-w/2, y, z+h/2 ),D3DVECTOR(0,1,0), 0, 0 ); v[2] = D3DVERTEX( D3DVECTOR( x+w/2, y, z-h/2 ),D3DVECTOR(0,1,0), 1, 1 ); v[3] = D3DVERTEX( D3DVECTOR( x+w/2, y, z+h/2 ),D3DVECTOR(0,1,0), 1, 0 ); v[4] = D3DVERTEX( D3DVECTOR( x-w/2, y, z-h/2 )-length,D3DVECTOR(0,1,0), 0, 0 ); v[5] = D3DVERTEX( D3DVECTOR( x-w/2, y, z+h/2 )-length,D3DVECTOR(0,1,0), 0, 0 ); v[6] = D3DVERTEX( D3DVECTOR( x+w/2, y, z-h/2 )-length,D3DVECTOR(0,1,0), 0, 0 ); v[7] = D3DVERTEX( D3DVECTOR( x+w/2, y, z+h/2 )-length,D3DVECTOR(0,1,0), 0, 0 ); RenderShadow(lpDevice,v,8,wIndices,sizeof(wIndices)/sizeof(wIndices[0])); }
VOID CImageHandler::InitAllImage() { for ( INT nCnt = 0; nCnt < _MAX_IMAGE; nCnt++ ) m_xImageList[nCnt].Init(); ZeroMemory(m_nLoadedMagic, sizeof(INT)*_MAX_MAGIC); D3DVECTOR vNorm(0, 0, -1); m_avBillBoard[0] = D3DVERTEX(D3DVECTOR(-0.5f, 0.5f, 0), vNorm, 0, 0); m_avBillBoard[1] = D3DVERTEX(D3DVECTOR(-0.5f,-0.5f, 0), vNorm, 0, 1); m_avBillBoard[2] = D3DVERTEX(D3DVECTOR( 0.5f, 0.5f, 0), vNorm, 1, 0); m_avBillBoard[3] = D3DVERTEX(D3DVECTOR( 0.5f,-0.5f, 0), vNorm, 1, 1); for ( nCnt = 0; nCnt < _MAX_TEXTR_FILE; nCnt++ ) { m_xTextrFileList[nCnt].ClearAllNodes(); } }
//---フィールド頂点を初期化 CRBATINIT_API int crbatInitFieldVertex(void) { int a,x,y; D3DVECTOR vNormal( D3DVAL(0.0f), D3DVAL(1.0f), D3DVAL(0.0f) ); D3DVECTOR vNormal2( D3DVAL(0.0f), D3DVAL(-1.0f), D3DVAL(0.0f) ); D3DVECTOR p1(D3DVAL(-0.5f) , D3DVAL(0.0f) , D3DVAL(-0.5f)); D3DVECTOR p2( D3DVAL(0.5f) , D3DVAL(0.0f) , D3DVAL(-0.5f)); D3DVECTOR p3(D3DVAL(-0.5f) , D3DVAL(0.0f) , D3DVAL( 0.5f)); D3DVECTOR p4( D3DVAL(0.5f) , D3DVAL(0.0f) , D3DVAL( 0.5f)); /* D3DVECTOR vNormal( D3DVAL(0.0f), D3DVAL(1.0f), D3DVAL(0.0f) ); D3DVECTOR vNormal2( D3DVAL(0.0f), D3DVAL(-1.0f), D3DVAL(0.0f) ); D3DVECTOR p1(D3DVAL(-0.5f) , D3DVAL(-0.5f) , D3DVAL(0.0f)); D3DVECTOR p2( D3DVAL(0.5f) , D3DVAL(-0.5f) , D3DVAL(0.0f)); D3DVECTOR p3(D3DVAL(-0.5f) , D3DVAL(0.5f) , D3DVAL( 0.0f)); D3DVECTOR p4( D3DVAL(0.5f) , D3DVAL(0.5f) , D3DVAL( 0.0f)); */ for(y = 0;y < BATTLEFIELD_VERTEXCOUNT_Y;y ++){ for(x = 0;x < BATTLEFIELD_VERTEXCOUNT_X;x ++){ BattleField[x][y].Vertex[0] = D3DVERTEX( p1, vNormal,D3DVAL(0.0f),D3DVAL(0.0f)); BattleField[x][y].Vertex[1] = D3DVERTEX( p2, vNormal,D3DVAL(1.0f),D3DVAL(0.0f)); BattleField[x][y].Vertex[2] = D3DVERTEX( p3, vNormal,D3DVAL(0.0f),D3DVAL(1.0f)); BattleField[x][y].Vertex[3] = D3DVERTEX( p4, vNormal,D3DVAL(1.0f),D3DVAL(1.0f)); for(a = 0;a < 4;a ++){ BattleField[x][y].Vertex[a].x += (float)((float)x * 1.0f); BattleField[x][y].Vertex[a].z += (float)((float)y * 1.0f); } // BattleField[x][y].TextureNumber = eiRnd(2); } } return 1; }
// Runden Schatten malen void RenderRoundShadow(LPDIRECT3DDEVICE7 lpDevice,float x,float y,float z,float r) { #define EDGES 12 static D3DVERTEX v[(EDGES+1)*2]; D3DLIGHT7 light; lpDevice->GetLight(0,&light); D3DVECTOR length=Normalize(light.dvDirection)*(-100.0f); for (int i=0;i<=EDGES;i++) { v[i]=v[i+EDGES+1]=D3DVERTEX(D3DVECTOR(x+sinf(float(i)/float(EDGES)*g_PI*2.0f)*r,y,z+cosf(float(i)/float(EDGES)*g_PI*2.0f)*r),D3DVECTOR(0,1,0),0,0); v[i+EDGES+1].x-=length.x; v[i+EDGES+1].y-=length.y; v[i+EDGES+1].z-=length.z; } static WORD wIndices[(EDGES-2)*3+EDGES*6]; const PWORD Cap=&wIndices[0]; const PWORD Side=&wIndices[(EDGES-2)*3]; for (i=0;i<EDGES-2;i++) { Cap[i*3]=0; Cap[i*3+1]=i+1; Cap[i*3+2]=i+2; } for (i=0;i<EDGES;i++) { Side[i*6+0]=i; Side[i*6+1]=i+EDGES+2; Side[i*6+2]=i+1; Side[i*6+3]=i; Side[i*6+4]=i+EDGES+1; Side[i*6+5]=i+EDGES+2; } RenderShadow(lpDevice,v,EDGES*2+2,wIndices,sizeof(wIndices)/sizeof(wIndices[0])); // RenderShadow(lpDevice,v,8,wIndices,(EDGES-2)*3); }
void CGras::CreateGras(int index,int anzahl) { //#define GRAS_KI const float sizex=1.5f/2.0f; const D3DVECTOR height=D3DVECTOR(0,0.475f,0); vertexnum[index]=anzahl*4; lpVertices[index]=CreateVertexBuffer(game->lpD3D,&game->d3ddesc,D3DFVF_VERTEX,anzahl*4,TRUE); D3DVERTEX* v; lpVertices[index]->Lock( DDLOCK_WAIT, (VOID**)&v,NULL); { D3DVECTOR pos,width,n; int y; float faktor; const int maxloops=25; WORD i; #ifdef GRAS_KI D3DVECTOR *points; const int NumPoints=int(world->GetWidth()*world->GetHeight()/10.0f); if (NumPoints>0) { points=new D3DVECTOR[NumPoints]; for (i=0;i<NumPoints;i++) points[i]=world->Rand(0.2f); } #endif for (i=0;i<anzahl;i++) { float alpha=randf()*g_PI*2.0f; y=0; do { y++; pos=world->Rand(0.2f); faktor=1.0f; #ifdef GRAS_KI if (NumPoints>0) { faktor=0.0f; for (int warscht=0;warscht<NumPoints;warscht++) faktor+=powf(sqr(pos.x-points[warscht].x)+sqr(pos.z-points[warscht].z)+1,0.5f); faktor=1.0f/(faktor/NumPoints); } #endif if (pos.y<0.15f) faktor*=0.15f; if (y>maxloops)faktor+=0.2f; }while (randf()>faktor); width=D3DVECTOR(cosf(alpha),0,sinf(alpha)); n=D3DVECTOR(width.z,0,width.x); width*=sizex*(0.5f+randf()*1.0f); const float hf=0.5f+randf()*1.35f; v[i*4+0]=D3DVERTEX(pos+width+height*hf,n,1,0); v[i*4+1]=D3DVERTEX(pos-width+height*hf,n,0,0); v[i*4+2]=D3DVERTEX(pos-width,n,0,1); v[i*4+3]=D3DVERTEX(pos+width,n,1,1); } #ifdef GRAS_KI if (NumPoints>0)delete[] points; #endif } lpVertices[index]->Unlock(); lpVertices[index]->Optimize(game->lpDevice,0); }