|
有两个问题:
一,大家先看下面的代码,有些奇怪,是用来测试的。
VOID MyDGEApp::Render()
{
if(!RenderSystem->BeginRender())
::MessageBox( NULL,"渲染初始化错误","错误",MB_OK );
// Render the background
// 注意:此处渲染的所有数据都来自于RT
RT.m_pd3dDevice->SetTexture( 0 ,RT.m_pd3dTexture );
RT.m_pd3dDevice->SetFVF( DGVertex::FVF );
RT.m_pd3dDevice->SetStreamSource( 0, RT.m_pVB , 0, sizeof(DGVertex) );
RT.m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );
// 对RT本身进行渲染代码和上面理论上一样,下面也有给出
// RT是一个DGRenderTextureDX9的对象
RT.Render();
RenderSystem->EndRender();
return;
}
bool DGRenderTextureDX9::Render()
{
m_pd3dDevice->SetTexture(0, m_pd3dTexture);
m_pd3dDevice->SetFVF( DGVertex::FVF );
m_pd3dDevice->SetStreamSource( 0, m_pVB, 0, sizeof(DGVertex) );
m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 2 );
return true;
}
上面两段代码理论上一样(一样的指针,一样的数据,一样的操作)
现在问题来了,同该屏蔽代码可知
RT.Render()这一步操作并没有在屏幕上绘制出图形,而
RT.m_pd3dDevice->SetTexture( 0 ,RT.m_pd3dTexture );
RT.m_pd3dDevice->SetFVF( DGVertex::FVF );
RT.m_pd3dDevice->SetStreamSource( 0, RT.m_pVB , 0, sizeof(DGVertex) );
RT.m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );
这一段代码则按照意图绘制了出来。
有点匪夷所思,不过我需要说明的一点:DGRenderTextureDX9这个类我放到了静态库中(lib文件)。我想很有可能是这个关系。但是我一直认为lib应该和直接使用源文件一样。急需解决RT.Render()渲染无效的问题。
问题二,载入一个Texture的时候可以设置ColorKey,实验证明已经成功。
我在输出他的时候(用上面的方法)被ColorKey去掉的地方并不是变成透明,而是统统变成了黑颜色。(我用的是创建一个VB的方法)现在我想让他透明应该怎样做?
|
|