Witam,
Wiem, że to nie forum od tworzenia gier, ale niestety gamedev i warsztat.gd jest nieczynne, dlatego pytam tutaj, a nóż ktoś programuje w DirectX. Od 3 godzin próbuję dojść do tego dlaczego nie widać na ekranie czerwonego stożka.
Kod wygląda tak:

//Definicja wierzchołka

typedef struct ColorVertex
{
	ColorVertex(){}
	ColorVertex(float _x,float _y,float _z, D3DCOLOR _color)
	{
		x = _x; y = _y; z = _z; color = _color;
	}
	float x,y,z;
	D3DCOLOR color;
	static const DWORD FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE;
} ColorVertex;

//Pętla komunikatów (na razie nie wykorzystuje timeDelta)

void GUI::Display(float timeDelta)
{
	pDev->Clear(0, 0, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, 0xff000000, 1, 0); //STENCIL
    pDev->BeginScene();

	/*pDev->SetMaterial(&material::RED);
	pDev->SetStreamSource(0,pVBn2,0,sizeof(NormalVertex2));
	pDev->SetFVF(NormalVertex2::FVF);
	pDev->SetIndices(pIBn2);
	pDev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,object->getVerticesNr(vertNormal2),0,object->getTriangleNr(vertNormal2));*/

	static float angle = 0.0f;
	D3DXMatrixRotationY(&::MatWorld, angle);
	angle += 0.01f;
	if(angle == 360.02) angle = 0.0f;

    pDev->SetTransform(D3DTS_WORLD,&MatWorld);

	pDev->SetStreamSource(0,pVBc,0,sizeof(ColorVertex));
	pDev->SetFVF(ColorVertex::FVF);
	pDev->SetIndices(pIBc);
	pDev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,5,0,6);

	pDev->EndScene();
    pDev->Present(0, 0, 0, 0); //present back buffer
}

//Inicjalizacja danych:

