Вопрос Crosshair imgui

folover

Исследователь
Сообщения
34
Реакции
2
Подскажите как нарисовать именно перекрестие а не круг в imgui ещё он не много не по центру что тоже напрегает


Для просмотра скрытого содержимого вы должны авторизироваться или зарегистрироваться



Для просмотра скрытого содержимого вы должны авторизироваться или зарегистрироваться


if (crosshair)
{
auto draw = ImGui::GetBackgroundDrawList();
draw->AddCircle(ImVec2(io.DisplaySize.x / 2, io.DisplaySize.y / 2), 3, IM_COL32(255, 0, 0, 255), 100, 0.0f);
}

Circle это круг а как крест?
 

Darwin

Команда форума
Администратор
Сообщения
945
Реакции
513
используй не circle а addline и добавь их как тебе нужно по координатам
 

folover

Исследователь
Сообщения
34
Реакции
2
используй не circle а addline и добавь их как тебе нужно по координатам
Точно это же линии кородинаты как я понимаю ширину и высоту тоже нужно использовать к примеру вот?

float ViewportWidth;
float ViewportHeight;
float ScreenCX;
float ScreenCY;
 

Darwin

Команда форума
Администратор
Сообщения
945
Реакции
513
Точно это же линии кородинаты как я понимаю ширину и высоту тоже нужно использовать к примеру вот?

float ViewportWidth;
float ViewportHeight;
float ScreenCX;
float ScreenCY;
Да ты берешь функцию из DrawList из ImGui (DrawLine вроде называется) где у тебя рендерится линний и рендеришь используя ширину и высоту монитора и их координаты по оси X и оси Y
 

folover

Исследователь
Сообщения
34
Реакции
2
Да ты берешь функцию из DrawList из ImGui (DrawLine вроде называется) где у тебя рендерится линний и рендеришь используя ширину и высоту монитора и их координаты по оси X и оси Y
Да ImGui (DrawLine. Спасибо!
 

folover

Исследователь
Сообщения
34
Реакции
2

Для просмотра скрытого содержимого вы должны авторизироваться или зарегистрироваться

Да ты берешь функцию из DrawList из ImGui (DrawLine вроде называется) где у тебя рендерится линний и рендеришь используя ширину и высоту монитора и их координаты по оси X и оси Y
В общем у меня получилось жирный плюс код давольно смешной ну работает. Спасибо за инфу а тоя так бы и искал функцию крест в imgui😀

Для просмотра скрытого содержимого вы должны авторизироваться или зарегистрироваться




float CenterX = 0.0f;
float CenterY = 0.0f;
CenterX = (float)ViewportWidth / 2;
CenterY = (float)ViewportHeight / 2;

if (crosshair)
{
auto draw = ImGui::GetBackgroundDrawList();
draw->AddLine(ImVec2(CenterX - crosshair, CenterY), ImVec2(CenterX - 20, CenterY), ImColor(255, 0, 0, 255));
draw->AddLine(ImVec2(CenterX + crosshair, CenterY), ImVec2(CenterX + 20, CenterY), ImColor(255, 0, 0, 255));
draw->AddLine(ImVec2(CenterX, CenterY + crosshair), ImVec2(CenterX, CenterY + 20), ImColor(255, 0, 0, 255));
draw->AddLine(ImVec2(CenterX, CenterY - crosshair), ImVec2(CenterX, CenterY - 20), ImColor(255, 0, 0, 255));
}
 

niklive

Активный
Сообщения
165
Реакции
16
В общем у меня получилось жирный плюс код давольно смешной ну работает. Спасибо за инфу а тоя так бы и искал функцию крест в imgui😀

Для просмотра скрытого содержимого вы должны авторизироваться или зарегистрироваться




float CenterX = 0.0f;
float CenterY = 0.0f;
CenterX = (float)ViewportWidth / 2;
CenterY = (float)ViewportHeight / 2;

if (crosshair)
{
auto draw = ImGui::GetBackgroundDrawList();
draw->AddLine(ImVec2(CenterX - crosshair, CenterY), ImVec2(CenterX - 20, CenterY), ImColor(255, 0, 0, 255));
draw->AddLine(ImVec2(CenterX + crosshair, CenterY), ImVec2(CenterX + 20, CenterY), ImColor(255, 0, 0, 255));
draw->AddLine(ImVec2(CenterX, CenterY + crosshair), ImVec2(CenterX, CenterY + 20), ImColor(255, 0, 0, 255));
draw->AddLine(ImVec2(CenterX, CenterY - crosshair), ImVec2(CenterX, CenterY - 20), ImColor(255, 0, 0, 255));
}
В параметрах функции можно указать толщину линии. Если ты её не указываешь - берётся дефолтное значение.
Попробуй этот код:
C++:
draw->AddLine(ImVec2(CenterX, CenterY - crosshair), ImVec2(CenterX, CenterY - 20), ImColor(255, 0, 0, 255), 2/*<-толщина линии*/);
 

folover

Исследователь
Сообщения
34
Реакции
2
В параметрах функции можно указать толщину линии. Если ты её не указываешь - берётся дефолтное значение.
Попробуй этот код:
C++:
draw->AddLine(ImVec2(CenterX, CenterY - crosshair), ImVec2(CenterX, CenterY - 20), ImColor(255, 0, 0, 255), 2/*<-толщина линии*/);
Спасибо это сработала как с AddLine так и с AddCircle(y)(y)
 

folover

Исследователь
Сообщения
34
Реакции
2
В параметрах функции можно указать толщину линии. Если ты её не указываешь - берётся дефолтное значение.
Попробуй этот код:
C++:
draw->AddLine(ImVec2(CenterX, CenterY - crosshair), ImVec2(CenterX, CenterY - 20), ImColor(255, 0, 0, 255), 2/*<-толщина линии*/);
ещё вопрос как выровять AddCircle? добавил +1 пиксель к координатам сей час он более мение ровно но всё равно слеггка не по центру

draw->AddCircle(ImVec2(io.DisplaySize.x / 2 + 1 , io.DisplaySize.y / 2 + 1), 4, IM_COL32(255, 0, 0, 255), 100, 0.1f);
 
Верх Низ