使用 DirectX 9;精灵抗锯齿光环

发布于 2024-11-15 17:26:50 字数 2061 浏览 2 评论 0原文

因此,每当我将精灵放入 2D 世界中时,我都会使用 DirectX 9 进行编码。精灵图像 p 周围出现白色“光环”。我使用的是 PNG,精灵后面的背景是透明的。我也尝试过使用粉红色背景。看起来光晕只出现在像素的直线上,而且只出现在某些边缘上。非常感谢任何帮助!

m_d3d = Direct3DCreate9(D3D_SDK_VERSION); // create the Direct3D interface

D3DPRESENT_PARAMETERS d3dpp; // create a struct to hold various device information

ZeroMemory(&d3dpp, sizeof(d3dpp)); // clear out the struct for use
d3dpp.Windowed = windowed; // is program fullscreen, not windowed?
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;    // discard old frames
d3dpp.hDeviceWindow = hWnd;    // set the window to be used by Direct3D
d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;    // set the back buffer format to 32-bit
d3dpp.BackBufferWidth = screenWidth;    // set the width of the buffer
d3dpp.BackBufferHeight = screenHeight;    // set the height of the buffer
d3dpp.EnableAutoDepthStencil = TRUE;       // automatically run the z-buffer for us
d3dpp.AutoDepthStencilFormat = D3DFMT_D16; // 16-bit pixel format for the z-buffer

// create a device class using this information and the info from the d3dpp stuct
m_d3d->CreateDevice(D3DADAPTER_DEFAULT,
                  D3DDEVTYPE_HAL,
                  hWnd,
                  D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                  &d3dpp,
                  &m_d3ddev);

D3DXCreateSprite(m_d3ddev, &m_d3dspt);    // create the Direct3D Sprite object

LPDIRECT3DTEXTURE9 texture;
D3DXCreateTextureFromFileEx(m_d3ddev, "DC.png", D3DX_DEFAULT, D3DX_DEFAULT,
D3DX_DEFAULT, NULL, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, D3DX_DEFAULT, 
D3DX_DEFAULT, D3DCOLOR_XRGB(255, 0, 255), NULL, NULL, &texture);

m_d3ddev->BeginScene();

m_d3dspt->Begin(D3DXSPRITE_ALPHABLEND);    // begin sprite drawing with transparency

D3DXVECTOR3 center(0.0f, 0.0f, 0.0f), position((appropriate x), (appropriate y), 1);
m_d3dspt->Draw(texture, NULL, &center, &position, D3DCOLOR_ARGB(255, 255, 255, 255));

m_d3dspt->End();    // end sprite drawing

m_d3ddev->EndScene();

m_d3ddev->Present(NULL, NULL, NULL, NULL);

谢谢 彼得

So I am coding in DirectX 9 and whenever I place a sprite inside of a 2D world. There is a white colored "halo" that appears around the sprite image p. I am using PNGs and the background behind the sprite is transparent. I have also tried using a pink background as well. It seems that the halo only appears on straight lines of pixels but only on some edges. Any help is greatly appreciated!

m_d3d = Direct3DCreate9(D3D_SDK_VERSION); // create the Direct3D interface

D3DPRESENT_PARAMETERS d3dpp; // create a struct to hold various device information

ZeroMemory(&d3dpp, sizeof(d3dpp)); // clear out the struct for use
d3dpp.Windowed = windowed; // is program fullscreen, not windowed?
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;    // discard old frames
d3dpp.hDeviceWindow = hWnd;    // set the window to be used by Direct3D
d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;    // set the back buffer format to 32-bit
d3dpp.BackBufferWidth = screenWidth;    // set the width of the buffer
d3dpp.BackBufferHeight = screenHeight;    // set the height of the buffer
d3dpp.EnableAutoDepthStencil = TRUE;       // automatically run the z-buffer for us
d3dpp.AutoDepthStencilFormat = D3DFMT_D16; // 16-bit pixel format for the z-buffer

// create a device class using this information and the info from the d3dpp stuct
m_d3d->CreateDevice(D3DADAPTER_DEFAULT,
                  D3DDEVTYPE_HAL,
                  hWnd,
                  D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                  &d3dpp,
                  &m_d3ddev);

D3DXCreateSprite(m_d3ddev, &m_d3dspt);    // create the Direct3D Sprite object

LPDIRECT3DTEXTURE9 texture;
D3DXCreateTextureFromFileEx(m_d3ddev, "DC.png", D3DX_DEFAULT, D3DX_DEFAULT,
D3DX_DEFAULT, NULL, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, D3DX_DEFAULT, 
D3DX_DEFAULT, D3DCOLOR_XRGB(255, 0, 255), NULL, NULL, &texture);

m_d3ddev->BeginScene();

m_d3dspt->Begin(D3DXSPRITE_ALPHABLEND);    // begin sprite drawing with transparency

D3DXVECTOR3 center(0.0f, 0.0f, 0.0f), position((appropriate x), (appropriate y), 1);
m_d3dspt->Draw(texture, NULL, ¢er, &position, D3DCOLOR_ARGB(255, 255, 255, 255));

m_d3dspt->End();    // end sprite drawing

m_d3ddev->EndScene();

m_d3ddev->Present(NULL, NULL, NULL, NULL);

Thanks
Peter

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心房的律动 2024-11-22 17:26:50

当您从精灵图集中弄乱纹理坐标并且意外地跑出纹理或跑到另一个纹理时,就会发生这种情况。

无论如何,最常见的是,据我所知。

This occurs when you screw up your texture co-ordinates from sprite atlasing and you accidentally run off the texture or on to another texture.

Most commonly, anyway, AFAIK.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文