Войти
ПрограммированиеФорумГрафика

Посоветуйте уроки по программированию Directx на С++ для новичков. (22 стр)

Страницы: 119 20 21 22 23 24 Следующая »
#315
23:28, 18 мар 2023

ronniko
До такого экшена как на картинке, мне еще очень далеко, тут как минимум придется изучить анимацию, шейдеры и прикрутить рабочий код вычисления пересечений.

#316
(Правка: 0:45) 0:43, 23 мар 2023

Сделал простенькую стрельбу по ящикам, ну или другими словами написал код расчета пересечения между моделями.

Для перемещения модельки ядра написал вот такой код

snariadTarget = D3DXVECTOR3(pos.x, pos.y+0.3, pos.z);
    if (::GetAsyncKeyState(VK_LBUTTON) & 0x8000f)
    {
      ogoni = 1;
    }

    if (ogoni == 1)
    {
      Ogoni();
    }
    else {
      vectorTarget = D3DXVECTOR3(YawY, anglePitch, YawX);
      Vmove = snariadTarget;
    }

    D3DXMATRIX fire;
    D3DXMatrixTranslation(&fire, Vmove.x, Vmove.y, Vmove.z);
    D3DMATRIX matFire(fire);
    d3ddev->SetTransform(D3DTS_WORLD, &matFire);
    DrawModel(snariad);

Код функции Ogoni

void Ogoni()
{
  VTarget = vectorTarget*1.0f;
  Vmove -= VTarget;
  numtime = numtime + 1;
  if (numtime == 60)
  {
    numtime = 0;
    ogoni = 0;
  }
}

После выполнения прорисовки снаряда идет код прорисовки ящика

    if (easik1 == 0)
    {
      D3DXMatrixTranslation(&iasik, 5.0f, 1.6f, 3.9f);
      D3DXMATRIX corobca(iasik);
      d3ddev->SetTransform(D3DTS_WORLD, &corobca);
      DrawModelIntersect(easik, 1);
    }

    if (easik2 == 0)
    {
      D3DXMatrixTranslation(&iasik, -3.8f, 1.7f, -31.0f);
      D3DXMATRIX corobca1(iasik);
      d3ddev->SetTransform(D3DTS_WORLD, &corobca1);
      DrawModelIntersect(easik, 2);
    }

    if (easik3 == 0)
    {
      D3DXMatrixTranslation(&iasik, 7.0f, 28.7f, -58.0f);
      D3DXMATRIX corobca2(iasik);
      d3ddev->SetTransform(D3DTS_WORLD, &corobca2);
      DrawModelIntersect(easik, 3);
    }

Код прорисовки модели там же собираются координаты модели в вектора vecBoundingBoxMin1 и vecBoundingBoxMax1.

void DrawModelIntersect(MODEL *model, int nom)
{
  int nomea = nom;
  // Рисуем каждый субсет меша
  for (DWORD i = 0; i<model->material_count; i++)
  {
    // Назначаем для субсета материал и текстуру
    d3ddev->SetMaterial(&model->materials[i]);
    d3ddev->SetTexture(0, model->textures[i]);

    // Рисуем субсет меша
    model->mesh->DrawSubset(i);

    model->mesh->LockVertexBuffer(D3DLOCK_READONLY, (LPVOID*)&pVertices1);
    D3DXComputeBoundingBox((D3DXVECTOR3*)pVertices1, model->mesh->GetNumVertices(),
      D3DXGetFVFVertexSize(model->mesh->GetFVF()), &vecBoundingBoxMin1, &vecBoundingBoxMax1);
    model->mesh->UnlockVertexBuffer();

    //D3DXVec3TransformCoord(&vect11, &vecBoundingBoxMin1, &transf);
    D3DXVec3TransformCoord(&vecBoundingBoxMin1, &vecBoundingBoxMin1, &iasik);
    D3DXVec3TransformCoord(&vecBoundingBoxMax1, &vecBoundingBoxMax1, &iasik);
  }

  peresecenie(vecBoundingBoxMax1, vecBoundingBoxMin1, Vmove, nomea);
}

Ну и код расчета пересечения между вершинами ящиков и координатами движения модели снаряда.

