Direct3D材质为何无法被清空

天外怪魔 2017-06-09 09:06:56
LPDIRECT3DTEXTURE9 m_lpTexture;
LPDIRECT3DSURFACE9 m_lpOffScreenSurface;
// 以下为m_lpDevice和m_lpBackSurface定义,在初始化过程中已经正常获取到对象
// LPDIRECT3DDEVICE9 m_lpDevice;
// LPDIRECT3DSURFACE9 m_lpBackSurface;
// m_lpTexture->GetSurfaceLevel(0, &m_lpOffScreenSurface);
m_lpDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &m_lpBackSurface);
m_lpDevice->SetRenderTarget(0, m_lpOffScreenSurface);
// 将材质清空成纯红色
m_lpDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(200, 0, 0), 1.0f, 0);
D3DXMATRIXA16 w;
m_lpDevice->BeginScene();


m_lpDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
// 以下为m_projection和m_viewport定义
// D3DXMATRIX m_projection;
// D3DXMATRIX m_viewport;
m_lpDevice->SetTransform(D3DTS_PROJECTION, &m_projection);
m_lpDevice->SetTransform(D3DTS_VIEW, &m_viewport);
m_lpDevice->EndScene();

m_lpDevice->SetRenderTarget(0, m_lpBackSurface);
m_lpDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 200, 0), 1.0f, 0);

m_lpDevice->BeginScene();
m_lpDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
// D3DXMatrixPerspectiveFovLH(&m_projection, 45.0f, WINDOW_WIDTH / WINDOW_HEIGHT, .1f, 1000.0f);
m_lpDevice->SetTransform(D3DTS_PROJECTION, &m_projection);
D3DXMatrixRotationY(&w, 120);
m_lpDevice->SetTransform(D3DTS_WORLD, &w);
// 以下为viewport的生成过程
/*D3DXVECTOR3 cameraPos(.0f, .0f, -4.0f);
D3DXVECTOR3 lookAtPos(.0f, .0f, .0f);
D3DXVECTOR3 upDir(.0f, 1.0f, .0f);

D3DXMatrixLookAtLH(&m_viewport, &cameraPos, &lookAtPos, &upDir);*/
m_lpDevice->SetTransform(D3DTS_VIEW, &m_viewport);
m_lpDevice->SetTexture(0, m_lpTexture);

// 以下为三角条带的生成过程
/*D3DVERTEX square[] =
{
{-1, 1, -1, D3DCOLOR_XRGB(255, 255, 255), 0, 0},
{1, 1, -1, D3DCOLOR_XRGB(255, 255, 255), 1, 0},
{-1, -1, -1, D3DCOLOR_XRGB(255, 255, 255), 0, 1},
{1, -1, -1, D3DCOLOR_XRGB(255, 255, 255), 1, 1}
};
m_lpDevice->CreateVertexBuffer(sizeof(square), 0, D3DFVF_VERTEX, D3DPOOL_DEFAULT, &m_lpBuffer, NULL);

void* pData = NULL;
m_lpBuffer->Lock(0, sizeof(square), (void**)&pData, 0);
memcpy(pData, square, sizeof(square));
m_lpBuffer->Unlock();*/
m_lpDevice->SetStreamSource(0, m_lpBuffer, 0, sizeof(D3DVERTEX));
m_lpDevice->SetFVF(D3DFVF_VERTEX);
m_lpDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
m_lpDevice->EndScene();
// 问题来了,材质我已经清空成了纯红色,为何绘制出的三角条带仍然是m_lpTexture携带的原有内容
m_lpDevice->Present(NULL, NULL, NULL, NULL);
...全文
586 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljb1672 2017-07-17
  • 打赏
  • 举报
回复
还在使用DX9下的固定管线,应该大部分人都不懂了。
WJN92 2017-06-28
  • 打赏
  • 举报
回复
材质和贴图不是一个东西吧
天外怪魔 2017-06-27
  • 打赏
  • 举报
回复
自己再顶顶,不好弄啊。
  • 打赏
  • 举报
回复
葫芦党帮忙Up
天外怪魔 2017-06-21
  • 打赏
  • 举报
回复
这个一定有人能解决,继续顶,谢谢大家。
天外怪魔 2017-06-19
  • 打赏
  • 举报
回复
再顶顶,昨天做梦的时候梦到csdn的网友给我解决了,醒来之后无比郁闷。
天外怪魔 2017-06-17
  • 打赏
  • 举报
