Вопрос Отрисовка/Drawing

Пользователь
Статус
Оффлайн
Регистрация
28 Апр 2018
Сообщения
540
Реакции[?]
130
Поинты[?]
2K
хз как в доте, но в других играх при рисовании есп хп и т.п. отталкиваются от костей персонажа
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
WorldToNDC(absOrigin.x, absOrigin.y, absOrigin.z + HealthBarOffset)
z это ось высоты в сурс движке.
хпбар это инт. не страшно. инты к флоатам спокойно прибавляются
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
324
Реакции[?]
24
Поинты[?]
12K
Немного не понял, мне нужно находить Z тоже в моем worldtoscreen? Просто вот я нашел в ИДЕ эту часть, которая отвечает за матрицу, за позицию на скрине(NDC)

myscreen.y = _y * dif;
myscreen.x = _x;

1646045988862.png
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
Немного не понял, мне нужно находить Z тоже в моем worldtoscreen? Просто вот я нашел в ИДЕ эту часть, которая отвечает за матрицу, за позицию на скрине(NDC)

myscreen.y = _y * dif;
myscreen.x = _x;

Посмотреть вложение 194343
иди проспись и еще раз прочитай. может так понятнее будет:
Vector3 point = entity.GetAbsOrigin();
point.z += entity.GetHealthBarOffset();
WorldToScreen(point);//где WorldToScreen переводит не в коорды экрана в пикселях а в НДС(то есть в2с с закоменченным(вырезанным) последним шагом там где размеры экрана и тд). следовательно правильное название "WorldToNDC"
3д точку(абсориджин) подними на 200(не именно 200 а хп бар оффсет, для ясности 200 написал) мировых метров вверх.
и не надо делать ничего когда w < 0.001(по факту тут должно быть меньше 0, но взято 0.001 изза погрешности в измерениях и неточности(у float ограниченная точность)(
Пожалуйста, авторизуйтесь для просмотра ссылки.
). так и оставь 0.001 просто представляй что там " >= 0" написано, то есть неотрицательно. потому что когда отрицательно это значит точка позади камеры(то есть отрицательная глубина. ну ты понял кароче)). это значит точка сзади камеры(очевидно что ее не может в таком случае быть на экране).
ну и эту хуиту убери dif = 1.0 / W -> blablabla * dif. очевидно же что это эквивалентно blablabla / W. это перспектив дивайд(чем дальше объект тем глубже он кажется на экране. ака Perspective projection. есть еще ortographic(нет разниы между дальними и ближними объектами. всё сплющивается как бы до одной глубины). вот разница на скрине(ну еще погуглить можешь)
image001.png
)
я конечно не фулл твой код видел но еще раз удостоверься что ты правильно делишь. x /= w, y /= w. обе оси дели.
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
324
Реакции[?]
24
Поинты[?]
12K
Почему у меня не меняяется цвет? Вроде всё верно рассписал шейдеры и описал структуру вертекс, но цвет черный.


C++:
/////

struct Vertex
{

    XMFLOAT3 pos;
    XMFLOAT4 color;


    Vertex() {}
    Vertex(float x,float y, float z, float r, float g, float b, float a)
    {
        pos = { x,y,z };
        color = {r,g,b,a};
    }



};





///// vertices
Vertex myvertex[] =
    {
 ////////////////////////////// Я знаю что там цвета от 0 до 1, я просто проверял и ничего не помогло всеравно
        {(float)(HPbar.x-0.015),(float)HPbar.y,(float)HPbar.z,0 ,0 ,255 ,255 },
        {(float)HPbar.x + manastorage,(float)HPbar.y,(float)HPbar.z,0 ,0 ,255 ,255 },
        {(float)(HPbar.x-0.015),(float)(HPbar.y - 0.025),(float)HPbar.z,0 ,0 ,255 ,255 },

        {(float)HPbar.x + manastorage,(float)((float)(HPbar.y - 0.025)),(float)HPbar.z,0 ,0 ,255 ,255 },
        {(float)HPbar.x + manastorage,(float)HPbar.y,(float)HPbar.z,0 ,0 ,255 ,255 },
        {(float)(HPbar.x - 0.015),(float)((float)(HPbar.y - 0.025)),(float)HPbar.z,0 ,0 ,255 ,255 }



    };



/// describe input element


D3D11_INPUT_ELEMENT_DESC ed[] =
    {
       
        {"POSITION",0,DXGI_FORMAT_R32G32B32_FLOAT,0,0,D3D11_INPUT_PER_VERTEX_DATA,0},
        {"COLOR",0,DXGI_FORMAT_R32G32B32A32_FLOAT,0,D3D11_APPEND_ALIGNED_ELEMENT,D3D11_INPUT_PER_VERTEX_DATA,0}
    };




/// vertex shader

struct VS_INPUT
{

    float3 inPos : POSITION;
    float4 inColor : COLOR;
   

};
struct VS_OUTPUT
{
float4 outPosition : SV_POSITION;
float4 outColor : COLOR;
};

