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);

画面に太陽が表示されません。ロードしようとしている太陽ではなく、世界の残りの部分でアルファ ブレンドを行っているようです。これは、使用しているデバイスが原因である可能性がありますか? どんな助けでも大歓迎です:)

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 に答える