我想在activeX控件中显示一个在旋转的三角形,应该如何操作? 如题!急!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在OnTime里,旋转三角形,绘制到dc 我贴代码啦 帮忙看看是什么原因?void CControl3DCtrl::InitD3D()//初始化{ m_pD3D = Direct3DCreate9(D3D_SDK_VERSION); D3DPRESENT_PARAMETERS d3pp; ZeroMemory(&d3pp,sizeof(D3DPRESENT_PARAMETERS)); d3pp.Windowed = TRUE; d3pp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3pp.BackBufferFormat = D3DFMT_UNKNOWN; m_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,m_hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3pp,&m_pDevice); m_pDevice->SetRenderState(D3DRS_LIGHTING,FALSE); m_pDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);}void CControl3DCtrl::InitGeometry()//建模{ float angle = m_nRotateY/180*PI; D3DXMATRIX matworld; D3DXMatrixRotationY(&matworld,angle); m_pDevice->SetTransform(D3DTS_FORCE_DWORD,&matworld); D3DXMATRIX matView; D3DXVECTOR3 m_Eye(0.0f,5.0f,3.0f); D3DXVECTOR3 m_At(0.0f,0.0f,0.0f); D3DXVECTOR3 m_Up(0.0f,1.0f,0.0f); D3DXMatrixLookAtLH(&matView,&m_Eye,&m_At,&m_Up); m_pDevice->SetTransform(D3DTS_VIEW,&matView); D3DXMATRIX matProj; D3DXMatrixPerspectiveFovLH(&matProj,PI/4,1.0f,1.0f,1000.0f); m_pDevice->SetTransform(D3DTS_PROJECTION,&matProj);}void CControl3DCtrl::SetupMatrices()//设置变换矩阵{ CUSTOMVERTEX vertices[] = {{ -1.0f, -1.0f, 0.0f, D3DCOLOR_XRGB(255,0,0) }, //点 A,红色 { 0.0f, 1.0f, 0.0f, D3DCOLOR_XRGB(0,255,0) }, //点 B,绿色 { 1.0f, -1.0f, 0.0f, D3DCOLOR_XRGB(0,255,255) }};//点 C,浅蓝 m_pDevice->CreateVertexBuffer(sizeof(CUSTOMVERTEX),0,D3DFVF_CUSTOMVERTEX,D3DPOOL_DEFAULT,&m_pVB,NULL); void *pVertice; m_pVB->Lock(0,sizeof(vertices),(void**)&pVertice,D3DLOCK_DISCARD); memcpy(pVertice,vertices,sizeof(vertices)); m_pVB->Unlock();}void CControl3DCtrl::Render()//渲染函数{ m_pDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,255),1.0f,0); m_pDevice->BeginScene(); SetupMatrices(); m_pDevice->SetFVF(D3DFVF_CUSTOMVERTEX); m_pDevice->SetStreamSource(0,m_pVB,0,sizeof(CUSTOMVERTEX)); m_pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,0,1); m_pDevice->EndScene(); m_pDevice->Present(NULL,NULL,NULL,NULL);}//消息映射int CControl3DCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct){ if (COleControl::OnCreate(lpCreateStruct) == -1) return -1; InitD3D(); InitGeometry(); m_nRotateY = 0; SetTimer(1,40,NULL); return 0;}void CControl3DCtrl::OnTimer(UINT_PTR nIDEvent){ m_nRotateY += 2; Render(); COleControl::OnTimer(nIDEvent);}到底应该在哪里改?? 你的Render里调用了SetupMatrices,但SetupMatrices函数是挂羊头卖狗肉,本来应该重新调整世界矩阵,干的却是设置顶点数据的活。 初学ATL,BEGIN_OBJECT_MAP 搞不定 ?? 如何给一个二进制文件头加3个字节,而不破坏后面内容? 输入字体和颜色的问题 关于MFC文档视图结构中,缺省的命令处理的问题?(在线等待) 滑块的SetLineSize设置的是什么距离? VC中如何计时阿(类似VB中的Timer功能) 求教 请问如何改变控件的风格? 用ADOQUERY的话,怎么实现事务处理? 把从数据库中读出来的大字段内容传给客户端的问题 关于GDI+内存贴图的问题!!!!!!!!!!!!!!!!!!! waveInAddBuffer不能返回
我贴代码啦 帮忙看看是什么原因?
void CControl3DCtrl::InitD3D()//初始化
{
m_pD3D = Direct3DCreate9(D3D_SDK_VERSION);
D3DPRESENT_PARAMETERS d3pp;
ZeroMemory(&d3pp,sizeof(D3DPRESENT_PARAMETERS));
d3pp.Windowed = TRUE;
d3pp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3pp.BackBufferFormat = D3DFMT_UNKNOWN;
m_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,m_hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3pp,&m_pDevice); m_pDevice->SetRenderState(D3DRS_LIGHTING,FALSE);
m_pDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
}
void CControl3DCtrl::InitGeometry()//建模
{
float angle = m_nRotateY/180*PI;
D3DXMATRIX matworld;
D3DXMatrixRotationY(&matworld,angle);
m_pDevice->SetTransform(D3DTS_FORCE_DWORD,&matworld); D3DXMATRIX matView; D3DXVECTOR3 m_Eye(0.0f,5.0f,3.0f);
D3DXVECTOR3 m_At(0.0f,0.0f,0.0f);
D3DXVECTOR3 m_Up(0.0f,1.0f,0.0f); D3DXMatrixLookAtLH(&matView,&m_Eye,&m_At,&m_Up);
m_pDevice->SetTransform(D3DTS_VIEW,&matView); D3DXMATRIX matProj;
D3DXMatrixPerspectiveFovLH(&matProj,PI/4,1.0f,1.0f,1000.0f);
m_pDevice->SetTransform(D3DTS_PROJECTION,&matProj);}
void CControl3DCtrl::SetupMatrices()//设置变换矩阵
{
CUSTOMVERTEX vertices[] =
{{ -1.0f, -1.0f, 0.0f, D3DCOLOR_XRGB(255,0,0) }, //点 A,红色
{ 0.0f, 1.0f, 0.0f, D3DCOLOR_XRGB(0,255,0) }, //点 B,绿色
{ 1.0f, -1.0f, 0.0f, D3DCOLOR_XRGB(0,255,255) }};//点 C,浅蓝 m_pDevice->CreateVertexBuffer(sizeof(CUSTOMVERTEX),0,D3DFVF_CUSTOMVERTEX,D3DPOOL_DEFAULT,&m_pVB,NULL);
void *pVertice;
m_pVB->Lock(0,sizeof(vertices),(void**)&pVertice,D3DLOCK_DISCARD);
memcpy(pVertice,vertices,sizeof(vertices));
m_pVB->Unlock();}
void CControl3DCtrl::Render()//渲染函数
{
m_pDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,255),1.0f,0);
m_pDevice->BeginScene(); SetupMatrices(); m_pDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
m_pDevice->SetStreamSource(0,m_pVB,0,sizeof(CUSTOMVERTEX));
m_pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,0,1); m_pDevice->EndScene();
m_pDevice->Present(NULL,NULL,NULL,NULL);
}//消息映射
int CControl3DCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1; InitD3D();
InitGeometry();
m_nRotateY = 0;
SetTimer(1,40,NULL); return 0;
}void CControl3DCtrl::OnTimer(UINT_PTR nIDEvent)
{
m_nRotateY += 2;
Render(); COleControl::OnTimer(nIDEvent);
}到底应该在哪里改??