📄 scene3.cpp
字号:
Device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
Device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
Device->SetRenderState(D3DRS_ALPHABLENDENABLE, true);
Device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);
Device->SetRenderState(D3DRS_ALPHABLENDENABLE, false);
Device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
Device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ZERO);
//
// Exit 按钮
//
RECT rtExit;
SetRect(&rtExit, ScreenWidth-180, ScreenHeight-80, ScreenWidth-33, ScreenHeight-19);
IDirect3DVertexBuffer9 *pExitButton;
if (FAILED(Device->CreateVertexBuffer(
6 * sizeof(VertexRHWTEX),
D3DUSAGE_WRITEONLY,
FVF_VERTEXRHWTEX,
D3DPOOL_MANAGED,
&pExitButton,
0)))
{
ERMSG("Device->CreateVertexBuffer(pExitButton) -- FAILED");
return 0;
}
pExitButton->Lock(0, 6*sizeof(VertexRHWTEX), (void**)&vertexrhwtex, 0);
vertexrhwtex[0] = VertexRHWTEX(rtExit.left, rtExit.bottom, 0.0f, 1.0f, 0.0f, 1.0f);
vertexrhwtex[1] = VertexRHWTEX(rtExit.left, rtExit.top, 0.0f, 1.0f, 0.0f, 0.0f);
vertexrhwtex[2] = VertexRHWTEX(rtExit.right, rtExit.top, 0.0f, 1.0f, 1.0f, 0.0f);
vertexrhwtex[3] = VertexRHWTEX(rtExit.left, rtExit.bottom, 0.0f, 1.0f, 0.0f, 1.0f);
vertexrhwtex[4] = VertexRHWTEX(rtExit.right, rtExit.top, 0.0f, 1.0f, 1.0f, 0.0f);
vertexrhwtex[5] = VertexRHWTEX(rtExit.right, rtExit.bottom, 0.0f, 1.0f, 1.0f, 1.0f);
pExitButton->Unlock();
Device->SetStreamSource(0, pExitButton, 0, sizeof(VertexRHWTEX));
Device->SetFVF(FVF_VERTEXRHWTEX);
if (exitbuttonstatus == ButtonStatus::NORMAL)
Device->SetTexture(0, TextureButton[4]);
else if (exitbuttonstatus == ButtonStatus::MOUSEOVER)
Device->SetTexture(0, TextureButton[5]);
Device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
Device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
Device->SetRenderState(D3DRS_ALPHABLENDENABLE, true);
Device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);
Device->SetRenderState(D3DRS_ALPHABLENDENABLE, false);
Device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
Device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ZERO);
////////////////////////////////////
IDirect3DVertexBuffer9 *pBorder=0;
if (maze_width*maze_height)
{
if (FAILED(Device->CreateVertexBuffer(
6*sizeof(VertexRHWTEX),
D3DUSAGE_WRITEONLY,
FVF_VERTEXRHWTEX,
D3DPOOL_MANAGED,
&pBorder,
0)))
{
ERMSG("Device->CreateVertexBuffer(pBorder) -- FAILED");
return 0;
}
if (maze_width < 16)
squaresize = 16.0f;
else
squaresize = 260.0f / maze_width;
VertexRHWTEX *vertexrhwtex;
for (int i=0; i<maze_height; i++)
{
for (int j=0; j<maze_width; j++)
{
pBorder->Lock(0, 6*sizeof(VertexRHWTEX), (void**)&vertexrhwtex, 0);
vertexrhwtex[0] = VertexRHWTEX(100.0f+j*48, 100.0f+(i+1)*48, 0.9999f, 1.0f, 0.0f, 1.0f);
vertexrhwtex[1] = VertexRHWTEX(100.0f+j*48, 100.0f+i*48, 0.9999f, 1.0f, 0.0f, 0.0f);
vertexrhwtex[2] = VertexRHWTEX(100.0f+(j+1)*48, 100.0f+i*48, 0.9999f, 1.0f, 1.0f, 0.0f);
vertexrhwtex[3] = VertexRHWTEX(100.0f+j*48, 100.0f+(i+1)*48, 0.9999f, 1.0f, 0.0f, 1.0f);
vertexrhwtex[4] = VertexRHWTEX(100.0f+(j+1)*48, 100.0f+i*48, 0.9999f, 1.0f, 1.0f, 0.0f);
vertexrhwtex[5] = VertexRHWTEX(100.0f+(j+1)*48, 100.0f+(i+1)*48, 0.9999f, 1.0f, 1.0f, 1.0f);
pBorder->Unlock();
Device->SetStreamSource(0, pBorder, 0, sizeof(VertexRHWTEX));
Device->SetFVF(FVF_VERTEXRHWTEX);
if (matrix[i][j] == '1')
Device->SetTexture(0, Textures[0]);
else
Device->SetTexture(0, Textures[1]);
Device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);
}
}
}
///////////////////////
////////////////////
// 剑圣
// Setup the light
D3DLIGHT9 light;
D3DUtil_InitLight( light, D3DLIGHT_DIRECTIONAL, 0.0f,-1.0f, 1.0f );
Device->SetLight(0, &light );
Device->LightEnable(0, TRUE );
// Set Light for vertex shader
D3DXVECTOR4 vLightDir( 0.0f, 1.0f, -1.0f, 0.0f );
D3DXVec4Normalize( &vLightDir, &vLightDir );
Device->SetVertexShaderConstantF(1, (float*)&vLightDir, 1);
// Setup the projection matrix
D3DXMATRIXA16 matProj;
FLOAT fAspect = (FLOAT)m_d3dsdBackBuffer.Width / (FLOAT)m_d3dsdBackBuffer.Height;
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/2, fAspect,
m_fObjectRadius/64.0f, m_fObjectRadius*200.0f );
Device->SetTransform( D3DTS_PROJECTION, &matProj );
m_pEffect->SetMatrix( "mViewProj", &matProj);
m_pEffect->SetVector( "lhtDir", &vLightDir);
// set the projection matrix for the vertex shader based skinning method
D3DXMatrixTranspose(&matProj, &matProj);
Device->SetVertexShaderConstantF(2, (float*)&matProj, 4);
///////////////////////////////////////
if (sign)
{
sign = false;
FLOAT fDeltaX = ( 1200 ) * m_ArcBall->m_fRadiusTranslation / m_ArcBall->m_iWidth;
FLOAT fDeltaY = ( 750 ) * m_ArcBall->m_fRadiusTranslation / m_ArcBall->m_iHeight;
D3DXMatrixTranslation( &m_ArcBall->m_matTranslationDelta, -2*fDeltaX, 2*fDeltaY, 200.0f );
D3DXMatrixMultiply( &m_ArcBall->m_matTranslation, &m_ArcBall->m_matTranslation, &m_ArcBall->m_matTranslationDelta );
D3DXVECTOR3 s_vDown;
s_vDown = m_ArcBall->ScreenToVector( 50, 50 );
m_ArcBall->m_qDown = m_ArcBall->m_qNow;
D3DXVECTOR3 vCur = m_ArcBall->ScreenToVector( 600, 250 );
D3DXQUATERNION qAxisToAxis;
D3DXQuaternionAxisToAxis(&qAxisToAxis, &s_vDown, &vCur);
m_ArcBall->m_qNow = m_ArcBall->m_qDown;
m_ArcBall->m_qNow *= qAxisToAxis;
D3DXMatrixRotationQuaternion(&m_ArcBall->m_matRotationDelta, &qAxisToAxis);
D3DXMatrixRotationQuaternion(&m_ArcBall->m_matRotation, &m_ArcBall->m_qNow);
s_vDown = m_ArcBall->ScreenToVector( 50, 300 );
m_ArcBall->m_qDown = m_ArcBall->m_qNow;
vCur = m_ArcBall->ScreenToVector( 700, 300 );
D3DXQuaternionAxisToAxis(&qAxisToAxis, &s_vDown, &vCur);
m_ArcBall->m_qNow = m_ArcBall->m_qDown;
m_ArcBall->m_qNow *= qAxisToAxis;
D3DXMatrixRotationQuaternion(&m_ArcBall->m_matRotationDelta, &qAxisToAxis);
D3DXMatrixRotationQuaternion(&m_ArcBall->m_matRotation, &m_ArcBall->m_qNow);
s_vDown = m_ArcBall->ScreenToVector( 50, 150 );
m_ArcBall->m_qDown = m_ArcBall->m_qNow;
vCur = m_ArcBall->ScreenToVector(200, 170 );
D3DXQuaternionAxisToAxis(&qAxisToAxis, &s_vDown, &vCur);
m_ArcBall->m_qNow = m_ArcBall->m_qDown;
m_ArcBall->m_qNow *= qAxisToAxis;
D3DXMatrixRotationQuaternion(&m_ArcBall->m_matRotationDelta, &qAxisToAxis);
D3DXMatrixRotationQuaternion(&m_ArcBall->m_matRotation, &m_ArcBall->m_qNow);
}
else
{
if (!path.empty() && iter != path.end())
{
FLOAT fDeltaX = ( 220*( iterX - iter->x ) ) * m_ArcBall->m_fRadiusTranslation / m_ArcBall->m_iWidth;
FLOAT fDeltaY = ( 160*(iterY - iter->y ) ) * m_ArcBall->m_fRadiusTranslation / m_ArcBall->m_iHeight;
D3DXMatrixTranslation( &m_ArcBall->m_matTranslationDelta, -2*fDeltaX, 2*fDeltaY, 0.0f );
D3DXMatrixMultiply( &m_ArcBall->m_matTranslation, &m_ArcBall->m_matTranslation, &m_ArcBall->m_matTranslationDelta );
iterX= iter->x;
iterY = iter->y;
{
static float y = 10;
y -= timeDelta*8.0f;
if (y<=0)
{
++iter;
y = 10;
}
}
if (iter == path.end())
{
iter = path.begin();
}
}
}
DrawFrame(m_pFrameRoot);
Device->EndScene();
Device->Present(0, 0, 0, 0);
pSplitLine->Release();
pBorder->Release();
pBkgnd->Release();
pFont->Release();
pExitButton->Release();
pNewButton->Release();
}
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -