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

Странный куб. (2 стр)

Страницы: 1 2
#15
21:42, 10 июня 2012

по совтверному рендереру:

http://www.cs.unc.edu/~olano/papers/2dh-tri/
http://devmaster.net/forums/topic/1145-advanced-rasterization/
http://software.intel.com/en-us/articles/rasterization-on-larrabee/
http://www.gamedev.net/blog/1390/entry-2253995-software-rasterize… ther-updates/

#16
23:02, 10 июня 2012

Кстати, об FPS: что-то тут не так...

void Core::ShowFPS()
{
  static double time = 0; 
  static int fps = 0;
  static wchar_t fps_text[32];
  
  time += delta_time;
  fps += 1;

  if(time > 1)
  {
    wsprintf(fps_text, L"Soft Render v 0.001 FPS = %d", fps);
    SetWindowText(window->GetHwnd(), fps_text);
    fps = 0;
    time = 0;
  }
}
#17
23:10, 10 июня 2012

Скачал br. fps = 80
Подлетел к кубу вупор. fps просел  и прога зависла. Win 7, seleron 2.4

#18
3:04, 11 июня 2012

Try
> Кстати, об FPS: что-то тут не так...
Наверное не так.
Но оно показывает цифры, которые отражают производительность программы.

ПРАВКА: почему это он фпс не показывает?
Функция вызывается в каждом кадре и накапливает значения фпс.
Как только прошла одна секунда - фпс показывается, а счетчик сбрасывается.

delta_time вроде как в секундах возвращает время. Время за один кадр.

MadMax
> Скачал br. fps = 80
Потому что это неправильный куб

Вот тебе обезьянка.
monky | Странный куб.

6y6ykaRender

MadMax
> Подлетел к кубу вупор. fps просел  и прога зависла. Win 7, seleron 2.4
Она не висла. Просто она делила на ноль или на отрицательную величину.
Это пагубно сказывается на работе программы.

Теперь я запилил отсечение в процессе растеризации. Все работает, но это не решение проблемы.
Вообще это не простая тема.

PVSector
Спасибо за ссылки.

#19
8:56, 11 июня 2012

Может быть, модель куба неправильная?

у меня такой работал нормально:

  typedef U16 SIndex;

  enum { NUM_VERTICES = 8 };

  static const Vec3D positions[ NUM_VERTICES ] =
  {
    Vec3D( -1.0f, -1.0f, -1.0f ),
    Vec3D(  1.0f, -1.0f, -1.0f ),
    Vec3D( -1.0f,  1.0f, -1.0f ),
    Vec3D(  1.0f,  1.0f, -1.0f ),
    Vec3D( -1.0f, -1.0f,  1.0f ),
    Vec3D(  1.0f, -1.0f,  1.0f ),
    Vec3D( -1.0f,  1.0f,  1.0f ),
    Vec3D(  1.0f,  1.0f,  1.0f )
  };

  enum { NUM_CUBE_SIDES = 6 };
  enum { NUM_TRIANGLES = NUM_CUBE_SIDES*2 };
  enum { NUM_INDICES = NUM_TRIANGLES*3 };

  static const SIndex indexData[ NUM_INDICES ] =
  {
    1, 0, 2,
    2, 3, 1,    // -Z
    1, 3, 7,
    7, 5, 1,    // +X
    1, 5, 4, 
    4, 0, 1,    // -Y
    0, 4, 6,
    6, 2, 0,    // -X
    2, 6, 7,
    7, 3, 2,    // +Y
    4, 5, 7,
    7, 6, 4    // +Z
  };
#20
9:30, 11 июня 2012

Pokimon
> Просто она делила на ноль или на отрицательную величину.
  Буду в следующий раз знать, что прежде чем делить на отрицательную величину, надо поменять ей знак. Покимин же сказал :)

#21
17:41, 11 июня 2012

Zefick
> Буду в следующий раз знать, что прежде чем делить на отрицательную величину,
> надо поменять ей знак. Покимин же сказал :)
Деление на отрицательную величину означает проецирование вершин, находящихся сзади камеры.
Это как-бы не верно. Их нужно отсекать. Сегодня этим займусь.

PVSector
> Может быть, модель куба неправильная?
Я уже нашел ошибку.

#22
19:39, 11 июня 2012

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

#23
13:13, 12 июня 2012

Клас, прочел. Мне очень нравиться! Pokimon - пили дальше.

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

Это не библиотека - это рендер.
Играл в первый Half-Life - там тоже такой есть.
На самом деле, это огромный плюс в твоем понимании, что такое графика и как она работает. Пока сам такую штуку не напишешь, чувствуешь, что знаешь далеко не все.
И потом, это дает очень хорошее умение делать продуманый интерфейс, чтобы опять же как и в том же Half-Life совмещать на одной сцене два или больше рендера (аппаратных или программных).

И еще есть вопрос: 50 - ФПС при очистке страницы? Очень специфично, я программно добивался около 800 фпс при "простом" блитере, соответственно с очисткой страницы, без блитера было бы больше. Ассемблер не использовал.
Процессор был P4 3Ghz (L2 cache: 2mb)! Может я что-то не так понял?

Страницы: 1 2
ПрограммированиеФорумГрафика

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