D3DXMATRIX MatView;
D3DXMATRIX MatProj;
D3DXMATRIX MatWorld;
RetCode GUI::Setup()
{	
	char buffer[30];
	string napis;
	u32 x=0;

	x = object->getVerticesNr(vertColor);
	_itoa(x, buffer, 10);
	napis = "Liczba wierzcholkow wynosi ";
	napis.append(buffer);
	::MessageBox(hWnd,(char *)napis.c_str(),"",MB_OK);

	x = object->getTriangleNr(vertColor);
	_itoa(x, buffer, 10);
	napis = "Liczba trojkatow wynosi ";
	napis.append(buffer);
	::MessageBox(hWnd,(char *)napis.c_str(),"",MB_OK);

	/*for(u32 i=0; i<object->getVerticesNr(vertNormal2); i++)
	{
		napis = "Wektor normalny: ";
		_itoa((i32)object->vertsN2[i].nx, buffer, 10);
		napis.append(buffer);
		_itoa((i32)object->vertsN2[i].ny, buffer, 10);
		napis.append(buffer);
		_itoa((i32)object->vertsN2[i].nz, buffer, 10);
		napis.append(buffer);
		::MessageBox(hWnd,(char *)napis.c_str(),"",MB_OK);
	}*/

	//Debug stozek z kolorem:
	ColorVertex _vertsColor[] =
	{
		ColorVertex(-2.0f, 3.0f, 6.0f, 0xFFFF0000), //0
		ColorVertex(-1.0f, 0.0f, 5.0f, 0xFFFF0000), //1
		ColorVertex(-1.0f, 0.0f, 7.0f, 0xFFFF0000), //2
		ColorVertex(-3.0f, 0.0f, 7.0f, 0xFFFF0000), //3
		ColorVertex(-3.0f, 0.0f, 5.0f, 0xFFFF0000)  //4
	};

	//Table of indexes for NormalVertex2
	u32 _faceColor[] = {4,0,1, 2,0,3, 3,0,4, 1,0,2, 1,2,3, 4,1,3};

	//Create buffer
	//if(FAILED(pDev->CreateVertexBuffer(object->getVerticesNr(vertNormal)*sizeof(NormalVertex),D3DUSAGE_DYNAMIC, NormalVertex::FVF, D3DPOOL_DEFAULT, &pVBn, 0))) return NOK;
	if(FAILED(pDev->CreateVertexBuffer(object->getVerticesNr(vertNormal2)*sizeof(NormalVertex2),D3DUSAGE_DYNAMIC, NormalVertex2::FVF, D3DPOOL_DEFAULT, &pVBn2, 0))) return NOK;
	if(FAILED(pDev->CreateVertexBuffer(object->getVerticesNr(vertColor)*sizeof(ColorVertex),D3DUSAGE_DYNAMIC, ColorVertex::FVF, D3DPOOL_DEFAULT, &pVBc, 0))) return NOK;
	//if(FAILED(pDev->CreateIndexBuffer(object->getTriangleNr(vertNormal)*12,D3DUSAGE_DYNAMIC, D3DFMT_INDEX32, D3DPOOL_DEFAULT, &pIBn, 0))) return NOK;
	if(FAILED(pDev->CreateIndexBuffer(object->getTriangleNr(vertNormal2)*12,D3DUSAGE_DYNAMIC, D3DFMT_INDEX32, D3DPOOL_DEFAULT, &pIBn2, 0))) return NOK;
	if(FAILED(pDev->CreateIndexBuffer(object->getTriangleNr(vertColor)*12,D3DUSAGE_DYNAMIC, D3DFMT_INDEX32, D3DPOOL_DEFAULT, &pIBc, 0))) return NOK;

	//CopyDataIntoVertexBuffer(0, pVBn, void* verts);
	CopyDataIntoVertexBuffer(0, pVBn2, static_cast<NormalVertex2 *>(object->getVerts(vertNormal2)));
	//CopyDataIntoVertexBuffer(0, pVBc, _vertsColor);    //static_cast<ColorVertex *>(object->getVerts(vertColor)));
	//CopyDataIntoIndexBuffer(0, pIBn, void* verts);
	CopyDataIntoIndexBuffer(0, pIBn2, object->getIndices(vertNormal2));
	//CopyDataIntoIndexBuffer(0, pIBc, _faceColor);//object->getIndices(vertColor));

	//Copy data into buffer
    void* data = NULL;
    if(FAILED(pVBc->Lock(0, sizeof(_vertsColor), &data, D3DLOCK_DISCARD))) return NOK; //D3DLOCK_DISCARD - ewentualną poprzednią wartość bufora nadpisujemy
    memcpy(data, _vertsColor, sizeof(_vertsColor));
    pVBc->Unlock();

	if(FAILED(pIBc->Lock(0, sizeof(_faceColor), &data, D3DLOCK_DISCARD))) return NOK;
    memcpy(data, _faceColor, sizeof(_faceColor));
    pIBc->Unlock();

	pDev->SetRenderState(D3DRS_LIGHTING, FALSE );

	//macierze świata, widoku, projekcji
    D3DXMatrixPerspectiveFovLH(&MatProj, D3DXToRadian(90), 4.0f/3.0f, 1, 100);
	D3DXMatrixLookAtLH(&MatView, &D3DXVECTOR3(3,5,-6), &D3DXVECTOR3(0,0,0), &D3DXVECTOR3(0,1,0));

	pDev->SetTransform( D3DTS_VIEW, &::MatView);
	pDev->SetTransform( D3DTS_PROJECTION, &::MatProj);
		
	//cam->SetCamera(Tele);
    //swiatlo->SetSource(Midday);

	return OK;
}

W definicji klasy mam też m.in.

IDirect3DDevice9* pDev;
IDirect3DVertexBuffer9 *pVBn, *pVBn2, *pVBc;
IDirect3DIndexBuffer9 *pIBn, *pIBn2, *pIBc;

W powyższym kodzie widać dużo zakomentowanego kodu. Ot chciałem po prostu wykluczyć że to jakiś problem z obiektowością. Najlepsze jest to, że to działało, ale chciałem przejść na większą obiektowość i zacząłem tworzyć takie klasy jak swiatlo, camera, object (który zawiera definicje wierzchołków i różne informacje), funkcje opakowywujce jak CopyDataIntoVertexBuffer i się popsuło. Teraz juz nie potrafię wrócić do wersji działającej a tamtej neistety nie zachowałem:///