Войти
WarZesФорум

Открыл вики для изучения DX11 (комментарии) (9 стр)

Страницы: 18 9 10 1113 Следующая »
#120
12:30, 8 окт. 2012

war_zes
> D3DXMatrixTranspose( &pVSPerObject->m_World, &mWorld );
Внимательнее надо быть


#121
12:33, 8 окт. 2012

bazhenovc
> Внимательнее надо быть
короче, объясни четко что не так. почему ты считаешь что этот код из SDK неверен и как он должен быть... Потому что я по твоему примеру разницы не увидел (много кода)

#122
12:44, 8 окт. 2012

war_zes
Посмотри на шейдеры, код вторичен

#123
13:02, 8 окт. 2012

Вот это чтоли?
    vNormalWorldSpace = normalize(mul(vNormal, (float3x3)g_mWorld));
И что это дает? Я так понимаю ты два раза умножаешь нормаль на мировую матрицу, зачем?

Или тут важна нормализация? Так я ее делаю
input.Norm = normalize(input.Norm);

#124
13:06, 8 окт. 2012

war_zes
Если более чётко:

XMMATRIX mLight = XMMatrixTranslationFromVector( 5.0f * XMLoadFloat4( &vLightDirs[m] ) );
XMMATRIX mLightScale = XMMatrixScaling( 0.2f, 0.2f, 0.2f );
mLight = mLightScale * mLight;
Я не могу понять логику, зачем эта фигня и что она делает?
finalColor += saturate( dot( (float3)vLightDir[i],input.Norm) * vLightColor[i] );
В каком пространстве тут vLightDir?

ПРАВКА:
> И что это дает? Я так понимаю ты два раза умножаешь нормаль на мировую матрицу, зачем?
Где? О_о

#125
13:10, 8 окт. 2012

bazhenovc
Прошу прощения, залил лишний файл :)

Смотреть надо d3d11_test_PS/VS.hlsl

#126
13:16, 8 окт. 2012

bazhenovc
> Смотреть надо d3d11_test_PS/VS.hlsl
А блин, а я в эффект смотрю

#127
13:24, 8 окт. 2012

Aglaranir
Девочка, уходи отсюда. Тут серьёзные люди разговаривают.

#128
13:25, 8 окт. 2012

bazhenovc
> Я не могу понять логику, зачем эта фигня и что она делает?
Она сдвигает куб по направлению источника света и изменяет его масштаб куба, к свету не имеет никакого отношения..
Вообще весь этот кусок кода

  for( int m = 0; m < 2; m++ )
  {
    XMMATRIX mLight = XMMatrixTranslationFromVector( 5.0f * XMLoadFloat4( &vLightDirs[m] ) );
    XMMATRIX mLightScale = XMMatrixScaling( 0.2f, 0.2f, 0.2f );
    mLight = mLightScale * mLight;

    cb1.mWorld = XMMatrixTranspose( mLight );
    cb1.vOutputColor = vLightColors[m];
    m_pImmediateContext->UpdateSubresource( m_pConstantBuffer, 0, NULL, &cb1, 0, 0 );

    m_pImmediateContext->PSSetShader( m_pPixelShaderSolid, NULL, 0 );
    m_pImmediateContext->DrawIndexed( 36, 0, 0 );
  }


То есть там на сцене есть один куб на который светят два источника света и два куба которые показывают направление этих светил... Если бы ты внимателmytq посмотрел, то обнаружил что пиксельный шейдер в этот момент подключается совершенно другой, а именно этот:

float4 PSSolid( PS_INPUT input) : SV_Target
{
    return vOutputColor;
}
О чем тебе говорит строчка в цикле
m_pImmediateContext->PSSetShader( m_pPixelShaderSolid, NULL, 0 );

#129
13:29, 8 окт. 2012

А так да, тяжело понять, я потому вначале и код хотел переписать, но вот вчера сидел и код уже не был таким страшным по прошествии время (а кроме того другой пример не взлетел, а я так и не понял в чем там проблема)

#130
13:29, 8 окт. 2012

war_zes
Ааа, это просто кубик-лампочка. Понял, вопросов нет.

Вторая претензия пока-что актуальна :)

#131
13:40, 8 окт. 2012

bazhenovc
> В каком пространстве тут vLightDir?
Тут в уроке очень большая вольность... И если честно, я не осилил этот момент. По ходу мировая матрица:

  XMFLOAT4 vLightDirs[2] =
  {
    XMFLOAT4( -0.577f, 0.577f, -0.577f, 1.0f ),
    XMFLOAT4( 0.0f, 0.0f, -1.0f, 1.0f ),
  };
  XMMATRIX mRotate = XMMatrixRotationY( -2.0f * t );
  XMVECTOR vLightDir = XMLoadFloat4( &vLightDirs[1] );
  vLightDir = XMVector3Transform( vLightDir, mRotate );
  XMStoreFloat4( &vLightDirs[1], vLightDir );

  ConstantBuffer cb1;
  cb1.mWorld = XMMatrixTranspose( m_World );
  cb1.mView = XMMatrixTranspose( m_View );
  cb1.mProjection = XMMatrixTranspose(m_Projection );
  cb1.vLightDir[0] = vLightDirs[0];
  cb1.vLightDir[1] = vLightDirs[1];

Никаких больше трансформаций нет... Короче, тут надо звать того кто силен в матрицах, я не силен...

#132
13:56, 8 окт. 2012

bazhenovc
решил попробовать твой шейдер

float4 PS( PS_INPUT input) : SV_Target
{
    float4 finalColor = 0;
  
  input.Norm = normalize(input.Norm);
  

    
    for(int i=0; i<2; i++)
    {
    float3 lightDir = (vLightDir[i].xyz - input.Pos.xyz);
    
    float3 L = normalize(lightDir);
    float3 N = normalize(input.Norm);
    float NdotL = max(dot(L, N), 0.1);
    finalColor += saturate(vLightColor[i] * NdotL);
    }
    return finalColor;
}

Получил
Изображение

Обрати внимание где находится красная лампочка и какая поверхность при этом освещена

Если же переписать

float3 lightDir = (vLightDir.xyz - input.Pos.xyz);
на
float3 lightDir = (vLightDir
.xyz);

Проблем нет (но получится тоже самое что у меня)... Кстати можешь пояснить, а что же собственно в этой строчке делаться должно?

И еще поясни зачем attenuation в направленном свете который не должен затухать

p.s. эт чего данный текст стал курсивом написан?

#133
14:26, 8 окт. 2012

war_zes
Так это у тебя направленный свет? Чёрт :) Я думал что точечный.

#134
14:31, 8 окт. 2012

bazhenovc
Что-то ты сегодня не в ударе)

Страницы: 18 9 10 1113 Следующая »
WarZesФорум

Тема в архиве.