VS_OUTPUT mainVS(VS_INPUT input)
{
    VS_OUTPUT output;
    output.outPosition = float4(input.inPos,1.0f);
    output.outColor = input.inColor;
    return output;
   
}



/// pixel shader

struct PS_INPUT
{
    float4 outPosition : POSITION;
    float4 outColor : COLOR;
};



float4 mainPS(PS_INPUT input) : SV_TARGET
{

    return float4(input.outColor);
}
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
Почему у меня не меняяется цвет? Вроде всё верно рассписал шейдеры и описал структуру вертекс, но цвет черный.


C++:
/////

struct Vertex
{

    XMFLOAT3 pos;
    XMFLOAT4 color;


    Vertex() {}
    Vertex(float x,float y, float z, float r, float g, float b, float a)
    {
        pos = { x,y,z };
        color = {r,g,b,a};
    }



};





///// vertices
Vertex myvertex[] =
    {
////////////////////////////// Я знаю что там цвета от 0 до 1, я просто проверял и ничего не помогло всеравно
        {(float)(HPbar.x-0.015),(float)HPbar.y,(float)HPbar.z,0 ,0 ,255 ,255 },
        {(float)HPbar.x + manastorage,(float)HPbar.y,(float)HPbar.z,0 ,0 ,255 ,255 },
        {(float)(HPbar.x-0.015),(float)(HPbar.y - 0.025),(float)HPbar.z,0 ,0 ,255 ,255 },

        {(float)HPbar.x + manastorage,(float)((float)(HPbar.y - 0.025)),(float)HPbar.z,0 ,0 ,255 ,255 },
        {(float)HPbar.x + manastorage,(float)HPbar.y,(float)HPbar.z,0 ,0 ,255 ,255 },
        {(float)(HPbar.x - 0.015),(float)((float)(HPbar.y - 0.025)),(float)HPbar.z,0 ,0 ,255 ,255 }



    };



/// describe input element


D3D11_INPUT_ELEMENT_DESC ed[] =
    {
     
        {"POSITION",0,DXGI_FORMAT_R32G32B32_FLOAT,0,0,D3D11_INPUT_PER_VERTEX_DATA,0},
        {"COLOR",0,DXGI_FORMAT_R32G32B32A32_FLOAT,0,D3D11_APPEND_ALIGNED_ELEMENT,D3D11_INPUT_PER_VERTEX_DATA,0}
    };




/// vertex shader

struct VS_INPUT
{

    float3 inPos : POSITION;
    float4 inColor : COLOR;
 

};
struct VS_OUTPUT
{
float4 outPosition : SV_POSITION;
float4 outColor : COLOR;
};

VS_OUTPUT mainVS(VS_INPUT input)
{
    VS_OUTPUT output;
    output.outPosition = float4(input.inPos,1.0f);
    output.outColor = input.inColor;
    return output;
 
}



/// pixel shader

struct PS_INPUT
{
    float4 outPosition : POSITION;
    float4 outColor : COLOR;
};



float4 mainPS(PS_INPUT input) : SV_TARGET
{

    return float4(input.outColor);
}
вот мой шейдер для простых линий(точка1->точка2): (VS шейдер такой уебищный ибо я там просто для ясности расписал)
C++:
export
std::string_view line_shader_string{
R"(
struct VS_OUTPUT
{
    float4 pos : SV_POSITION;
    float4 col : COLOR;
};

struct VS_INPUT
{
    float4 pos : POSITION;
    float4 col : COLOR;
};

VS_OUTPUT VS(VS_INPUT input)
{
    VS_OUTPUT output;

    output.pos = input.pos;
    output.col = input.col;

    return output;
}

float4 PS(VS_OUTPUT input) : SV_TARGET
{
    return input.col;
}
)"
};
вот мои цвета(немножко подредачил оригинальный файл DirectXColors ибо он хуита немножко):
C++:
import <iostream>;

import <DirectXMath.h>;
import <directxpackedvector.h>;
using DWORD = unsigned long;

export
__declspec(align(16)) class DirectXColor
{
public:
    float x{};
    float y{};
    float z{};
    float w{};

    operator DWORD() const
    {
        DirectX::PackedVector::XMCOLOR xm_out{};
        DirectX::PackedVector::XMStoreColor(&xm_out, DirectX::FXMVECTOR{ x,y,z, w });
        return (xm_out.a << 24 | xm_out.b << 16 | xm_out.g << 8 | xm_out.r);
    }

    constexpr DirectXColor() = default;
    constexpr DirectXColor(float X, float Y, float Z, float W) noexcept
        :
        x{ X }, y{ Y }, z{ Z }, w{ W }
    {}

    operator const DirectX::XMVECTORF32() const noexcept
    {
        return *reinterpret_cast<const DirectX::XMVECTORF32*>(this);
    }
    operator DirectX::XMVECTORF32() noexcept
    {
        return *reinterpret_cast<DirectX::XMVECTORF32*>(this);
    }

    operator const DirectX::XMVECTORF32&() const noexcept
    {
        return *reinterpret_cast<const DirectX::XMVECTORF32*>(this);
    }

    operator DirectX::XMVECTORF32& () noexcept
    {
        return *reinterpret_cast<DirectX::XMVECTORF32*>(this);
    }
};

