两个物体的相对位置D3D
时间:2011-07-11
来源:互联网
我想把床放在屋子的图片里 老是早不好相对的位置 哪位大侠帮帮忙
另外 我都设了了旋转 但是看的迷糊于是我都把旋转的命令删了 然后一个也不显示了是为啥呢
HRESULT CALLBACK OnCreateDevice( IDirect3DDevice9* pd3dDevice,
const D3DSURFACE_DESC* pBackBufferSurfaceDesc,
void* pUserContext )
{
HRESULT hr;
V_RETURN( g_DialogResourceManager.OnCreateDevice( pd3dDevice ) );
V_RETURN( g_SettingsDlg.OnCreateDevice( pd3dDevice ) );
//创建字体
V_RETURN( D3DXCreateFont( pd3dDevice, 15, 0, FW_BOLD, 1, FALSE, DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,
L"Arial", &g_pFont ) );
//创建老虎网格模型
V_RETURN(g_pMesh.Create(pd3dDevice, L"Media\\墙壁和门_1.x")) ;
V_RETURN(g_pMesh1.Create(pd3dDevice, L"Media\\床_1.x"));
D3DXVECTOR3 vecAt ( 0,0,0 );
D3DXVECTOR3 vecEye( 0,2,-5);
g_Camera.SetViewParams( &vecEye, &vecAt );
g_Camera.SetScalers(0.01f,50.0f);//摄象机前后移动弧度
g_Camera.SetEnableYAxisMovement(true);//按Q,E是否可以移动
g_Camera.SetEnablePositionMovement(true);//摄象机是否可以移动
return hr;
}
//-----------------------------------------------------------------------------
// Desc: 在此创建默认内存类型资源对象, 设置相关渲染状态(重置设备)
//-----------------------------------------------------------------------------
HRESULT CALLBACK OnResetDevice( IDirect3DDevice9* pd3dDevice,
const D3DSURFACE_DESC* pBackBufferSurfaceDesc,
void* pUserContext )
{
HRESULT hr;
V_RETURN( g_DialogResourceManager.OnResetDevice() );
V_RETURN( g_SettingsDlg.OnResetDevice() );
//设置对话框位置和尺寸
g_HUD.SetLocation( pBackBufferSurfaceDesc->Width-170, 0 );
g_HUD.SetSize( 170, 170 );
g_SampleUI.SetLocation( pBackBufferSurfaceDesc->Width-170,
pBackBufferSurfaceDesc->Height-350 );
g_SampleUI.SetSize( 170, 300 );
g_move.SetLocation( pBackBufferSurfaceDesc->Width-170,
pBackBufferSurfaceDesc->Height-700 );
g_SampleUI.SetSize( 170, 430 );
//恢复字体
if( g_pFont )
V_RETURN( g_pFont->OnResetDevice() );
//创建ID3DXSprite接口对象
V_RETURN( D3DXCreateSprite( pd3dDevice, &g_pTextSprite ) );
//设置投影矩阵
float fAspectRatio = (float)pBackBufferSurfaceDesc->Width / pBackBufferSurfaceDesc->Height;//定义fAspectRatio
//设置纹理渲染状态
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );
pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );
pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );
//关闭光照
pd3dDevice->SetRenderState( D3DRS_LIGHTING, false );
g_Camera.SetProjParams( D3DX_PI / 4, fAspectRatio, 1.0f, 1000000.0f );//观察距离
return S_OK;
}
//-----------------------------------------------------------------------------
// Desc: 更新场景(框架移动)
//-----------------------------------------------------------------------------
void CALLBACK OnFrameMove( IDirect3DDevice9* pd3dDevice, double fTime,
float fElapsedTime, void* pUserContext )
{
g_Camera.FrameMove(fElapsedTime);//必须写的自由摄象机命令 更新
//世界变换
D3DXMATRIXA16 matWorld;//世界变换矩阵
D3DXMATRIXA16 matTranlate;
UINT iTime = timeGetTime() % 10000;
FLOAT fAngle = iTime * (2.0f * D3DX_PI) / 10000.0f;
D3DXMatrixRotationY( &matWorld, fAngle );//填充matWorld为一个旋转矩阵,fAngle是旋转角度
D3DXMatrixTranslation(&matTranlate,i+0.0f,0.0f,0.0f);//沿X平移30个单位1
D3DXMatrixMultiply(&matWorld,&matWorld,&matTranlate);//组合得到世界变幻矩阵
pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );//将matWorld设置为世界转换矩阵
}
//-----------------------------------------------------------------------------
// Desc: 渲染场景(框架渲染)
//-----------------------------------------------------------------------------
void CALLBACK OnFrameRender( IDirect3DDevice9* pd3dDevice, double fTime,
float fElapsedTime, void* pUserContext )
{
HRESULT hr;
//如果正在利用Direct3D设备设置对话框进行设置, 则不渲染场景
if( g_SettingsDlg.IsActive() )
{
g_SettingsDlg.OnRender( fElapsedTime );
return;
}
//清除后台颜色缓冲区和深度缓冲区
V( pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
D3DCOLOR_ARGB(0, 45, 50, 170), 1.0f, 0) );
pd3dDevice->SetTransform( D3DTS_VIEW, g_Camera.GetViewMatrix() );// 摄象机取→观察
pd3dDevice->SetTransform( D3DTS_PROJECTION, g_Camera.GetProjMatrix());//摄象机 投影
//开始渲染场景
if( SUCCEEDED( pd3dDevice->BeginScene() ) )
{
//渲染网格模型
g_pMesh.Render( pd3dDevice );
D3DXMATRIXA16 matWorld1;//世界变换矩阵
//D3DXMATRIXA16 matTranlate;
UINT iTime = timeGetTime() % 10000;
FLOAT fAngle = iTime * (2.0f * D3DX_PI) / 10000.0f;
D3DXMatrixRotationZ( &matWorld1, fAngle );//填充matWorl
pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld1 );
g_pMesh1.Render( pd3dDevice );
//渲染文本和对话框
DXUT_BeginPerfEvent( DXUT_PERFEVENTCOLOR, L"HUD / Stats" );
RenderText();
V( g_HUD.OnRender( fElapsedTime ) );
V( g_SampleUI.OnRender( fElapsedTime ) );
V( g_move.OnRender( fElapsedTime ) );
DXUT_EndPerfEvent();
//结束渲染场景
V( pd3dDevice->EndScene() );
}
}
另外 我都设了了旋转 但是看的迷糊于是我都把旋转的命令删了 然后一个也不显示了是为啥呢
HRESULT CALLBACK OnCreateDevice( IDirect3DDevice9* pd3dDevice,
const D3DSURFACE_DESC* pBackBufferSurfaceDesc,
void* pUserContext )
{
HRESULT hr;
V_RETURN( g_DialogResourceManager.OnCreateDevice( pd3dDevice ) );
V_RETURN( g_SettingsDlg.OnCreateDevice( pd3dDevice ) );
//创建字体
V_RETURN( D3DXCreateFont( pd3dDevice, 15, 0, FW_BOLD, 1, FALSE, DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,
L"Arial", &g_pFont ) );
//创建老虎网格模型
V_RETURN(g_pMesh.Create(pd3dDevice, L"Media\\墙壁和门_1.x")) ;
V_RETURN(g_pMesh1.Create(pd3dDevice, L"Media\\床_1.x"));
D3DXVECTOR3 vecAt ( 0,0,0 );
D3DXVECTOR3 vecEye( 0,2,-5);
g_Camera.SetViewParams( &vecEye, &vecAt );
g_Camera.SetScalers(0.01f,50.0f);//摄象机前后移动弧度
g_Camera.SetEnableYAxisMovement(true);//按Q,E是否可以移动
g_Camera.SetEnablePositionMovement(true);//摄象机是否可以移动
return hr;
}
//-----------------------------------------------------------------------------
// Desc: 在此创建默认内存类型资源对象, 设置相关渲染状态(重置设备)
//-----------------------------------------------------------------------------
HRESULT CALLBACK OnResetDevice( IDirect3DDevice9* pd3dDevice,
const D3DSURFACE_DESC* pBackBufferSurfaceDesc,
void* pUserContext )
{
HRESULT hr;
V_RETURN( g_DialogResourceManager.OnResetDevice() );
V_RETURN( g_SettingsDlg.OnResetDevice() );
//设置对话框位置和尺寸
g_HUD.SetLocation( pBackBufferSurfaceDesc->Width-170, 0 );
g_HUD.SetSize( 170, 170 );
g_SampleUI.SetLocation( pBackBufferSurfaceDesc->Width-170,
pBackBufferSurfaceDesc->Height-350 );
g_SampleUI.SetSize( 170, 300 );
g_move.SetLocation( pBackBufferSurfaceDesc->Width-170,
pBackBufferSurfaceDesc->Height-700 );
g_SampleUI.SetSize( 170, 430 );
//恢复字体
if( g_pFont )
V_RETURN( g_pFont->OnResetDevice() );
//创建ID3DXSprite接口对象
V_RETURN( D3DXCreateSprite( pd3dDevice, &g_pTextSprite ) );
//设置投影矩阵
float fAspectRatio = (float)pBackBufferSurfaceDesc->Width / pBackBufferSurfaceDesc->Height;//定义fAspectRatio
//设置纹理渲染状态
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );
pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );
pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );
//关闭光照
pd3dDevice->SetRenderState( D3DRS_LIGHTING, false );
g_Camera.SetProjParams( D3DX_PI / 4, fAspectRatio, 1.0f, 1000000.0f );//观察距离
return S_OK;
}
//-----------------------------------------------------------------------------
// Desc: 更新场景(框架移动)
//-----------------------------------------------------------------------------
void CALLBACK OnFrameMove( IDirect3DDevice9* pd3dDevice, double fTime,
float fElapsedTime, void* pUserContext )
{
g_Camera.FrameMove(fElapsedTime);//必须写的自由摄象机命令 更新
//世界变换
D3DXMATRIXA16 matWorld;//世界变换矩阵
D3DXMATRIXA16 matTranlate;
UINT iTime = timeGetTime() % 10000;
FLOAT fAngle = iTime * (2.0f * D3DX_PI) / 10000.0f;
D3DXMatrixRotationY( &matWorld, fAngle );//填充matWorld为一个旋转矩阵,fAngle是旋转角度
D3DXMatrixTranslation(&matTranlate,i+0.0f,0.0f,0.0f);//沿X平移30个单位1
D3DXMatrixMultiply(&matWorld,&matWorld,&matTranlate);//组合得到世界变幻矩阵
pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );//将matWorld设置为世界转换矩阵
}
//-----------------------------------------------------------------------------
// Desc: 渲染场景(框架渲染)
//-----------------------------------------------------------------------------
void CALLBACK OnFrameRender( IDirect3DDevice9* pd3dDevice, double fTime,
float fElapsedTime, void* pUserContext )
{
HRESULT hr;
//如果正在利用Direct3D设备设置对话框进行设置, 则不渲染场景
if( g_SettingsDlg.IsActive() )
{
g_SettingsDlg.OnRender( fElapsedTime );
return;
}
//清除后台颜色缓冲区和深度缓冲区
V( pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
D3DCOLOR_ARGB(0, 45, 50, 170), 1.0f, 0) );
pd3dDevice->SetTransform( D3DTS_VIEW, g_Camera.GetViewMatrix() );// 摄象机取→观察
pd3dDevice->SetTransform( D3DTS_PROJECTION, g_Camera.GetProjMatrix());//摄象机 投影
//开始渲染场景
if( SUCCEEDED( pd3dDevice->BeginScene() ) )
{
//渲染网格模型
g_pMesh.Render( pd3dDevice );
D3DXMATRIXA16 matWorld1;//世界变换矩阵
//D3DXMATRIXA16 matTranlate;
UINT iTime = timeGetTime() % 10000;
FLOAT fAngle = iTime * (2.0f * D3DX_PI) / 10000.0f;
D3DXMatrixRotationZ( &matWorld1, fAngle );//填充matWorl
pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld1 );
g_pMesh1.Render( pd3dDevice );
//渲染文本和对话框
DXUT_BeginPerfEvent( DXUT_PERFEVENTCOLOR, L"HUD / Stats" );
RenderText();
V( g_HUD.OnRender( fElapsedTime ) );
V( g_SampleUI.OnRender( fElapsedTime ) );
V( g_move.OnRender( fElapsedTime ) );
DXUT_EndPerfEvent();
//结束渲染场景
V( pd3dDevice->EndScene() );
}
}
作者: lengyuefengyun 发布时间: 2011-07-11
拿张纸 把你想要的结果画出来,然后检查模型视图矩阵是否正确。
作者: dizuo 发布时间: 2011-07-11
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28