ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   IDirect3DDevice9 (https://forum.antichat.xyz/showthread.php?t=1504307)

Vintik 25.02.2024 04:44

Цитата:

Сообщение от CleanLegend

Пример для тестирования:

C++:





Код:

void
DrawRect
(
LPDIRECT3DDEVICE9 m_pDevice
,
int
X
,
int
Y
,
int
L
,
int
H
,
D3DCOLOR color
)
{
D3DRECT rect
=
{
X
,
Y
,
X
+
L
,
Y
+
H
}
;
m_pDevice
->
Clear
(
1
,
&
rect
,
D3DCLEAR_TARGET
,
color
,
0
,
0
)
;
}
HRESULT WINAPI
myEndScene
(
IDirect3DDevice9
*
m_pDevice
)
{
DrawRect
(
m_pDevice
,
250
,
250
,
10
,
10
,
0xFFFF0000
)
;
return
oEndScene
(
m_pDevice
)
;
}



Получаем:

https://i.imgur.com/qAEN8Gn.png

Спасибо, работает.

https://forum.antichat.xyz/attachments/28461125/

Но пару вопросов, @CleanLegend.

1) Нет полупрозрачности. Использую

C++:





Код:

m_pDevice
->
Clear



и цвет в формате ARGB. Такое впечатление, что там формат просто RGB, потому что альфа канал вообще ни на что не влияет.

2) Не могу понять как рисовать что-то кроме квадратиков.

Хотя бы примитивный кружочек, линию нужной толщины. Но ладно, это я еще кое-как смогу с помощью квадратиков нарисовать...

А как насчёт текста?

И да, я знаю про возможность добавить имгуи, но пока что такой необходимости нет, поэтому просто помоги как писать текст.

И еще, не по теме, но всё же - как включить мышку?

Smeruxa 27.02.2024 01:38

2) chatgpt

C++:





Код:

#include
void
DrawCircle
(
LPDIRECT3DDEVICE9 m_pDevice
,
int
X
,
int
Y
,
int
radius
,
D3DCOLOR color
)
{
const
int
numSegments
=
32
;
// You can adjust this for smoother or more segmented circles
const
float
angleIncrement
=
2.0f
*
D3DX_PI
/
numSegments
;
std
::
vector

rects
;
for
(
int
i
=
0
;
i

(
radius
*
std
::
cos
(
angle
)
)
;
float
y1
=
Y
+
static_cast

(
radius
*
std
::
sin
(
angle
)
)
;
float
x2
=
X
+
static_cast

(
radius
*
std
::
cos
(
angle
+
angleIncrement
)
)
;
float
y2
=
Y
+
static_cast

(
radius
*
std
::
sin
(
angle
+
angleIncrement
)
)
;
D3DRECT rect
=
{
static_cast

(
x1
)
,
static_cast

(
y1
)
,
static_cast

(
x2
)
,
static_cast

(
y2
)
}
;
rects
.
push_back
(
rect
)
;
}
m_pDevice
->
Clear
(
rects
.
size
(
)
,
rects
.
data
(
)
,
D3DCLEAR_TARGET
,
color
,
0
,
0
)
;
}
HRESULT WINAPI
myEndScene
(
IDirect3DDevice9
*
m_pDevice
)
{
// Draw a circle centered at (250, 250) with a radius of 10 and red color
DrawCircle
(
m_pDevice
,
250
,
250
,
10
,
0xFFFF0000
)
;
return
oEndScene
(
m_pDevice
)
;
}


Vintik 27.02.2024 20:15

Цитата:

Сообщение от Smeruxa

2) chatgpt

Цитата:

Сообщение от Vintik

Но ладно, это я еще кое-как смогу с помощью квадратиков нарисовать...
А как насчёт текста?


Smeruxa 27.02.2024 20:46

hola vpn + chat gpt (40 рублей аккаунт стоит личный и меньше) =

C++:





Код:

#include
IDWriteFactory
*
dwriteFactory
;
IDWriteTextFormat
*
textFormat
;
// Инициализация DirectWrite
HRESULT
InitDirectWrite
(
)
{
if
(
FAILED
(
DWriteCreateFactory
(
DWRITE_FACTORY_TYPE_SHARED
,
__uuidof
(
IDWriteFactory
)
,
reinterpret_cast

(
&
dwriteFactory
)
)
)
)
{
return
E_FAIL
;
}
if
(
FAILED
(
dwriteFactory
->
CreateTextFormat
(
L
"Arial"
,
nullptr
,
DWRITE_FONT_WEIGHT_NORMAL
,
DWRITE_FONT_STYLE_NORMAL
,
DWRITE_FONT_STRETCH_NORMAL
,
12.0f
,
L
"en-US"
,
&
textFormat
)
)
)
{
return
E_FAIL
;
}
return
S_OK
;
}
// Функция отрисовки текста
void
DrawText
(
IDirect3DDevice9
*
m_pDevice
,
const
wchar_t
*
text
,
int
x
,
int
y
,
D3DCOLOR color
)
{
textFormat
->
SetTextAlignment
(
DWRITE_TEXT_ALIGNMENT_LEADING
)
;
textFormat
->
SetParagraphAlignment
(
DWRITE_PARAGRAPH_ALIGNMENT_NEAR
)
;
RECT rect
=
{
x
,
y
,
0
,
0
}
;
textFormat
->
SetTextAlignment
(
DWRITE_TEXT_ALIGNMENT_LEADING
)
;
m_pDevice
->
BeginScene
(
)
;
// Установка параметров рендеринга текста (если необходимо)
// ...
// Отрисовка текста
dwriteFactory
->
CreateTextLayout
(
text
,
wcslen
(
text
)
,
textFormat
,
200.0f
,
50.0f
,
nullptr
,
nullptr
,
nullptr
)
;
m_pDevice
->
EndScene
(
)
;
}



C++:





Код:

//Затем в функции myEndScene вы можете вызвать DrawText так:
HRESULT WINAPI
myEndScene
(
IDirect3DDevice9
*
m_pDevice
)
{
DrawText
(
m_pDevice
,
L
"Hello, DirectX!"
,
100
,
100
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
255
)
)
;
return
oEndScene
(
m_pDevice
)
;
}
//Этот код предполагает, что InitDirectWrite уже был вызван ранее для инициализации DirectWrite.



Время: 14:14