export
std::ostream& operator<< (std::ostream& stream, const DirectXColor& vector) {
    stream << " x: " << vector.x;
    stream << " y: " << vector.y;
    stream << " z: " << vector.z;
    stream << " w: " << vector.w;
    return stream;
}

export
namespace DxColors
{
    constexpr DirectXColor AliceBlue{ 0.941176534f, 0.972549081f, 1.000000000f, 1.000000000f };
    constexpr DirectXColor AntiqueWhite{ 0.980392218f, 0.921568692f, 0.843137324f, 1.000000000f };
    constexpr DirectXColor Aqua{ 0.000000000f, 1.000000000f, 1.000000000f, 1.000000000f };
    constexpr DirectXColor Aquamarine{ 0.498039246f, 1.000000000f, 0.831372619f, 1.000000000f };
    constexpr DirectXColor Azure{ 0.941176534f, 1.000000000f, 1.000000000f, 1.000000000f };
    constexpr DirectXColor Beige{ 0.960784376f, 0.960784376f, 0.862745166f, 1.000000000f };
    constexpr DirectXColor Bisque{ 1.000000000f, 0.894117713f, 0.768627524f, 1.000000000f };
    constexpr DirectXColor Black{ 0.000000000f, 0.000000000f, 0.000000000f, 1.000000000f };
    constexpr DirectXColor BlanchedAlmond{ 1.000000000f, 0.921568692f, 0.803921640f, 1.000000000f };
    constexpr DirectXColor Blue{ 0.000000000f, 0.000000000f, 1.000000000f, 1.000000000f };
    constexpr DirectXColor BlueViolet{ 0.541176498f, 0.168627456f, 0.886274576f, 1.000000000f };
    constexpr DirectXColor Brown{ 0.647058845f, 0.164705887f, 0.164705887f, 1.000000000f };
    constexpr DirectXColor BurlyWood{ 0.870588303f, 0.721568644f, 0.529411793f, 1.000000000f };
    constexpr DirectXColor CadetBlue{ 0.372549027f, 0.619607866f, 0.627451003f, 1.000000000f };
    constexpr DirectXColor Chartreuse{ 0.498039246f, 1.000000000f, 0.000000000f, 1.000000000f };
    constexpr DirectXColor Chocolate{ 0.823529482f, 0.411764741f, 0.117647067f, 1.000000000f };
    constexpr DirectXColor Coral{ 1.000000000f, 0.498039246f, 0.313725501f, 1.000000000f };
    constexpr DirectXColor CornflowerBlue{ 0.392156899f, 0.584313750f, 0.929411829f, 1.000000000f };
    constexpr DirectXColor Cornsilk{ 1.000000000f, 0.972549081f, 0.862745166f, 1.000000000f };
    constexpr DirectXColor Crimson{ 0.862745166f, 0.078431375f, 0.235294133f, 1.000000000f };
    constexpr DirectXColor Cyan{ 0.000000000f, 1.000000000f, 1.000000000f, 1.000000000f };
    constexpr DirectXColor DarkBlue{ 0.000000000f, 0.000000000f, 0.545098066f, 1.000000000f };
    constexpr DirectXColor DarkCyan{ 0.000000000f, 0.545098066f, 0.545098066f, 1.000000000f };
    constexpr DirectXColor DarkGoldenrod{ 0.721568644f, 0.525490224f, 0.043137256f, 1.000000000f };
    constexpr DirectXColor DarkGray{ 0.662745118f, 0.662745118f, 0.662745118f, 1.000000000f };
    constexpr DirectXColor DarkGreen{ 0.000000000f, 0.392156899f, 0.000000000f, 1.000000000f };
    constexpr DirectXColor DarkKhaki{ 0.741176486f, 0.717647076f, 0.419607878f, 1.000000000f };
    constexpr DirectXColor DarkMagenta{ 0.545098066f, 0.000000000f, 0.545098066f, 1.000000000f };
    constexpr DirectXColor DarkOliveGreen{ 0.333333343f, 0.419607878f, 0.184313729f, 1.000000000f };
    constexpr DirectXColor DarkOrange{ 1.000000000f, 0.549019635f, 0.000000000f, 1.000000000f };
    constexpr DirectXColor DarkOrchid{ 0.600000024f, 0.196078449f, 0.800000072f, 1.000000000f };
    constexpr DirectXColor DarkRed{ 0.545098066f, 0.000000000f, 0.000000000f, 1.000000000f };
    constexpr DirectXColor DarkSalmon{ 0.913725555f, 0.588235319f, 0.478431404f, 1.000000000f };
    constexpr DirectXColor DarkSeaGreen{ 0.560784340f, 0.737254918f, 0.545098066f, 1.000000000f };
    constexpr DirectXColor DarkSlateBlue{ 0.282352954f, 0.239215702f, 0.545098066f, 1.000000000f };
    constexpr DirectXColor DarkSlateGray{ 0.184313729f, 0.309803933f, 0.309803933f, 1.000000000f };
    constexpr DirectXColor DarkTurquoise{ 0.000000000f, 0.807843208f, 0.819607913f, 1.000000000f };
    constexpr DirectXColor DarkViolet{ 0.580392182f, 0.000000000f, 0.827451050f, 1.000000000f };
    constexpr DirectXColor DeepPink{ 1.000000000f, 0.078431375f, 0.576470613f, 1.000000000f };
    constexpr DirectXColor DeepSkyBlue{ 0.000000000f, 0.749019623f, 1.000000000f, 1.000000000f };
    constexpr DirectXColor DimGray{ 0.411764741f, 0.411764741f, 0.411764741f, 1.000000000f };
    constexpr DirectXColor DodgerBlue{ 0.117647067f, 0.564705908f, 1.000000000f, 1.000000000f };
    constexpr DirectXColor Firebrick{ 0.698039234f, 0.133333340f, 0.133333340f, 1.000000000f };
    constexpr DirectXColor FloralWhite{ 1.000000000f, 0.980392218f, 0.941176534f, 1.000000000f };
    constexpr DirectXColor ForestGreen{ 0.133333340f, 0.545098066f, 0.133333340f, 1.000000000f };
    constexpr DirectXColor Fuchsia{ 1.000000000f, 0.000000000f, 1.000000000f, 1.000000000f };
    constexpr DirectXColor Gainsboro{ 0.862745166f, 0.862745166f, 0.862745166f, 1.000000000f };
    constexpr DirectXColor GhostWhite{ 0.972549081f, 0.972549081f, 1.000000000f, 1.000000000f };
    constexpr DirectXColor Gold{ 1.000000000f, 0.843137324f, 0.000000000f, 1.000000000f };
    constexpr DirectXColor Goldenrod{ 0.854902029f, 0.647058845f, 0.125490203f, 1.000000000f };
    constexpr DirectXColor Gray{ 0.501960814f, 0.501960814f, 0.501960814f, 1.000000000f };
    constexpr DirectXColor Green{ 0.000000000f, 0.501960814f, 0.000000000f, 1.000000000f };
    constexpr DirectXColor GreenYellow{ 0.678431392f, 1.000000000f, 0.184313729f, 1.000000000f };
    constexpr DirectXColor Honeydew{ 0.941176534f, 1.000000000f, 0.941176534f, 1.000000000f };
    constexpr DirectXColor HotPink{ 1.000000000f, 0.411764741f, 0.705882370f, 1.000000000f };
    constexpr DirectXColor IndianRed{ 0.803921640f, 0.360784322f, 0.360784322f, 1.000000000f };
    constexpr DirectXColor Indigo{ 0.294117659f, 0.000000000f, 0.509803951f, 1.000000000f };
    constexpr DirectXColor Ivory{ 1.000000000f, 1.000000000f, 0.941176534f, 1.000000000f };
    constexpr DirectXColor Khaki{ 0.941176534f, 0.901960850f, 0.549019635f, 1.000000000f };
    constexpr DirectXColor Lavender{ 0.901960850f, 0.901960850f, 0.980392218f, 1.000000000f };
    constexpr DirectXColor LavenderBlush{ 1.000000000f, 0.941176534f, 0.960784376f, 1.000000000f };
    constexpr DirectXColor LawnGreen{ 0.486274540f, 0.988235354f, 0.000000000f, 1.000000000f };
    constexpr DirectXColor LemonChiffon{ 1.000000000f, 0.980392218f, 0.803921640f, 1.000000000f };
    constexpr DirectXColor LightBlue{ 0.678431392f, 0.847058892f, 0.901960850f, 1.000000000f };
    constexpr DirectXColor LightCoral{ 0.941176534f, 0.501960814f, 0.501960814f, 1.000000000f };
    constexpr DirectXColor LightCyan{ 0.878431439f, 1.000000000f, 1.000000000f, 1.000000000f };
    constexpr DirectXColor LightGoldenrodYellow{ 0.980392218f, 0.980392218f, 0.823529482f, 1.000000000f };
    constexpr DirectXColor LightGreen{ 0.564705908f, 0.933333397f, 0.564705908f, 1.000000000f };
    constexpr DirectXColor LightGray{ 0.827451050f, 0.827451050f, 0.827451050f, 1.000000000f };
    constexpr DirectXColor LightPink{ 1.000000000f, 0.713725507f, 0.756862819f, 1.000000000f };
    constexpr DirectXColor LightSalmon{ 1.000000000f, 0.627451003f, 0.478431404f, 1.000000000f };
    constexpr DirectXColor LightSeaGreen{ 0.125490203f, 0.698039234f, 0.666666687f, 1.000000000f };
    constexpr DirectXColor LightSkyBlue{ 0.529411793f, 0.807843208f, 0.980392218f, 1.000000000f };
    constexpr DirectXColor LightSlateGray{ 0.466666698f, 0.533333361f, 0.600000024f, 1.000000000f };
    constexpr DirectXColor LightSteelBlue{ 0.690196097f, 0.768627524f, 0.870588303f, 1.000000000f };
    constexpr DirectXColor LightYellow{ 1.000000000f, 1.000000000f, 0.878431439f, 1.000000000f };
    constexpr DirectXColor Lime{ 0.000000000f, 1.000000000f, 0.000000000f, 1.000000000f };
    constexpr DirectXColor LimeGreen{ 0.196078449f, 0.803921640f, 0.196078449f, 1.000000000f };
    constexpr DirectXColor Linen{ 0.980392218f, 0.941176534f, 0.901960850f, 1.000000000f };
    constexpr DirectXColor Magenta{ 1.000000000f, 0.000000000f, 1.000000000f, 1.000000000f };
    constexpr DirectXColor Maroon{ 0.501960814f, 0.000000000f, 0.000000000f, 1.000000000f };
    constexpr DirectXColor MediumAquamarine{ 0.400000036f, 0.803921640f, 0.666666687f, 1.000000000f };
    constexpr DirectXColor MediumBlue{ 0.000000000f, 0.000000000f, 0.803921640f, 1.000000000f };
    constexpr DirectXColor MediumOrchid{ 0.729411781f, 0.333333343f, 0.827451050f, 1.000000000f };
    constexpr DirectXColor MediumPurple{ 0.576470613f, 0.439215720f, 0.858823597f, 1.000000000f };
    constexpr DirectXColor MediumSeaGreen{ 0.235294133f, 0.701960802f, 0.443137288f, 1.000000000f };
    constexpr DirectXColor MediumSlateBlue{ 0.482352972f, 0.407843173f, 0.933333397f, 1.000000000f };
    constexpr DirectXColor MediumSpringGreen{ 0.000000000f, 0.980392218f, 0.603921592f, 1.000000000f };
    constexpr DirectXColor MediumTurquoise{ 0.282352954f, 0.819607913f, 0.800000072f, 1.000000000f };
    constexpr DirectXColor MediumVioletRed{ 0.780392230f, 0.082352944f, 0.521568656f, 1.000000000f };
    constexpr DirectXColor MidnightBlue{ 0.098039225f, 0.098039225f, 0.439215720f, 1.000000000f };
    constexpr DirectXColor MintCream{ 0.960784376f, 1.000000000f, 0.980392218f, 1.000000000f };
    constexpr DirectXColor MistyRose{ 1.000000000f, 0.894117713f, 0.882353008f, 1.000000000f };
    constexpr DirectXColor Moccasin{ 1.000000000f, 0.894117713f, 0.709803939f, 1.000000000f };
    constexpr DirectXColor NavajoWhite{ 1.000000000f, 0.870588303f, 0.678431392f, 1.000000000f };
    constexpr DirectXColor Navy{ 0.000000000f, 0.000000000f, 0.501960814f, 1.000000000f };
    constexpr DirectXColor OldLace{ 0.992156923f, 0.960784376f, 0.901960850f, 1.000000000f };
    constexpr DirectXColor Olive{ 0.501960814f, 0.501960814f, 0.000000000f, 1.000000000f };
    constexpr DirectXColor OliveDrab{ 0.419607878f, 0.556862772f, 0.137254909f, 1.000000000f };
    constexpr DirectXColor Orange{ 1.000000000f, 0.647058845f, 0.000000000f, 1.000000000f };
    constexpr DirectXColor OrangeRed{ 1.000000000f, 0.270588249f, 0.000000000f, 1.000000000f };
    constexpr DirectXColor Orchid{ 0.854902029f, 0.439215720f, 0.839215755f, 1.000000000f };
    constexpr DirectXColor PaleGoldenrod{ 0.933333397f, 0.909803987f, 0.666666687f, 1.000000000f };
    constexpr DirectXColor PaleGreen{ 0.596078455f, 0.984313786f, 0.596078455f, 1.000000000f };
    constexpr DirectXColor PaleTurquoise{ 0.686274529f, 0.933333397f, 0.933333397f, 1.000000000f };
    constexpr DirectXColor PaleVioletRed{ 0.858823597f, 0.439215720f, 0.576470613f, 1.000000000f };
    constexpr DirectXColor PapayaWhip{ 1.000000000f, 0.937254965f, 0.835294187f, 1.000000000f };
    constexpr DirectXColor PeachPuff{ 1.000000000f, 0.854902029f, 0.725490212f, 1.000000000f };
    constexpr DirectXColor Peru{ 0.803921640f, 0.521568656f, 0.247058839f, 1.000000000f };
    constexpr DirectXColor Pink{ 1.000000000f, 0.752941251f, 0.796078503f, 1.000000000f };
    constexpr DirectXColor Plum{ 0.866666734f, 0.627451003f, 0.866666734f, 1.000000000f };
    constexpr DirectXColor PowderBlue{ 0.690196097f, 0.878431439f, 0.901960850f, 1.000000000f };
    constexpr DirectXColor Purple{ 0.501960814f, 0.000000000f, 0.501960814f, 1.000000000f };
    constexpr DirectXColor Red{ 1.000000000f, 0.000000000f, 0.000000000f, 1.000000000f };
    constexpr DirectXColor RosyBrown{ 0.737254918f, 0.560784340f, 0.560784340f, 1.000000000f };
    constexpr DirectXColor RoyalBlue{ 0.254901975f, 0.411764741f, 0.882353008f, 1.000000000f };
    constexpr DirectXColor SaddleBrown{ 0.545098066f, 0.270588249f, 0.074509807f, 1.000000000f };
    constexpr DirectXColor Salmon{ 0.980392218f, 0.501960814f, 0.447058856f, 1.000000000f };
    constexpr DirectXColor SandyBrown{ 0.956862807f, 0.643137276f, 0.376470625f, 1.000000000f };
    constexpr DirectXColor SeaGreen{ 0.180392161f, 0.545098066f, 0.341176480f, 1.000000000f };
    constexpr DirectXColor SeaShell{ 1.000000000f, 0.960784376f, 0.933333397f, 1.000000000f };
    constexpr DirectXColor Sienna{ 0.627451003f, 0.321568638f, 0.176470593f, 1.000000000f };
    constexpr DirectXColor Silver{ 0.752941251f, 0.752941251f, 0.752941251f, 1.000000000f };
    constexpr DirectXColor SkyBlue{ 0.529411793f, 0.807843208f, 0.921568692f, 1.000000000f };
    constexpr DirectXColor SlateBlue{ 0.415686309f, 0.352941185f, 0.803921640f, 1.000000000f };
    constexpr DirectXColor SlateGray{ 0.439215720f, 0.501960814f, 0.564705908f, 1.000000000f };
    constexpr DirectXColor Snow{ 1.000000000f, 0.980392218f, 0.980392218f, 1.000000000f };
    constexpr DirectXColor SpringGreen{ 0.000000000f, 1.000000000f, 0.498039246f, 1.000000000f };
    constexpr DirectXColor SteelBlue{ 0.274509817f, 0.509803951f, 0.705882370f, 1.000000000f };
    constexpr DirectXColor Tan{ 0.823529482f, 0.705882370f, 0.549019635f, 1.000000000f };
    constexpr DirectXColor Teal{ 0.000000000f, 0.501960814f, 0.501960814f, 1.000000000f };
    constexpr DirectXColor Thistle{ 0.847058892f, 0.749019623f, 0.847058892f, 1.000000000f };
    constexpr DirectXColor Tomato{ 1.000000000f, 0.388235331f, 0.278431386f, 1.000000000f };
    constexpr DirectXColor Transparent{ 0.000000000f, 0.000000000f, 0.000000000f, 0.000000000f };
    constexpr DirectXColor Turquoise{ 0.250980407f, 0.878431439f, 0.815686345f, 1.000000000f };
    constexpr DirectXColor Violet{ 0.933333397f, 0.509803951f, 0.933333397f, 1.000000000f };
    constexpr DirectXColor Wheat{ 0.960784376f, 0.870588303f, 0.701960802f, 1.000000000f };
    constexpr DirectXColor White{ 1.000000000f, 1.000000000f, 1.000000000f, 1.000000000f };
    constexpr DirectXColor WhiteSmoke{ 0.960784376f, 0.960784376f, 0.960784376f, 1.000000000f };
    constexpr DirectXColor Yellow{ 1.000000000f, 1.000000000f, 0.000000000f, 1.000000000f };
    constexpr DirectXColor YellowGreen{ 0.603921592f, 0.803921640f, 0.196078449f, 1.000000000f };
}
вот инпут лейаут:
C++:
constexpr D3D11_INPUT_ELEMENT_DESC layout[] =
        {
            { "POSITION",    0, DXGI_FORMAT_R32G32B32_FLOAT,        0, 0,    D3D11_INPUT_PER_VERTEX_DATA, 0 },
            { "COLOR",        0, DXGI_FORMAT_R32G32B32A32_FLOAT,    0, 16 ,    D3D11_INPUT_PER_VERTEX_DATA, 0 },
        };
