Вопрос Crosshair imgui

  • Автор темы Автор темы folover
  • Дата начала Дата начала
  • 1 тыс.

folover

Исследователь
Регистрация
03.08.2022
Сообщения
34
Подскажите как нарисовать именно перекрестие а не круг в 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 это круг а как крест?
 
используй не circle а addline и добавь их как тебе нужно по координатам
 
используй не circle а addline и добавь их как тебе нужно по координатам
Точно это же линии кородинаты как я понимаю ширину и высоту тоже нужно использовать к примеру вот?

float ViewportWidth;
float ViewportHeight;
float ScreenCX;
float ScreenCY;
 
Точно это же линии кородинаты как я понимаю ширину и высоту тоже нужно использовать к примеру вот?

float ViewportWidth;
float ViewportHeight;
float ScreenCX;
float ScreenCY;
Да ты берешь функцию из DrawList из ImGui (DrawLine вроде называется) где у тебя рендерится линний и рендеришь используя ширину и высоту монитора и их координаты по оси X и оси Y
 
Да ты берешь функцию из DrawList из ImGui (DrawLine вроде называется) где у тебя рендерится линний и рендеришь используя ширину и высоту монитора и их координаты по оси X и оси Y
Да ImGui (DrawLine. Спасибо!
 
Да ты берешь функцию из 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));
}
 
В общем у меня получилось жирный плюс код давольно смешной ну работает. Спасибо за инфу а тоя так бы и искал функцию крест в 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/*<-толщина линии*/);
 
В параметрах функции можно указать толщину линии. Если ты её не указываешь - берётся дефолтное значение.
Попробуй этот код:
C++:
draw->AddLine(ImVec2(CenterX, CenterY - crosshair), ImVec2(CenterX, CenterY - 20), ImColor(255, 0, 0, 255), 2/*<-толщина линии*/);
Спасибо это сработала как с AddLine так и с AddCircle(y)(y)
 
В параметрах функции можно указать толщину линии. Если ты её не указываешь - берётся дефолтное значение.
Попробуй этот код:
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);
 
Назад
Верх Низ