Вопрос Imgui AddLine glow

че
Пользователь
Статус
Оффлайн
Регистрация
27 Фев 2021
Сообщения
476
Реакции[?]
64
Поинты[?]
16K
Как сделать глоу на линию? Буду благодарен помощи.
 
Участник
Статус
Оффлайн
Регистрация
19 Апр 2020
Сообщения
1,169
Реакции[?]
313
Поинты[?]
151K
Как сделать глоу на линию? Буду благодарен помощи.
addlinemulticolor или как там оно
Код:
draw_list->AddRectFilledMultiColor(p, ImVec2(p.x + cal_text.x + 10, p.y + cal_text.y),
            glow_clr_first,
            glow_clr_first,
            glow_clr_second,
            glow_clr_second
        );
glow_clr_first = ImColor(g_cfg.menu.watermark_color.r(), watermark_color.g(), watermark_color.b(), 125), // note: glow color with alpha 125
glow_clr_second = ImColor(watermark_color.r(), watermark_color.g(), watermark_color.b(), 0); // note: glow color with alpha 0
 
Последнее редактирование:
priora compressor
Участник
Статус
Оффлайн
Регистрация
18 Май 2019
Сообщения
675
Реакции[?]
243
Поинты[?]
16K
Код:
for (int i = 5; i > 0; i--))
    draw_list->AddLine(p - (5 - i), p2 - (5 - i), ImColor(r,g,b, i * 50));
не делай так

addlinemulticolor или как там оно
Код:
draw_list->AddRectFilledMultiColor(p, ImVec2(p.x + cal_text.x + 10, p.y + cal_text.y),
            glow_clr_first,
            glow_clr_first,
            glow_clr_second,
            glow_clr_second
        );
glow_clr_first = ImColor(g_cfg.menu.watermark_color.r(), watermark_color.g(), watermark_color.b(), 125), // note: glow color with alpha 125
glow_clr_second = ImColor(watermark_color.r(), watermark_color.g(), watermark_color.b(), 0); // note: glow color with alpha 0
и не делай так

в имгуи есть тени!!!!
 
Пользователь
Статус
Оффлайн
Регистрация
19 Янв 2019
Сообщения
348
Реакции[?]
99
Поинты[?]
6K
C++:
#include "imgui.h"
#include "imgui_impl_opengl3.h"
#include "imgui_impl_glfw.h"
#include <GL/glew.h>
#include <GLFW/glfw3.h>

const char* vertexShaderSource = R"(
    #version 330 core
    layout(location = 0) in vec2 inPosition;
    out vec2 TexCoord;
    void main() {
        gl_Position = vec4(inPosition, 0.0, 1.0);
        TexCoord = (inPosition + 1.0) / 2.0;
    }
)";

const char* fragmentShaderSource = R"(
    #version 330 core
    in vec2 TexCoord;
    out vec4 FragColor;
    uniform sampler2D image;
    uniform vec4 glowColor = vec4(1.0, 1.0, 1.0, 1.0);
    uniform float glowIntensity = 1.0;

    void main() {
        vec4 baseColor = texture(image, TexCoord);
        vec4 glow = texture(image, TexCoord) * glowIntensity;
        FragColor = baseColor + glowColor * glow;
    }
)";

GLFWwindow* window;

void setupImGui()
{
    if (!glfwInit())
    {
        return;
    }

    window = glfwCreateWindow(800, 600, "glow", NULL, NULL);

    if (!window)
    {
        glfwTerminate();
        return;
    }

    glfwMakeContextCurrent(window);

    if (glewInit() != GLEW_OK)
    {
        glfwTerminate();
        return;
    }

    IMGUI_CHECKVERSION();
    ImGui::CreateContext();
    ImGuiIO& io = ImGui::GetIO();
    (void)io;

    ImGui_ImplGlfw_InitForOpenGL(window, true);
    ImGui_ImplOpenGL3_Init("#version 330 core");
    ImGui::StyleColorsDark();
}

int main()
{
    setupImGui();

    GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);

    glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
    glCompileShader(vertexShader);

    GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
    glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
    glCompileShader(fragmentShader);

    GLuint shaderProgram = glCreateProgram();
    glAttachShader(shaderProgram, vertexShader);
    glAttachShader(shaderProgram, fragmentShader);
    glLinkProgram(shaderProgram);
    glUseProgram(shaderProgram);

    GLint glowColorLoc = glGetUniformLocation(shaderProgram, "glowColor");
    glUniform4f(glowColorLoc, 1.0f, 1.0f, 1.0f, 1.0f);

    GLint glowIntensityLoc = glGetUniformLocation(shaderProgram, "glowIntensity");
    glUniform1f(glowIntensityLoc, 0.5f);

    while (!glfwWindowShouldClose(window))
   {
        glfwPollEvents();

        ImGui_ImplOpenGL3_NewFrame();
        ImGui_ImplGlfw_NewFrame();
        ImGui::NewFrame();

        ImGui::Begin("gl_img");

        ImGui::Image((void*)textureID, ImVec2(800, 600));

        ImGui::End();

        ImGui::Render();
        glUseProgram(shaderProgram);
        ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
        glfwSwapBuffers(window);
    }
    ImGui_ImplOpenGL3_Shutdown();
    ImGui_ImplGlfw_Shutdown();
    ImGui::DestroyContext();
    glfwDestroyWindow(window);
    glfwTerminate();
    return 0;
}
Блять, конечно же, нужно иметь шейдер, можно и тенями, не понимаю недовольство людей ниже, но и тот и другой варианты, вполне реализуемы, только шейдером будет куда лучше. Скорее всего, я вижу не понимание логики, и того момента, что люди просто никогда этим не пользовались из за своего не умения
 
Последнее редактирование:
Сверху Снизу