keine farben, aber texturen! warum?



  • hallo!
    es ist die hin und wieder gestellte frage nach farben und licht.
    ich hab zwar texturen, auch mit transparenz und alles, aber meine objekte OHNE textur bleiben alle grau.
    hier die renderstates und lights meiner "draw" funktion:
    (ich hab fast alle renderstates schon mal ein und ausgeschaltet.. deshalb sinds so viele... bin schon durch einige foren durch 🙂

    m_pD3Ddevice->Clear( 0L, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, 
    							0x000000ff, 1.0f, 0L );
    
    		m_pD3Ddevice->SetTransform(D3DTS_WORLD,&tmpMat);
    
    		m_pD3Ddevice->SetRenderState( D3DRS_LIGHTING, TRUE );
    
    		// Finally, turn on some ambient light.
    		m_pD3Ddevice->SetRenderState( D3DRS_AMBIENT, 0x00bfbfbf );
    
    		// Set up a material. The material here just has the diffuse and ambient
    		// colors set to yellow. Note that only one material can be used at a time.
    		D3DMATERIAL9 mtrl;
    		ZeroMemory( &mtrl, sizeof(D3DMATERIAL9) );
    		mtrl.Diffuse.r = mtrl.Ambient.r = 0.7f;
    		mtrl.Diffuse.g = mtrl.Ambient.g = 0.7f;
    		mtrl.Diffuse.b = mtrl.Ambient.b = 0.7f;
    		mtrl.Diffuse.a = mtrl.Ambient.a = 0.7f;
    		m_pD3Ddevice->SetMaterial( &mtrl );
    
    		// Set up a white, directional light, with an oscillating direction.
    		// Note that many lights may be active at a time (but each one slows down
    		// the rendering of our scene). However, here we are just using one. Also,
    		// we need to set the D3DRS_LIGHTING renderstate to enable lighting
    		D3DXVECTOR3 vecDir;
    		D3DLIGHT9 light;
    		ZeroMemory( &light, sizeof(D3DLIGHT9) );
    		light.Type       = D3DLIGHT_DIRECTIONAL;
    		light.Diffuse.r  = 1.0f;
    		light.Diffuse.g  = 1.0f;
    		light.Diffuse.b  = 1.0f;
    		vecDir = D3DXVECTOR3(0,-1,0);
    		D3DXVec3Normalize( (D3DXVECTOR3*)&light.Direction, &vecDir );
    		light.Range       = 100.0f;
    		m_pD3Ddevice->SetLight( 0, &light );
    
    		m_pD3Ddevice->LightEnable(0, TRUE );
    
    		m_pD3Ddevice->BeginScene();
    		//START///////////////////
    
    		m_pD3Ddevice->SetTextureStageState(0, D3DTSS_COLOROP,   D3DTOP_MODULATE);
    		m_pD3Ddevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
    		m_pD3Ddevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
    		m_pD3Ddevice->SetRenderState(D3DRS_ZENABLE, TRUE);
    		m_pD3Ddevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
    		m_pD3Ddevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
    		m_pD3Ddevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
    

    die vertexes der objekte sind FVF mit folgenden einstellungen:

    D3DFVF_MYVERTEX (D3DFVF_XYZ| D3DFVF_DIFFUSE | D3DFVF_NORMAL |D3DFVF_TEX1|D3DFVF_TEXCOORDSIZE2(0))
    

    die farben für die punkte werden gesetzt mit:

    vertex[i].colour = D3DCOLOR_XRGB(0, 255, 0);
    

    warum ist immer noch alles grau? hab ich ein renderstate falsch oder fehlend?

    thx. gehirn!



  • Materials und Vertex-Farben vertragen sich nicht gleichzeitig.

    Überleg dir ob du Material- oder Vertex-Farben haben willst. Wenn ein Material spezifizert ist nimmt D3D defaultmäßig das Material.
    Kannst du aber mit

    device->SetRenderState(D3DMATERIALCOLORSOURCE ,D3DMCS_COLOR1  );
    

    auf die Diffuse Vertex-Color ändern. siehe doku



  • so einfach war die lösung nicht.
    geht immer noch net.
    alles grau.
    wenn ich alle farbwerte (diffuse usw.) auf color1 setze wird nur eben alles uniform (ohne verläufe) das ist alles. 😡



  • hat keiner eine idee? oder einen erfahrungswert (was ihm schonmal passiert ist)?
    meine app scheint so wie alle anderen alten von mir zu sein-- trotzdem funzt es net--- hmm 😞


Anmelden zum Antworten