void peresecenie(D3DXVECTOR3 vec1, D3DXVECTOR3 vec2, D3DXVECTOR3 snariadd, int nomea)
{
  if (snariadd.x < vec1.x && snariadd.x > vec2.x &&
    snariadd.z < vec1.z && snariadd.z > vec2.z &&
    snariadd.y < vec1.y && snariadd.y > vec2.y)
  {

    if (nomea == 1)
    {
      easik1 = 1;
    }

    if (nomea == 2)
    {
      easik2 = 1;
    }

    if (nomea == 3)
    {
      easik3 = 1;
    }
  }

}


Вот что получилось.

#317
1:39, 23 мар 2023

Flying engine набирает обороты.

Аффтар жжот!

void DrawModelIntersect(MODEL *model, int nom)
#318
13:39, 23 мар 2023

samrrr
> Аффтар жжот!

Пока нет, я еще не прошел уроки по анимации и шейдерам, так что пока не знаю что это такое.

#319
13:51, 23 мар 2023

Mikki
> Пока нет,
Это так кажется. Скоро начнёшь жаловаться на крашашиеся плюсы.

Я думаю с текущими знаниями ты сольешься где то на попытке убрать зубчики у теней.

#320
14:01, 23 мар 2023

samrrr
> Скоро начнёшь жаловаться на крашашиеся плюсы.
Ну пока ни разу не крашнулось.

> ты сольешься где то на попытке убрать зубчики у теней
Ну до этого я еще не дошел

#321
14:40, 23 мар 2023

samrrr
> ты сольешься где то на попытке убрать зубчики у теней.

Не знаю что в них такого особенного но в играх часто видел эти самые зубчики у теней, могу предположить если у разработчиков самих игр такое не получилось что с чего это должно получится у меня?

Если не получится то видимо это неисправляемый баг который не смогли исправить даже разработчики игр.

#322
18:18, 23 мар 2023

Mikki
> Ну пока ни разу не крашнулось.
Это невозможно.

Mikki
> Не знаю что в них такого особенного но в играх часто видел эти самые зубчики у
> теней
Они тоже неосилили. Но в анреале то смогли, да даже в унижайне смогли.

Mikki
> Если не получится то видимо это неисправляемый баг который не смогли исправить
> даже разработчики игр.
Просто есть игры на движках 20 летней давности.

#323
(Правка: 18:31) 18:27, 23 мар 2023

samrrr
> Это невозможно.
Если будет крашиться то можно сделать по нормальному, что бы этого не было.

samrrr
> Они тоже неосилили. Но в анреале то смогли, да даже в унижайне смогли.
Ну до этого мне еще очень далеко.

#324
19:02, 23 мар 2023

samrrr
> Но в анреале то смогли, да даже в унижайне смогли.
Не смогли, просто повысили разрешение "зубчиков" и размылили край тени, чтобы не так заметно было.

#325
22:21, 23 мар 2023

MrShoor
> Не смогли, просто повысили разрешение "зубчиков" и размылили край тени, чтобы
> не так заметно было.
А это что тогда?
https://docs.unrealengine.com/5.0/en-US/hardware-ray-tracing-in-unreal-engine/

#326
1:57, 24 мар 2023

samrrr
> А это что тогда?
> https://docs.unrealengine.com/5.0/en-US/hardware-ray-tracing-in-unreal-engine/
Это же UE5. С такими тенями еще ни одной игры не вышло. Давай что-нибудь реалистичное.

#327
(Правка: 2:42) 2:38, 24 мар 2023

MrShoor
> Не смогли, просто повысили разрешение "зубчиков"
Так если повысить разрешение зубчиков до разрешения экрана, то оно и будет смогли.
MrShoor
> и размылили край тени
ну и размылить согласно параметрам конечно, а то тени без пенумбры людям не заходят, стенсильные быстро отмерли.

#328
3:39, 24 мар 2023

samrrr
> на крашашиеся плюсы
Санитайзер очень помогает. По мне так вообще обязательная вещь.

#329
3:51, 24 мар 2023

MrShoor
> Это же UE5.
Вообщето эта фича в анреале довольно давно.

Super_inoy
> Так если повысить разрешение зубчиков до разрешения экрана, то оно и будет
> смогли.
В этом и фокус, но в унижайне ну оч постарались и даже при больших пикселях зубчики как-то размыли.

MikeNew
> Санитайзер очень помогает.
Если программа крашится на санитайзере, а не на нулл поинтерр аццесс, то краш не перестаёт быть крашем.

Страницы: 119 20 21 22 23 24 Следующая »
ПрограммированиеФорумГрафика