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

Пропустили ли вы через PIX, что происходит, когда вы во время вызова DrawPrimitive? – Anteru

ответ

2

На самом деле у вас нет ничьей. Вы пропустили отправку кода, или это, возможно, ваша проблема?

Если вам не хватает ничьей, я бы предположил, что вызов DrawPrimitiveUP(), скорее всего, тот, который вы хотите. Вам также необходимо установить формат потока в соответствии с вашей структурой ветекса (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.

+0

Это может быть моя проблема! Это еще не все, что хорошо документировано. Единственный ресурс, который я мог найти, был http://www.two-kings.de/tutorials/dxgraphics/dxgraphics17.html – Mark

+0

. Я добавил призыв рисования из связанного с ним учебника. все еще нет кубиков. – Mark

+0

Да, но вы не установили источник потока (или использовали переменную DrawPrimitiveUP) или формат вершин. –