[Direct3D] TriangleStrip will nicht so wie ich



  • Hallo,

    ich versuche gerade ein Viereck via TriangleStrip zu zeichnen. Jedoch bekomme ich immer nur ein Dreieck raus.
    Hier der Code:

    #define FORMATEDFVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)
    
    struct FORMATEDVERTEX {
    	float x, y;
    	D3DCOLOR color;
    };
    
    void Init() {
    	FORMATEDVERTEX vertices[] =
    	{
    		400.0f, 200.0f, D3DCOLOR_XRGB(255, 0, 0),
    		600.0f, 200.0f, D3DCOLOR_XRGB(255, 0, 0),
    		400.0f, 300.0f, D3DCOLOR_XRGB(255, 0, 0),
    		600.0f, 300.0f, D3DCOLOR_XRGB(255, 0, 0)
    	};
    	d3dd->CreateVertexBuffer(sizeof(vertices), 0, FORMATEDFVF, D3DPOOL_MANAGED, &vBuffer, 0);
    	void* pvoid;
    	vBuffer->Lock(0, 0, &pvoid, 0);
    	std::memcpy(pvoid, vertices, sizeof(vertices));
    	vBuffer->Unlock();
    };
    
    void Draw() {
    	d3dd->SetFVF(FORMATEDFVF);
    	d3dd->SetStreamSource(0, vBuffer, 0, sizeof(FORMATEDVERTEX));
    	d3dd->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 1);
    };
    

    Sehen tue ich aber nur das hier
    Da stellen sich mir zwei Fragen:
    1. Wieso wird nur ein Dreieck gezeichnet?
    2. Wieso hat das Dreieck einen Farbverlauf und wird in der oberen linken Ecke schwarz?



  • Hallo,

    D3DFVF_XYZRHW benötigt 4 Koordinaten. x,y,z und rhw.

    //edit um die unvermeidliche nächste Frage zu beantworten:
    http://old.zfx.info/DisplayThread.php?TID=7115



  • Danke,
    hät ich eigentlich auch selber über google draufkommen können 🙄
    Habs jetzt so geändert

    void Init() {
    	FORMATEDVERTEX vertices[] =
    	{
    		400.0f, 200.0f, 0.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0),
    		600.0f, 200.0f, 0.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0),
    		400.0f, 300.0f, 0.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0),
    		600.0f, 300.0f, 0.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0)
    	};
    	d3dd->CreateVertexBuffer(sizeof(vertices), 0, FORMATEDFVF, D3DPOOL_MANAGED, &vBuffer, 0);
    	void* pvoid;
    	vBuffer->Lock(0, 0, &pvoid, 0);
    	std::memcpy(pvoid, vertices, sizeof(vertices));
    	vBuffer->Unlock();
    };
    
    void Draw() {
    	d3dd->SetFVF(FORMATEDFVF);
    	d3dd->SetStreamSource(0, vBuffer, 0, sizeof(FORMATEDVERTEX));
    	d3dd->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 1);
    };
    

    Jetzt seh ich zwar ein komplett rotes Dreieck, aber das Zweite lässt nichts von sich blicken. Hab zum Test mal culling ausgemacht, hat aber auch nichts gebracht..



  • Direct3D schrieb:

    Jetzt seh ich zwar ein komplett rotes Dreieck, aber das Zweite lässt nichts von sich blicken. Hab zum Test mal culling ausgemacht, hat aber auch nichts gebracht..

    Überleg mal was die 1 in deinem DrawPrimitive() Aufruf sagt...


Anmelden zum Antworten