Вопрос Crosshair imgui

folover

Пользователь
Сообщения
19
Реакции
1
Подскажите как нарисовать именно перекрестие а не круг в 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

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

folover

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

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

Darwin

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

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

folover

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

folover

Пользователь
Сообщения
19
Реакции
1

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

Да ты берешь функцию из 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

Активный
Сообщения
155
Реакции
8
В общем у меня получилось жирный плюс код давольно смешной ну работает. Спасибо за инфу а тоя так бы и искал функцию крест в 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

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

folover

Пользователь
Сообщения
19
Реакции
1
В параметрах функции можно указать толщину линии. Если ты её не указываешь - берётся дефолтное значение.
Попробуй этот код:
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);
 
Верх Низ