вот вертекс:
C++:
using Color = DirectXColor;

struct Vertex
{
    Vertex() = default;
    Vertex(float x, float y, float z, float w, Color col)
        : pos{ x, y, z, w }, col{ col }
    {}

    DirectX::XMVECTOR pos{};
    Color col{};
};
вот использование вертекса:
C++:
Vertex{
                        from.x,
                        from.y,
                        0.0f,
                        1.0f,
                        color
                    }
вот использование цвета:
C++:
drawlist.AddBox(min, max, DxColors::Red);
 
Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
324
Реакции[?]
24
Поинты[?]
12K
Окей всё я смог перекрасить в какой-то цвет. В синий.Только почемуто при пердвижении меняется цвет. Как сделать чтобы он всегда был одного цвета?

И как лучше сделать ? Вызывать функу 2 раза с разными данными( типа цвет и коорд)
Или сделать в одной функе массив из 12 вертиксов( 6черного(типа фон) и 6 синего типа мана) ?



C++:
/// vertex


 
struct VS_OUTPUT
{
    float4 pos : SV_POSITION;
    XMFLOAT4 col : COLOR;
};

struct VS_INPUT
{
    XMFLOAT4 pos : POSITION;
    XMFLOAT4 color :COLOR;
};

VS_OUTPUT mainVS(VS_INPUT input)
{
    VS_OUTPUT output;

    output.pos = float4(input.pos.x, input.pos.y, input.pos.z, input.pos.w);
    output.col = input.color;

        return output;
}



