HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 08.08.2020, 19:43
r0den
Новичок
Регистрация: 12.02.2016
Сообщений: 24
С нами: 5394404

Репутация: 8
По умолчанию

Всем посанам привет а остальным соболезную

Пытался значит я вывести на чистом аси при помощи хуков d3d9 квадратики и кружочки

Всё работает идеально но... Всё что пытаюсь выводить через DrawPrimitive(Up) идёт по *****

Мб я что-то не так делаю, пиздил я и с других форумов код для рендера и пытался брать код с этого ответа но игре **х** всё равно экран чист но если через pDevice->Clear то всё видно и тож через D3DXCreateLine всё видно так что подразумеваю что проблема где то в DrawPrimitive а не в хуке

Подскажите знатоки пж как заставить всё это дело работать

Цитата:
Сообщение от Спойлер  


C++:





Код:
void
Line
(
float
x1
,
float
y1
,
float
x2
,
float
y2
,
float
width
,
bool
antialias
,
DWORD color
)
{
ID3DXLine
*
m_Line
;
D3DXCreateLine
(
pDevice
,
&
m_Line
)
;
D3DXVECTOR2 line
[
]
=
{
D3DXVECTOR2
(
x1
,
y1
)
,
D3DXVECTOR2
(
x2
,
y2
)
}
;
m_Line
->
SetWidth
(
width
)
;
if
(
antialias
)
m_Line
->
SetAntialias
(
1
)
;
m_Line
->
Begin
(
)
;
m_Line
->
Draw
(
line
,
2
,
color
)
;
m_Line
->
End
(
)
;
m_Line
->
Release
(
)
;
}


C++:





Код:
D3DRECT rect
=
{
X
,
Y
,
X
+
L
,
Y
+
H
}
;
m_pDevice
->
Clear
(
1
,
&
rect
,
D3DCLEAR_TARGET
,
color
,
0
,
0
)
;


Цитата:
Сообщение от Спойлер  


C++:





Код:
void
Circle
(
float
x
,
float
y
,
float
radius
,
int
rotate
,
int
type
,
bool
smoothing
,
int
resolution
,
DWORD color
)
{
std
::
vector

circle
(
resolution
+
2
)
;
float
angle
=
rotate
*
D3DX_PI
/
180
;
float
pi
;
if
(
type
==
circle_type
::
full
)
pi
=
D3DX_PI
;
// Full circle
if
(
type
==
circle_type
::
half
)
pi
=
D3DX_PI
/
2
;
// 1/2 circle
if
(
type
==
circle_type
::
quarter
)
pi
=
D3DX_PI
/
4
;
// 1/4 circle
for
(
int
i
=
0
;
i

CreateVertexBuffer
(
(
resolution
+
2
)
*
sizeof
(
vertex
)
,
D3DUSAGE_WRITEONLY
,
D3DFVF_XYZRHW
|
D3DFVF_DIFFUSE
,
D3DPOOL_DEFAULT
,
&
g_pVB
,
NULL
)
;
VOID
*
pVertices
;
g_pVB
->
Lock
(
0
,
(
resolution
+
2
)
*
sizeof
(
vertex
)
,
(
void
*
*
)
&
pVertices
,
0
)
;
memcpy
(
pVertices
,
&
circle
[
0
]
,
(
resolution
+
2
)
*
sizeof
(
vertex
)
)
;
g_pVB
->
Unlock
(
)
;
pDevice
->
SetTexture
(
0
,
NULL
)
;
pDevice
->
SetPixelShader
(
NULL
)
;
if
(
smoothing
)
{
pDevice
->
SetRenderState
(
D3DRS_MULTISAMPLEANTIALIAS
,
TRUE
)
;
pDevice
->
SetRenderState
(
D3DRS_ANTIALIASEDLINEENABLE
,
TRUE
)
;
}
pDevice
->
SetRenderState
(
D3DRS_ALPHABLENDENABLE
,
TRUE
)
;
pDevice
->
SetRenderState
(
D3DRS_SRCBLEND
,
D3DBLEND_SRCALPHA
)
;
pDevice
->
SetRenderState
(
D3DRS_DESTBLEND
,
D3DBLEND_INVSRCALPHA
)
;
pDevice
->
SetStreamSource
(
0
,
g_pVB
,
0
,
sizeof
(
vertex
)
)
;
pDevice
->
SetFVF
(
D3DFVF_XYZRHW
|
D3DFVF_DIFFUSE
)
;
pDevice
->
DrawPrimitive
(
D3DPT_LINESTRIP
,
0
,
resolution
)
;
if
(
g_pVB
!=
NULL
)
g_pVB
->
Release
(
)
;
}


C++:





Код:
void
CRender
::
Line
(
int
sX
,
int
sY
,
int
eX
,
int
eY
,
D3DCOLOR D3DCOLOR
)
{
vertex pVertex
[
2
]
=
{
{
sX
,
sY
,
0.0f
,
1.0f
,
D3DCOLOR
}
,
{
eX
,
eY
,
0.0f
,
1.0f
,
D3DCOLOR
}
}
;
MyDevice
->
SetRenderState
(
D3DRS_LIGHTING
,
FALSE
)
;
MyDevice
->
SetRenderState
(
D3DRS_ZENABLE
,
D3DZB_FALSE
)
;
MyDevice
->
SetRenderState
(
D3DRS_FOGENABLE
,
FALSE
)
;
MyDevice
->
SetRenderState
(
D3DRS_CULLMODE
,
D3DCULL_NONE
)
;
MyDevice
->
SetRenderState
(
D3DRS_ALPHABLENDENABLE
,
TRUE
)
;
MyDevice
->
SetRenderState
(
D3DRS_SRCBLEND
,
D3DBLEND_SRCALPHA
)
;
MyDevice
->
SetRenderState
(
D3DRS_DESTBLEND
,
D3DBLEND_INVSRCALPHA
)
;
MyDevice
->
SetRenderState
(
D3DRS_LIGHTING
,
FALSE
)
;
MyDevice
->
SetRenderState
(
D3DRS_STENCILENABLE
,
FALSE
)
;
MyDevice
->
SetTexture
(
0
,
NULL
)
;
MyDevice
->
SetPixelShader
(
NULL
)
;
MyDevice
->
SetFVF
(
D3DFVF_XYZRHW
|
D3DFVF_DIFFUSE
|
D3DFVF_TEX1
)
;
MyDevice
->
DrawPrimitiveUP
(
D3DPT_LINELIST
,
1
,
&
pVertex
,
sizeof
(
vertex
)
)
;
}


 
Ответить с цитированием

  #2  
Старый 08.08.2020, 20:43
MISTER_GONWIK
Познавший АНТИЧАТ
Регистрация: 09.03.2013
Сообщений: 1,262
С нами: 6935116

Репутация: 183


По умолчанию

Цитата:
Сообщение от r0den  

Всем посанам привет а остальным соболезную
Пытался значит я вывести на чистом аси при помощи хуков d3d9 квадратики и кружочки
Всё работает идеально но... Всё что пытаюсь выводить через DrawPrimitive(Up) идёт по *****
Мб я что-то не так делаю, пиздил я и с других форумов код для рендера и пытался брать код с этого ответа но игре **х** всё равно экран чист но если через pDevice->Clear то всё видно и тож через D3DXCreateLine всё видно так что подразумеваю что проблема где то в DrawPrimitive а не в хуке
Подскажите знатоки пж как заставить всё это дело работать

Цитата:
Сообщение от Спойлер  


C++:





Код:
void
Line
(
float
x1
,
float
y1
,
float
x2
,
float
y2
,
float
width
,
bool
antialias
,
DWORD color
)
{
ID3DXLine
*
m_Line
;
D3DXCreateLine
(
pDevice
,
&
m_Line
)
;
D3DXVECTOR2 line
[
]
=
{
D3DXVECTOR2
(
x1
,
y1
)
,
D3DXVECTOR2
(
x2
,
y2
)
}
;
m_Line
->
SetWidth
(
width
)
;
if
(
antialias
)
m_Line
->
SetAntialias
(
1
)
;
m_Line
->
Begin
(
)
;
m_Line
->
Draw
(
line
,
2
,
color
)
;
m_Line
->
End
(
)
;
m_Line
->
Release
(
)
;
}


C++:





Код:
D3DRECT rect
=
{
X
,
Y
,
X
+
L
,
Y
+
H
}
;
m_pDevice
->
Clear
(
1
,
&
rect
,
D3DCLEAR_TARGET
,
color
,
0
,
0
)
;


Цитата:
Сообщение от Спойлер  


C++:





Код:
void
Circle
(
float
x
,
float
y
,
float
radius
,
int
rotate
,
int
type
,
bool
smoothing
,
int
resolution
,
DWORD color
)
{
std
::
vector

circle
(
resolution
+
2
)
;
float
angle
=
rotate
*
D3DX_PI
/
180
;
float
pi
;
if
(
type
==
circle_type
::
full
)
pi
=
D3DX_PI
;
// Full circle
if
(
type
==
circle_type
::
half
)
pi
=
D3DX_PI
/
2
;
// 1/2 circle
if
(
type
==
circle_type
::
quarter
)
pi
=
D3DX_PI
/
4
;
// 1/4 circle
for
(
int
i
=
0
;
i

CreateVertexBuffer
(
(
resolution
+
2
)
*
sizeof
(
vertex
)
,
D3DUSAGE_WRITEONLY
,
D3DFVF_XYZRHW
|
D3DFVF_DIFFUSE
,
D3DPOOL_DEFAULT
,
&
g_pVB
,
NULL
)
;
VOID
*
pVertices
;
g_pVB
->
Lock
(
0
,
(
resolution
+
2
)
*
sizeof
(
vertex
)
,
(
void
*
*
)
&
pVertices
,
0
)
;
memcpy
(
pVertices
,
&
circle
[
0
]
,
(
resolution
+
2
)
*
sizeof
(
vertex
)
)
;
g_pVB
->
Unlock
(
)
;
pDevice
->
SetTexture
(
0
,
NULL
)
;
pDevice
->
SetPixelShader
(
NULL
)
;
if
(
smoothing
)
{
pDevice
->
SetRenderState
(
D3DRS_MULTISAMPLEANTIALIAS
,
TRUE
)
;
pDevice
->
SetRenderState
(
D3DRS_ANTIALIASEDLINEENABLE
,
TRUE
)
;
}
pDevice
->
SetRenderState
(
D3DRS_ALPHABLENDENABLE
,
TRUE
)
;
pDevice
->
SetRenderState
(
D3DRS_SRCBLEND
,
D3DBLEND_SRCALPHA
)
;
pDevice
->
SetRenderState
(
D3DRS_DESTBLEND
,
D3DBLEND_INVSRCALPHA
)
;
pDevice
->
SetStreamSource
(
0
,
g_pVB
,
0
,
sizeof
(
vertex
)
)
;
pDevice
->
SetFVF
(
D3DFVF_XYZRHW
|
D3DFVF_DIFFUSE
)
;
pDevice
->
DrawPrimitive
(
D3DPT_LINESTRIP
,
0
,
resolution
)
;
if
(
g_pVB
!=
NULL
)
g_pVB
->
Release
(
)
;
}


C++:





Код:
void
CRender
::
Line
(
int
sX
,
int
sY
,
int
eX
,
int
eY
,
D3DCOLOR D3DCOLOR
)
{
vertex pVertex
[
2
]
=
{
{
sX
,
sY
,
0.0f
,
1.0f
,
D3DCOLOR
}
,
{
eX
,
eY
,
0.0f
,
1.0f
,
D3DCOLOR
}
}
;
MyDevice
->
SetRenderState
(
D3DRS_LIGHTING
,
FALSE
)
;
MyDevice
->
SetRenderState
(
D3DRS_ZENABLE
,
D3DZB_FALSE
)
;
MyDevice
->
SetRenderState
(
D3DRS_FOGENABLE
,
FALSE
)
;
MyDevice
->
SetRenderState
(
D3DRS_CULLMODE
,
D3DCULL_NONE
)
;
MyDevice
->
SetRenderState
(
D3DRS_ALPHABLENDENABLE
,
TRUE
)
;
MyDevice
->
SetRenderState
(
D3DRS_SRCBLEND
,
D3DBLEND_SRCALPHA
)
;
MyDevice
->
SetRenderState
(
D3DRS_DESTBLEND
,
D3DBLEND_INVSRCALPHA
)
;
MyDevice
->
SetRenderState
(
D3DRS_LIGHTING
,
FALSE
)
;
MyDevice
->
SetRenderState
(
D3DRS_STENCILENABLE
,
FALSE
)
;
MyDevice
->
SetTexture
(
0
,
NULL
)
;
MyDevice
->
SetPixelShader
(
NULL
)
;
MyDevice
->
SetFVF
(
D3DFVF_XYZRHW
|
D3DFVF_DIFFUSE
|
D3DFVF_TEX1
)
;
MyDevice
->
DrawPrimitiveUP
(
D3DPT_LINELIST
,
1
,
&
pVertex
,
sizeof
(
vertex
)
)
;
}


а почему ты рендерстейты, которые изменил, обратно не восстанавливаешь
 
Ответить с цитированием

  #3  
Старый 08.08.2020, 21:39
r0den
Новичок
Регистрация: 12.02.2016
Сообщений: 24
С нами: 5394404

Репутация: 8
По умолчанию

Цитата:
Сообщение от MISTER_GONWIK  

а почему ты рендерстейты, которые изменил, обратно не восстанавливаешь
Восстановил обратно всё что изменил, ни### не изменилось, ни### не рисуется на экране

C++:





Код:
vertex pVertex
[
2
]
=
{
{
100
,
100
,
0.0f
,
1.0f
,
0xffff0000
}
,
{
100
,
200
,
0.0f
,
1.0f
,
0xffff0000
}
}
;
DWORD oRenderState
[
9
]
;
pDevice
->
GetRenderState
(
D3DRS_LIGHTING
,
&
oRenderState
[
0
]
)
;
pDevice
->
GetRenderState
(
D3DRS_ZENABLE
,
&
oRenderState
[
1
]
)
;
pDevice
->
GetRenderState
(
D3DRS_FOGENABLE
,
&
oRenderState
[
2
]
)
;
pDevice
->
GetRenderState
(
D3DRS_CULLMODE
,
&
oRenderState
[
3
]
)
;
pDevice
->
GetRenderState
(
D3DRS_ALPHABLENDENABLE
,
&
oRenderState
[
4
]
)
;
pDevice
->
GetRenderState
(
D3DRS_SRCBLEND
,
&
oRenderState
[
5
]
)
;
pDevice
->
GetRenderState
(
D3DRS_DESTBLEND
,
&
oRenderState
[
6
]
)
;
pDevice
->
GetRenderState
(
D3DRS_LIGHTING
,
&
oRenderState
[
7
]
)
;
pDevice
->
GetRenderState
(
D3DRS_STENCILENABLE
,
&
oRenderState
[
8
]
)
;
IDirect3DBaseTexture9
*
oTexture
;
pDevice
->
GetTexture
(
0
,
&
oTexture
)
;
IDirect3DPixelShader9
*
oPixelShader
;
pDevice
->
GetPixelShader
(
&
oPixelShader
)
;
DWORD oFVF
;
pDevice
->
GetFVF
(
&
oFVF
)
;
pDevice
->
SetRenderState
(
D3DRS_LIGHTING
,
FALSE
)
;
pDevice
->
SetRenderState
(
D3DRS_ZENABLE
,
D3DZB_FALSE
)
;
pDevice
->
SetRenderState
(
D3DRS_FOGENABLE
,
FALSE
)
;
pDevice
->
SetRenderState
(
D3DRS_CULLMODE
,
D3DCULL_NONE
)
;
pDevice
->
SetRenderState
(
D3DRS_ALPHABLENDENABLE
,
TRUE
)
;
pDevice
->
SetRenderState
(
D3DRS_SRCBLEND
,
D3DBLEND_SRCALPHA
)
;
pDevice
->
SetRenderState
(
D3DRS_DESTBLEND
,
D3DBLEND_INVSRCALPHA
)
;
pDevice
->
SetRenderState
(
D3DRS_LIGHTING
,
FALSE
)
;
pDevice
->
SetRenderState
(
D3DRS_STENCILENABLE
,
FALSE
)
;
pDevice
->
SetTexture
(
0
,
NULL
)
;
pDevice
->
SetPixelShader
(
NULL
)
;
pDevice
->
SetFVF
(
D3DFVF_XYZRHW
|
D3DFVF_DIFFUSE
|
D3DFVF_TEX1
)
;
pDevice
->
DrawPrimitiveUP
(
D3DPT_LINELIST
,
1
,
&
pVertex
,
sizeof
(
vertex
)
)
;
pDevice
->
SetRenderState
(
D3DRS_LIGHTING
,
oRenderState
[
0
]
)
;
pDevice
->
SetRenderState
(
D3DRS_ZENABLE
,
oRenderState
[
1
]
)
;
pDevice
->
SetRenderState
(
D3DRS_FOGENABLE
,
oRenderState
[
2
]
)
;
pDevice
->
SetRenderState
(
D3DRS_CULLMODE
,
oRenderState
[
3
]
)
;
pDevice
->
SetRenderState
(
D3DRS_ALPHABLENDENABLE
,
oRenderState
[
4
]
)
;
pDevice
->
SetRenderState
(
D3DRS_SRCBLEND
,
oRenderState
[
5
]
)
;
pDevice
->
SetRenderState
(
D3DRS_DESTBLEND
,
oRenderState
[
6
]
)
;
pDevice
->
SetRenderState
(
D3DRS_LIGHTING
,
oRenderState
[
7
]
)
;
pDevice
->
SetRenderState
(
D3DRS_STENCILENABLE
,
oRenderState
[
8
]
)
;
pDevice
->
SetTexture
(
0
,
oTexture
)
;
pDevice
->
SetPixelShader
(
oPixelShader
)
;
pDevice
->
SetFVF
(
oFVF
)
;


Заметил ещё что если рисовать линии через CreateLine все 3д надписи в игре пропадают, скорее всего тут уже я что-то делаю не так и возможно чего-то не восстанавливаю.

Пытался поискать в гугле как правильно работать с d3d9 но ничего нормального не нашёл.

Буду благодарен если подскажете как всё это дело делать правильно
 
Ответить с цитированием

  #4  
Старый 17.06.2021, 20:26
deropleat
Участник форума
Регистрация: 16.03.2017
Сообщений: 105
С нами: 4821087

Репутация: 133
По умолчанию

По моему, что-то ты очень сильно намудрил. У тебя круг рисуется одним методом, а линия - другим. Честно говоря я не знаю в чем у тебя проблема, поскольку не имею всего кода и прочего. Если проблема все еще актуальна, то скинь мне целиком проект - попробую тебе подправить.

Попробуй отрисовывать также, как описывал это я: https://www.blast.hk/threads/32712/#post-500147
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.