c++ - Strange lighting effect in direct3d switches dark and light -


i drawing d3dpt_pointlist , have set direct3d 9 device number of states. don't want use lighting, because want show vertex colors.

depending on view matrix, vertices appear become dark or light. change @ once , can't find renderstate solves problem.

i'll try keep short possible. if there info missing, please let me know.

struct myvertex {     float x, y, z;     d3dcolor color; };  // in initialization of device g_d3d9device->createvertexbuffer (sizeof(myvertex)*g_maxverts, d3dusage_writeonly | d3dusage_dynamic, 0, d3dpool_default, &g_d3d9dynamicvb, null); 

each frame set these render states:

g_d3d9device->setrenderstate (d3drs_cullmode, d3dcull_none); g_d3d9device->setrenderstate (d3drs_alphablendenable, false); g_d3d9device->setrenderstate (d3drs_zfunc, d3dcmp_lessequal); g_d3d9device->setrenderstate (d3drs_zwriteenable, true); g_d3d9device->setrenderstate (d3drs_zenable, true);  g_d3d9device->setrenderstate(d3drs_localviewer, false); g_d3d9device->setrenderstate (d3drs_lighting, false); g_d3d9device->setrenderstate (d3drs_colorvertex, false);  float size = g_pcmanager.getpointsize(); g_d3d9device->setrenderstate (d3drs_pointsize, *((dword*)&size));  g_d3d9device->setfvf (d3dfvf_xyz|d3dfvf_diffuse);  // , render void* vbptr;// = new char[m_vertsbuff0.size() * sizeof(myvertex)]; uint maxverts = std::min(m_vertsbuff0.size(),(uint)g_maxverts); if(succeeded(vertexbuffer->lock (0, 0, &vbptr, d3dlock_discard))) {     memcpy (vbptr, m_vertsbuff0.data(), sizeof(myvertex) * maxverts);     vertexbuffer->unlock ();      //without setting streamsource, d3d9 take (undefined) memory read/draw     device->setstreamsource (0, vertexbuffer, 0, sizeof(m_vertsbuff0[0]));      // draw!     device->drawprimitive (d3dpt_pointlist, 0, maxverts); } 

i note unity3d native c++ plugin, maybe there glitches i'm not aware of.

this looks different angles:

light version dark version

i needed add texture stages before drawing object.

device->settexturestagestate (0, d3dtss_colorop, d3dtop_selectarg1); device->settexturestagestate (0, d3dtss_colorarg1, d3dta_current); device->settexturestagestate (0, d3dtss_alphaop, d3dtop_selectarg1); device->settexturestagestate (0, d3dtss_alphaarg1, d3dta_current); device->settexturestagestate (1, d3dtss_colorop, d3dtop_disable); device->settexturestagestate (1, d3dtss_alphaop, d3dtop_disable); 

Comments

Popular posts from this blog

Unable to remove the www from url on https using .htaccess -