/////pixel shader

struct XMFLOAT4 // COLOR
{
    float x, y, z, w : COLOR;
};


struct VS_OUTPUT
{
    float4 pos : SV_POSITION;
    XMFLOAT4 col : COLOR;

  
};
struct VS_INPUT
{

    float4 pos : SV_POSITION;
    XMFLOAT4 col : COLOR;
  
};


float4 mainPS(VS_INPUT input) : SV_TARGET
{
    return float4(input.col.x,input.col.y,input.col.z,input.col.w);
}
/// vertex class

struct Vertex
{


    Vertex(float x, float y, float z, float w,   float r, float g, float b, float a) : pos{ x,y,z,w  }, color{ r,g,b,a} {}
    Vertex(float x, float y, float z, float w,    XMFLOAT4 _color) : pos{ x,y,z,w }, color{ _color.x,_color.y,_color.z,_color.w } {}


    XMFLOAT4 pos;
    XMFLOAT4 color;
  


};


///

    XMFLOAT4 black = { 0.0f,0.0f,0.0f,1.0f };
    Vertex myvertex[] =
    {
        {HPbar.x,HPbar.y,HPbar.z,1.0f,black},
        {HPbar.x + 0.3f,HPbar.y,HPbar.z,1.0f,black},
        {HPbar.x + 0.15f,HPbar.y+0.3f,HPbar.z,1.0f,black}

    };
 

