Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
SetTexture działa tylko w niewielkiej ilości ramek
#1
Zamieniam teksturę na konkretny obiekt w grze i działa ... ale rysuje moją teksturę tylko na kilka milisekund (przeważnie po prostu mruga i znika), a po tym oryginalna tekstura powraca do niej = \ Przy okazji zmiany wyglądu wizualnego dla modelu gracza moja tekstura pojawia się ponownie, ale mniej niż sekundę później - powraca oryginalna tekstura! (wygląda na to, że moja tekstura pokazuje za każdym razem odtworzony model - przy aktualizacji opcji kolorowania z gry itp.) Mam na myśli znalazłem wszystkie parametry dla DrawIndexedPrimitive i wszystkich, ale co robię źle?   Oto moja funkcja wywołania zwrotnego:     Kod:   funkcja DrawIndexedPrimitiveCallback (self: wskaźnik; _Type: TD3DPrimitiveType; BaseVertexIndex: Integer; MinVertexIndex, NumVertices, startIndex, primCount: LongWord): HResult; stdcall; rozpocznij asm pushad end; jeśli self = nil then begin Wynik: = DrawIndexedPrimitiveNext (self, _Type, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount); wyjście ; koniec ; jeśli (cst = 0) i (NumVertices> 610) i (NumVertices <3900) i (primCount> 75) oraz (primCount <4450) i (startIndex = 2580), to należy rozpocząć //IDirect3DDevice9(self).SetRenderState(D3DRS_FOGENABLE,0 ); if (logo = nil), a następnie rozpocznij D3DXCreateTextureFromFile (IDirect3DDevice9 (self), pchar (logof), logo); koniec ; writeln (log, 'SetTex:', IDirect3DDevice9 (self). SetTexture (0, logo)); //IDirect3DDevice9(self).SetTexture(1,nil); koniec ; asm popad end; Wynik: = DrawIndexedPrimitiveNext (self, _Type, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount); koniec ;   SetTexture zawsze zwraca 0, więc wygląda na to, że działa dobrze, ale jak to możliwe, że widzę wtedy oryginalną teksturę?   UPD: Okej, zrozumiałem: mój problem polega na tym, żeby zrobić krok. Otrzymuję param param od mojego wywołania zwrotnego SetStreamSource hooked - ale wydaje się, że ta funkcja nie rozpoczyna się za każdym razem obiekt renderuje Oo   Czy istnieje możliwość uzyskania parametru Stride z funkcji DrawIndexedPrimitive? Wiem, że to kiepskie pytanie, ale jak inaczej mógłbym wiedzieć krok, jeśli SetStreamSource nie wykonuje ...))
Reply
#2
nigdy byśmy tego nie odgadli, skoro nie uwzględniłeś tego kodu
Reply
#3
Zacytować: Wysłane przez pierwotnie RDCM Wygląda na to, że nie ma dla ciebie niespodzianki. Czy możesz wyjaśnić, w jaki sposób można renderować ten sam bufor wierzchołków z tym samym przesunięciem, ale z różnymi wartościami liczby wierzchołków / wartości początkowych? Kiedy testowałem, aby narysować różne bufory wierzchołków w mojej aplikacji D3D do stubów - w każdej klatce była taka sama liczba vertictów i ta sama wartość primCount. jeśli połączysz 2 obiekty w jednym buforze wierzchołków, powiedz jeden z 20 punktami i jeden z 5 punktami. pierwsze połączenie zaczynasz od indeksu 0 i liczby 20. drugie połączenie zaczynasz od indeksu 20 i liczby 5
Reply
#4
Zacytować: Originally Posted by learn_more jeśli połączysz 2 obiekty w jednym buforze wierzchołków, powiedz jeden z 20 punktami i jeden z 5 punktami. pierwsze połączenie zaczynasz od indeksu 0 i liczby 20. drugie połączenie zaczynasz od indeksu 20 i liczby 5 Tak, wydaje się legit =) Ale nadal coś mi brakuje. Na przykład mój prev. kwestia: Zacytować: Wysłane przez pierwotnie RDCM Zamieniam teksturę na konkretny obiekt w grze i działa ... ale rysuje moją teksturę tylko na kilka milisekund (przeważnie po prostu mruga i znika), a po tym oryginalna tekstura powraca do niej = \ dlaczego to się dzieje? W grze ten obiekt był solidny (mam na myśli to, że wyglądał statycznie bez animacji lub multipartów). I jest renderowany za pomocą 1 wywołania DrawIndexedPrim. Jak do cholery to używa różnych obiektów z 1 bufora wierzchołków?) Sry nadal wysysa logikę 3D.
Reply
#5
Zacytować: Wysłane przez pierwotnie RDCM Czy istnieje możliwość uzyskania parametru Stride z funkcji DrawIndexedPrimitive? Wiem, że to kiepskie pytanie, ale jak inaczej mógłbym wiedzieć krok, jeśli SetStreamSource nie wykonuje ...)) Po prostu użyj IDirect3DDevice9 :: GetStreamSource? Kod: HRESULT GetStreamSource ([in] UINT StreamNumber, [in, out] IDirect3DVertexBuffer9 ** ppStreamData, [out] UINT * pOffsetInBytes, [out] UINT * pStride);
Reply
#6
Zacytować: Originally Posted by buFFy! Po prostu użyj IDirect3DDevice9 :: GetStreamSource? lmao)) po prostu nie wiedziałem o tym funku)) bądź pobłażliwy, widziałem nagłówki DX po raz pierwszy jak miesiąc temu) Niektóre aplikacje zostały zakodowane przy użyciu OpenGL, ale to nie pomaga, bo tutaj jest zbyt duża różnica. P.S. wydaje się, że nie muszę wtedy przechwytywać SetStreamSource) i lol'd
Reply
#7
Zacytować: Wysłane przez pierwotnie RDCM lmao)) po prostu nie wiedziałem o tym funku)) bądź pobłażliwy, widziałem nagłówki DX po raz pierwszy jak miesiąc temu) Niektóre aplikacje zostały zakodowane przy użyciu OpenGL, ale to nie pomaga, bo tutaj jest zbyt duża różnica. P.S. wydaje się, że nie muszę wtedy przechwytywać SetStreamSource) i lol'd Setery należące do API zwykle mają pasujący getter.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)