0

这仍然是一个悬而未决的问题。

我正在尝试让点精灵系统工作在我的世界中渲染太阳。我注意到另一个用户问了一个类似的问题(使用相同的代码,大概来自我的班级:))但他们无法完成这个。我目前的代码如下:

 float fPointSize = 10.0f,fPointScaleB = 100.0f;

IDirect3DDevice9 *m_Device = LudoRenderer::GetInstance()->GetDevice(); m_Device->SetRenderState(D3DRS_POINTSPRITEENABLE,true); m_Device->SetRenderState(D3DRS_POINTSCALEENABLE,true);

 m_Device->SetRenderState(D3DRS_POINTSIZE,
                                  *((DWORD*)&fPointSize));
    m_Device->SetRenderState(D3DRS_POINTSCALE_B,
                                  *((DWORD*)&fPointScaleB));

    m_Device->SetRenderState(D3DRS_ALPHABLENDENABLE,true);
    m_Device->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_ONE);
    m_Device->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_ONE);


    std::wstring hardcoded = L"..\\Data\\sun.png";
 m_SunTexture = LudoTextureManager::GetInstance()->GetTextureData(hardcoded.c_str()).m_Texture;

  m_Device->SetTexture(0,m_SunTexture);
     m_Device->DrawPrimitive(D3DPT_POINTLIST,0,12);

我没有在屏幕上看到我的太阳,它似乎在我的世界其他地方进行 alpha 混合,而不是在我试图加载的任何太阳上。这可能是因为我使用了哪些设备?任何帮助将不胜感激 :)

4

1 回答 1

2

您实际上似乎没有在那里进行抽奖。您是否错过了发布一些代码,或者这可能是您的问题?

如果您错过了绘图调用,我建议您可能需要 DrawPrimitiveUP() 调用。您还需要设置流格式以匹配您的 vetex 结构 ( setFVF() )。这些方面的东西:

#define D3DFVF_SUNVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)

struct SUNVERTEX
{
  float x,y,z;
  DWORD colour;
};

D3DVECTOR pos = { 0.f, 0.f, 0.f }; // Set this to the position you want
SUNVERTEX sunVert = { pos.x, pos.y, pos.z, D3DCOLOR_RGBA( 255, 255, 0, 255 ) };

IDirect3DDevice9& device = LudoRenderer::GetInstance()->GetDevice();
device->SetFVF( D3DFVF_SUNVERTEX );
device->DrawPrimitiveUP( D3DPT_POINTLIST, 1, sunVert, sizeof(SUNVERTEX) );

如果您有时间,我强烈建议您阅读 DirectX SDK 文档中的“编程指南”(您应该安装它)。这不是一个教程,但它确实涵盖了 DirectX 架构的基础知识。

于 2009-11-09T01:47:14.987 回答