2009-11-09 3 views
0

이것은 여전히 ​​중요한 문제입니다.직접적인 x로 포인트 스프라이트 사용하기. 어떤 단계를 밟아야합니까?

나는 내 세계에서 태양을 렌더링하는 포인트 스프라이트 시스템을 얻으려고하고있다. 비슷한 질문을하는 다른 사용자가 있음을 알게되었습니다 (아마도 내 수업에서 같은 코드로 :)). 그러나 그들은 이것을 완료 할 수 없었습니다. 이에 대한 나의 현재 코드는 다음과 같습니다

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

나는 화면에 내 일을 보지 않고, 오히려 내가로드하기 위해 노력하고있어 어떤 일에보다, 나의 세계의 나머지 부분에 알파 혼합을하고있는 것으로 보인다. 내가 사용하고있는 장치 때문에 이것이있을 수 있습니까? 도움이 크게 주시면 감사하겠습니다 :)

+0

Aack! 내 눈이 피가 나기 전에 어딘가에 LudoRenderer :: GetInstance() -> GetDevice()를 저장하십시오 .... – Justicle

+0

이해할 수 : P – Mark

+0

DrawPrimitive 호출 중에 어떤 일이 발생했는지 보려면 PIX를 실행 했습니까? – Anteru

답변

2

실제로 거기에 그리기 전화가없는 것 같습니다. 일부 코드 게시를 놓친 적이 있습니까? 아니면 아마도 이것이 문제일까요?

그리기 호출이 누락 된 경우 DrawPrimitiveUP() 호출이 원하는 것일 수 있습니다. 또한 vetex 구조 (setFVF())와 일치하도록 스트림 형식을 설정해야합니다. 이 라인을 따라 뭔가 : 당신은 내가 강하게의 DirectX SDK 설명서에서 "프로그래밍 가이드"를 읽어 보시기 바랍니다 것입니다 시간이 있다면

#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 아키텍처의 기본 사항을 다루고 있습니다.

+0

내 문제 일 수 있습니다! 이 모든 것이 잘 문서화 된 것은 아닙니다. 내가 찾을 수있는 유일한 리소스는 http://www.two-kings.de/tutorials/dxgraphics/dxgraphics17.html – Mark

+0

입니다. 연결된 튜토리얼에서 드로 콜을 추가했습니다. 여전히 주사위가 없습니다. – Mark

+0

예, 스트림 소스를 설정하지 않았거나 DrawPrimitiveUP 변형을 사용하지 않았거나 정점 포맷을 사용하지 않았습니다. –

관련 문제