回复
引用 10 楼 WJN92 的回复:
[quote=引用 9 楼 xuzzzhen123 的回复:] [quote=引用 8 楼 WJN92 的回复:] 为什么不用dx12呢?
学习而已。这个应该不是dx9的bug。因此换成dx12,上述算法估计也有类似问题。[/quote] 因为dx12所有资源都是自己管理, 资源方面非常直观 而且dx12的调试系统也很强大[/quote] 好的。谢谢兄弟这么多天一直关注,我再顶顶,真解决不了也没办法。
WJN92 2017-06-16
  • 打赏
  • 举报
回复
引用 9 楼 xuzzzhen123 的回复:
[quote=引用 8 楼 WJN92 的回复:] 为什么不用dx12呢?
学习而已。这个应该不是dx9的bug。因此换成dx12,上述算法估计也有类似问题。[/quote] 因为dx12所有资源都是自己管理, 资源方面非常直观 而且dx12的调试系统也很强大
天外怪魔 2017-06-16
  • 打赏
  • 举报
回复
引用 8 楼 WJN92 的回复:
为什么不用dx12呢?
学习而已。这个应该不是dx9的bug。因此换成dx12,上述算法估计也有类似问题。
WJN92 2017-06-16
  • 打赏
  • 举报
回复
为什么不用dx12呢?
天外怪魔 2017-06-15
  • 打赏
  • 举报
回复
自己再顶顶,也许哪位兄弟路过顺便给我解决了。
天外怪魔 2017-06-14
  • 打赏
  • 举报
回复
引用 3 楼 WJN92 的回复:
m_lpDevice->Clear 这个是清除视窗的吧 关材质什么事呢?
谢谢兄弟。 Clear之前调用了SetRenderTarget,设置了渲染对象是m_lpOffScreenSurface这个表面。 而这个表面属于我定义的材质,通过GetSurfaceLevel来获取的。 麻烦你再帮忙看一下,我水平烂,不好意思。
WJN92 2017-06-10
  • 打赏
  • 举报
回复
m_lpDevice->BeginScene(); m_lpDevice->Clear 这个要在 beginscene 下面使用吧 dx9 都忘记了,问我dx12还可以。 上去msdn查一下用法吧
WJN92 2017-06-10
  • 打赏
  • 举报
回复
m_lpDevice->Clear 这个是清除视窗的吧 关材质什么事呢?
天外怪魔 2017-06-09
  • 打赏
  • 举报
回复
顶顶更健康。
天外怪魔 2017-06-09
  • 打赏
  • 举报
回复
我自己Up,请大家一定帮忙啊。
那么通过这一个课程的介绍,首先我们就能够去了解到,Windows Server 2022 的系统当中,路由和远程访问服务,分别地为我们提供了路由和远程访问的功能,然后我们将详细地为大家去说明,路由和远程访问服务的应用场景、组件和特点,并且逐步地完成路由、NAT、RIP 路由组件的安装和配置,实现不同网络之间的通信能力,并且配置虚拟专用网、网络策略服务、以及 DirectAccess 服务,从而实现点对点的手动拔入,以及自动连接的远程访问,确保用户在任何的地方,只要能够接入到 Internet,就能够轻松地接入到公司的内部网络,访问公司网络资源,我们还将去配置远程访问服务的负载平衡,实现远程访问服务的高可用性第二章:介绍 Windows Server 2022 当中,远程访问功能的应用场景和特点,并且介绍课程的演示环境第三章:介绍 Windows Server 2022 当中,路由功能的应用场景和特点,并且完成路由功能的安装和配置,确保不同子网之间的通信第四章:介绍 Windows Server 2022 当中,RIP 和 NAT 路由协议,保障路由之间的相互学习,以及地址转换功能的配置第五章:介绍 Windows Server 2022 当中,不同类型的虚拟专用网服务的配置,理解不同类型虚拟专用网服务的特点第六章:介绍 Windows Server 2022 当中,多台不同虚拟专用网服务器的应用场景当中,网络策略服务的作用,并且完成网络策略服务器的安装和初始化配置第七章:介绍 DirectAccess 的特点,并且完成 DirectAccess 不同组件的安装和配置,完成 DirectAccess 连接的配置

455

社区成员

发帖
与我相关
我的任务
社区描述
其它游戏引擎
社区管理员
  • 其它游戏引擎社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