Sign in to follow this  
PrototypeX

Шейдерная обработка обьектов (Цветовая)

Recommended Posts

Всем привет, мб кто нибудь шарит в шейдерах.

Вопрос следующего характера, необходимо покрасить наложенные на автомобиль четыре обьекта (колёса кастомные).

Название текстуры у меня "body_k", написал саму систему, шейдер и при этом шейдер не очень хорошо понимает RGBA палитру.

Только радикальные цвета будь то: 0,255,255,255; 255,0,0,255; 255,0,255 и т.д.

При цвете например 75,0,255,255 выдает оттенок максимальный по заданым критериям, т.е. 255,0,255,255...

Вот скриншот того, что пытаюсь реализовать:http://www.fotolink.su/pic_b/c03627c7d8665128f9c5ec7ecaf65c60.png (Не могу прикрепить почему-то изображение)

 

Код шейдера:

float4 gColor = float4(1,1,1,1); 
bool bIsGTADiffuse = true; 
  
//--------------------------------------------------------------------- 
// Include some common stuff 
//--------------------------------------------------------------------- 
#include "mta-helper.fx" 
 
//--------------------------------------------------------------------- 
// Sampler for the main texture 
//--------------------------------------------------------------------- 
sampler Sampler0 = sampler_state 
{ 
    Texture = (gTexture0); 
}; 
  
  
//--------------------------------------------------------------------- 
// Structure of data sent to the vertex shader 
//--------------------------------------------------------------------- 
struct VSInput 
{ 
  float3 Position : POSITION0; 
  float4 Diffuse : COLOR0; 
  float2 TexCoord : TEXCOORD0; 
}; 
  
//--------------------------------------------------------------------- 
// Structure of data sent to the pixel shader ( from the vertex shader ) 
//--------------------------------------------------------------------- 
struct PSInput 
{ 
  float4 Position : POSITION0; 
  float4 Diffuse : COLOR0; 
  float2 TexCoord : TEXCOORD0; 
}; 
  
  
//------------------------------------------------------------------------------------------ 
// VertexShaderFunction 
//  1. Read from VS structure 
//  2. Process 
//  3. Write to PS structure 
//------------------------------------------------------------------------------------------ 
PSInput VertexShaderFunction(VSInput VS) 
{ 
    PSInput PS = (PSInput)0; 
  
    // Calculate screen pos of vertex 
    PS.Position = MTACalcScreenPosition ( VS.Position ); 
  
    // Pass through tex coord 
    PS.TexCoord = VS.TexCoord; 
  
    // Calculate GTA lighting for buildings 
    float4 Diffuse = MTACalcGTABuildingDiffuse( VS.Diffuse ); 
    PS.Diffuse = 0; 
    if (bIsGTADiffuse) PS.Diffuse = Diffuse; 
    else PS.Diffuse = float4(1,1,1,Diffuse.a); 
    PS.Diffuse *= gColor; 
    return PS; 
} 
  
//------------------------------------------------------------------------------------------ 
// PixelShaderFunction 
//  1. Read from PS structure 
//  2. Process 
//  3. Return pixel color 
//------------------------------------------------------------------------------------------ 
float4 PixelShaderFunction(PSInput PS) : COLOR0 
{ 
    // Get texture pixel 
    float4 texel = tex2D(Sampler0, PS.TexCoord); 
  
    // Apply diffuse lighting 
    float4 finalColor = texel * PS.Diffuse; 
  
    return finalColor; 
} 
  
  
//------------------------------------------------------------------------------------------ 
// Techniques 
//------------------------------------------------------------------------------------------ 
technique colorize 
{ 
    pass P0 
    { 
        VertexShader = compile vs_2_0 VertexShaderFunction(); 
        PixelShader = compile ps_2_0 PixelShaderFunction(); 
    } 
} 
  
// Fallback 
technique fallback 
{ 
    pass P0 
    { 
        // Just draw normally 
    } 
} 

Код наложение цвета, через шейдерную обработку на одно из колёс транспортного средства:

local colorShader = dxCreateShader("shader.fx")
local _, _, _, wheelsColorR, wheelsColorG, wheelsColorB = getVehicleColor(source, true)
outputChatBox("#FFFFFFColor: R"..wheelsColorR.." G"..wheelsColorG.." B"..wheelsColorB, 0, 0, 0, true)
local wheelsColor = {wheelsColorR, wheelsColorG, wheelsColorB, 255}
dxSetShaderValue(colorShader, "gColor", wheelsColor)
engineApplyShaderToWorldTexture(colorShader, "body_k", car_wheels[carID][1])

Need help!

Share this post


Link to post
1 hour ago, AfterAll14 said:

local wheelsColor = {wheelsColorR / 255, wheelsColorG / 255, wheelsColorB / 255, 255 / 255}

 

Огромное спасибо, помогло.

Можно закрывать тему!

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.