Вложения

Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
324
Реакции[?]
24
Поинты[?]
12K
Окей, я пофиксил изменения цвета. проблема была в шейдерах.Можете подсказать пожалуйста как лучше сделать.
Рисовать в одной функе всё ( типа использовать 1 массив для 6 вертиксов(Цветом Синий) и для 6 вертиксов( Цветом Черный-ФОН) .
И типа чтобы сначало нарисовался черная полоска, а потом на тех же координатах нарисовалась синяя полоска1646083487031.png
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
Окей, я пофиксил изменения цвета. проблема была в шейдерах.Можете подсказать пожалуйста как лучше сделать.
Рисовать в одной функе всё ( типа использовать 1 массив для 6 вертиксов(Цветом Синий) и для 6 вертиксов( Цветом Черный-ФОН) .
И типа чтобы сначало нарисовался черная полоска, а потом на тех же координатах нарисовалась синяя полоскаПосмотреть вложение 194410
бро. юзай функции. не надо руками ничего делать. убери все свое говно, сделай нормальный в2с, сделай нормальный DrawRect, и сиди кайфуй DrawRect(start, end, Black); DrawRect(start, end_blablabla, Blue);
а твой DrawRect уже там пусть разбирается со всем говном матрицами шматрицами вертексами и тд
(условно. суть в том что не надо такой низкоуровневый код оставлять как есть, заверни его в чуть более высокоуровневые структуры)
 
Начинающий
Статус
Оффлайн
Регистрация
15 Дек 2018
Сообщения
146
Реакции[?]
9
Поинты[?]
0
В чем проблема поставить ImGui и вырезать все остальное ненужное говно из него?
 
Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
324
Реакции[?]
24
Поинты[?]
12K
Вообще нихрена не понял, как работает передача значений из буффера в шейдеры. Кароч я чето сделал и уменя все слетело блять, и вернуть не могу.из того что я знаю Vertexshader принимает 3 координаты на экране (x,y,z)(тип х=-0.4, у=0.5,z=0 a w = 1).
возвращает обычно float4 SV_POSITION. но так как у меня с цветом то я создаю структуру
VS_IN,VS_OUT( PS_IN )
Пиксель принимает результат(VS_OUT) который в себе содержит FLOAT4 коорды и FLOAT4цвет и возвращает цвет в СВ_ТАРГЕТС.

C++:
 D3D11_INPUT_ELEMENT_DESC ed[] =
    {
        //L"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0
        {"POSITION",0,DXGI_FORMAT_R32G32B32_FLOAT,0,0,D3D11_INPUT_PER_VERTEX_DATA,0},
        {"COLOR",0,DXGI_FORMAT_R32G32B32A32_FLOAT,0,D3D11_APPEND_ALIGNED_ELEMENT,D3D11_INPUT_PER_VERTEX_DATA,0}
         
    };



 XMFLOAT4 blue = { 0.0f,0.0f,1.0f,1.0f };
 
    Vertex myvertex[] =
    {
 
      
        {(float)(HPbar.x - 0.015f),(float)HPbar.y,HPbar.z,blue},
        {(float)(HPbar.x + manastorage),(float)HPbar.y,HPbar.z, blue },
        {(float)(HPbar.x - 0.015f),(float)(HPbar.y - 0.025f),HPbar.z,blue },

        {(float)(HPbar.x + manastorage),(float)((float)(HPbar.y - 0.025f)),HPbar.z,blue},
        {(float)(HPbar.x + manastorage),(float)HPbar.y,HPbar.z,blue },
        {(float)(HPbar.x - 0.015f),(float)((float)(HPbar.y - 0.025f)),HPbar.z,blue}
  

    };


struct Vertex
{
 
    //Vertex(float x, float y,float z,float w,    float r, float g, float b, float a) : pos{ x,y,z,w }, color{ r,g,b,a} {}
 
    Vertex(float _x, float _y, float _z,XMFLOAT4 _color)
    {
        ndc.x = _x;
        ndc.y = _y;
        ndc.z = _z;
 
        color = { _color.x,_color.y,_color.z,_color.w };

    }
     
    XMFLOAT3 ndc;
    XMFLOAT4 color;
 
};






 
struct VS_OUTPUT
{
    float4 coord : SV_POSITION;
    float4 color : COLOR;
};
float4 mainPS(VS_OUTPUT input) : SV_TARGET
{

    return input.color;
} 
 
 
 
 
 struct VS_INPUT
{
    float3 coords : POSITION;
    float4 color : COLOR;
};
struct VS_OUTPUT
{
    float4 coord : SV_POSITION;
    float4 color : COLOR;
};

VS_OUTPUT mainVS(VS_INPUT input)
{
    VS_OUTPUT output;
    output.coord = float4(input.coords,1.0f);
    output.color = input.color;
    return output;
}
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
Вообще нихрена не понял, как работает передача значений из буффера в шейдеры. Кароч я чето сделал и уменя все слетело блять, и вернуть не могу.из того что я знаю Vertexshader принимает 3 координаты на экране (x,y,z)(тип х=-0.4, у=0.5,z=0 a w = 1).
возвращает обычно float4 SV_POSITION. но так как у меня с цветом то я создаю структуру
VS_IN,VS_OUT( PS_IN )
Пиксель принимает результат(VS_OUT) который в себе содержит FLOAT4 коорды и FLOAT4цвет и возвращает цвет в СВ_ТАРГЕТС.

C++:
D3D11_INPUT_ELEMENT_DESC ed[] =
    {
        //L"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0
        {"POSITION",0,DXGI_FORMAT_R32G32B32_FLOAT,0,0,D3D11_INPUT_PER_VERTEX_DATA,0},
        {"COLOR",0,DXGI_FORMAT_R32G32B32A32_FLOAT,0,D3D11_APPEND_ALIGNED_ELEMENT,D3D11_INPUT_PER_VERTEX_DATA,0}
       
    };



XMFLOAT4 blue = { 0.0f,0.0f,1.0f,1.0f };

    Vertex myvertex[] =
    {

    
        {(float)(HPbar.x - 0.015f),(float)HPbar.y,HPbar.z,blue},
        {(float)(HPbar.x + manastorage),(float)HPbar.y,HPbar.z, blue },
        {(float)(HPbar.x - 0.015f),(float)(HPbar.y - 0.025f),HPbar.z,blue },

        {(float)(HPbar.x + manastorage),(float)((float)(HPbar.y - 0.025f)),HPbar.z,blue},
        {(float)(HPbar.x + manastorage),(float)HPbar.y,HPbar.z,blue },
        {(float)(HPbar.x - 0.015f),(float)((float)(HPbar.y - 0.025f)),HPbar.z,blue}


    };


struct Vertex
{

    //Vertex(float x, float y,float z,float w,    float r, float g, float b, float a) : pos{ x,y,z,w }, color{ r,g,b,a} {}

    Vertex(float _x, float _y, float _z,XMFLOAT4 _color)
    {
        ndc.x = _x;
        ndc.y = _y;
        ndc.z = _z;

        color = { _color.x,_color.y,_color.z,_color.w };

    }
   
    XMFLOAT3 ndc;
    XMFLOAT4 color;

};







struct VS_OUTPUT
{
    float4 coord : SV_POSITION;
    float4 color : COLOR;
};
float4 mainPS(VS_OUTPUT input) : SV_TARGET
{

    return input.color;
}




struct VS_INPUT
{
    float3 coords : POSITION;
    float4 color : COLOR;
};
struct VS_OUTPUT
{
    float4 coord : SV_POSITION;
    float4 color : COLOR;
};

VS_OUTPUT mainVS(VS_INPUT input)
{
    VS_OUTPUT output;
    output.coord = float4(input.coords,1.0f);
    output.color = input.color;
    return output;
}
ну начнем с тго что у ndc нет z(это вектор2). а во-вторых оставь float4 в шейдере и в вертексе как было и не парься(потом поменяешь когда уже со всем разберешься). Vertex{ndc.x, ndc.y, 0.0f, 1.0f, color}.
вертекс шейдер принимает что угодно(3д точку 2д точку ему похуй, просто трансформируешь матрицами(матрицы ему даешь каждый кадр) внутри шейдера если надо(для простоты задачи можно просто сразу в ндс ему гивать и не париться)) и возвращает обязательно NDC
 
Сверху Снизу