Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
DrawPrimitive nie rysuje
#1
Próbuję wykonać funkcję draw_square, ta działa, ale jak widać, kwadratowy wierzchołek jest statyczny ...       Kod:        void draw_square (void) {LPDIRECT3DVERTEXBUFFER9 v_buffer = NULL; // wskaźnik do bufora wierzchołków wierzchołki CUSTOMVERTEX [] = {{0.0f, 0.0f, 0.5f, 1.0f, D3DCOLOR_ARGB (100, 0, 0, 0),}, {200.0f, 0.0f, 0.5f, 1.0f, D3DCOLOR_ARGB (100, 0, 0, 0),}, {0.0f, 200.0f, 0.5f, 1.0f, D3DCOLOR_ARGB (100, 0, 0, 0),}, {200.0f, 200.0f, 0.5 f, 1.0f, D3DCOLOR_ARGB (100, 0, 0, 0),},}; // utwórz interfejs bufora wierzchołków o nazwie v_buffer d3ddev -> CreateVertexBuffer (4 * sizeof (CUSTOMVERTEX), 0, CUSTOMFVF, D3DPOOL_MANAGED i v_buffer, NULL); VOID * pVoid; // nieważny wskaźnik // zablokuj v_buffer i załaduj do niego wierzchołki v_buffer -> Lock (0, 0, (void **) & pVoid, 0); memcpy (pvoid, vertices, sizeof (vertices)); v_buffer -> Odblokuj (); // wybierz, który format wierzchołków używamy d3ddev -> SetFVF (CUSTOMFVF); // wybierz bufor wierzchołków do wyświetlenia d3ddev -> SetStreamSource (0, v_buffer, 0, sizeof (CUSTOMVERTEX)); // skopiuj bufor wierzchołków do bufora tylnego d3ddev -> DrawPrimitive (D3DPT_TRIANGLESTRIP, 0, 2); // zamknij i zwolnij bufor wierzchołków v_buffer -> Release (); }   tutaj jest mój prawdziwy kod, który nie daje żadnego błędu, ale też niczego nie rysuje.       Kod:        void draw_square (CUSTOMVERTEX vertices []); // deklaracje 3D void render_frame (void) {// wyczyść okno do ciemnoniebieskiego // d3ddev-> Wyczyść (0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB (0x00,0x00,0x00), 1.0f, 0); d3ddev -> BeginScene (); // rozpoczyna scenę 3D // tworzy wierzchołki używając wierzchołków CUSTOMVERTEX struct CUSTOMVERTEX [] = {{0.0f, 0.0f, 0.5f, 1.0f, D3DCOLOR_ARGB (100, 0, 0, 0),}, {200.0f , 0.0f, 0.5f, 1.0f, D3DCOLOR_ARGB (100, 0, 0, 0),}, {0.0f, 200.0f, 0.5f, 1.0f, D3DCOLOR_ARGB (100, 0, 0, 0),}, { 200,0f, 200,0f, 0,5f, 1,0f, D3DCOLOR_ARGB (100, 0, 0, 0),},}; draw_square (wierzchołki); d3ddev -> EndScene (); // kończy scenę 3D d3ddev -> Present (NULL, NULL, NULL, NULL); // wyświetla utworzoną ramkę na ekranie} void draw_square (CUSTOMVERTEX vertices [4]) {LPDIRECT3DVERTEXBUFFER9 v_buffer = NULL; // wskaźnik do bufora wierzchołków // utwórz interfejs bufora wierzchołków o nazwie v_buffer d3ddev -> CreateVertexBuffer (4 * sizeof (CUSTOMVERTEX), 0, CUSTOMFVF, D3DPOOL_MANAGED i v_buffer, NULL); VOID * pVoid; // nieważny wskaźnik // zablokuj v_buffer i załaduj do niego wierzchołki v_buffer -> Lock (0, 0, (void **) & pVoid, 0); memcpy (pvoid, vertices, sizeof (vertices)); v_buffer -> Odblokuj (); // wybierz, który format wierzchołków używamy d3ddev -> SetFVF (CUSTOMFVF); // wybierz bufor wierzchołków do wyświetlenia d3ddev -> SetStreamSource (0, v_buffer, 0, sizeof (CUSTOMVERTEX)); // skopiuj bufor wierzchołków do bufora tylnego d3ddev -> DrawPrimitive (D3DPT_TRIANGLESTRIP, 0, 2); // zamknij i zwolnij bufor wierzchołków v_buffer -> Release (); }
Reply
#2
DirectDraw jest kompatybilny tylko z Direct3D 10.1 afaik ... Będziesz musiał zrobić naprawdę bałagan, żeby to zadziałało
Reply
#3
nie możesz mieć racji, jak już powiedziałem, pierwszy kod działa, ale kiedy próbuję narysować dynamiczny wierzchołek za pomocą metody, właśnie wtedy nie rysuje. Robię coś nie tak, nie mogę zrozumieć co.
Reply
#4
DirectDraw jest ekscists od DirectX 8, więc dlaczego miałby być kompatybilny tylko z DirectX 10? Chociaż wydaje mi się, że jest to rysunek oparty na prymitywach, a nie na DirectDraw ... Dlaczego nie dasz swojej funkcji dodatkowych parametrów (float x, float y, kolor DWORD) i po prostu wygenerujesz tablicę CUSTOMVERTEX w swojej funkcji?
Reply
#5
Mogę zrobić to ofc, ale chciałbym wiedzieć, dlaczego to, co robię teraz, nie rysuje i nie daje żadnego błędu albo ... Może robię coś złego ze składnią (jak im nowicjusz w C ++)?
Reply
#6
zmiana void draw_square (wierzchołki CUSTOMVERTEX [4]) do void draw_square (wierzchołki CUSTOMVERTEX *) i spróbuj, jeśli to działa
Reply
#7
bez efektu :\
Reply
#8
Próbujesz stworzyć grę wideo? Po co korzystać z metod programowania i tworzenia gier czy próbujesz oszukiwać? Lub robisz grę lub program? Po prostu użyj czegoś takiego jak Device-> Wyczyść robi dla linii, jeśli chcesz.
Reply
#9
Robię nakładkę, oszukujesz. Powiedziano mi, że Clear nie obsługuje przezroczystości, więc nie będę mógł używać efektów Aero do przezroczystej nakładki.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)