ФлеймФорумПроЭкты

шутер [FPS, C++ Builder, DirectX] [закрыто] (31 стр)

Страницы: 130 31 32 3335 Следующая »
#450
2:13, 10 янв 2017

Epsilon
> Кто-нибудь знает, как заюзать отладочный режим в DX под C++ Builder?

D3DXX_CREATE_DEVICE_DEBUG в C++ Builder не работает?

#451
7:27, 11 янв 2017

emptiness_rain
> Epsilon
> А зачем тебе отлаживать сам DX?
Говорят в процессе можно узнать обо всех косяках в DX DirectX Debug Runtime (Отладочный режим DirectX)

gamedevfor
> Epsilon
> > Кто-нибудь знает, как заюзать отладочный режим в DX под C++ Builder?
> D3DXX_CREATE_DEVICE_DEBUG в C++ Builder не работает?
Не пробовал.

#452
7:30, 11 янв 2017

Насчёт бага с освещенным квадом: выкинул всё лишнее из исходников и запихнул в архив. Есть идеи отчего такая фигня?
(Для тех у кого есть Builder 6 -- в архиве рабочий проект -- можно скомпилировать на месте.)
https://yadi.sk/d/zJtLRx4h38Ky7v

#453
7:35, 11 янв 2017

Упс, забыл обновить заголовок.

#454
18:32, 11 янв 2017

Epsilon
Цвет верхнего левого вертекса 1.0, цвет нижнего левого 0.0, между ними цвет интерполируется линейно, и получается то что получается.

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

#455
19:29, 11 янв 2017

CD
> Цвет верхнего левого вертекса 1.0, цвет нижнего левого 0.0, между ними цвет
> интерполируется линейно, и получается то что получается.
А почему линейно? Почему дальше 10 метров от источника света пиксели не поголовно чёрные, а "интерполируются линейно"? Там же ничего не освещается, не может из-за непопадания в сферу действия единственного источника света.

CD
> по той же формуле что сейчас затухают вертексы
Не понял о какой ты формуле.

CD
> нужно использовать пиксельные шейдеры, или для приблизительно похожего
> результата - маленькие полигоны
Эм. Чёто ничего не понял.
Но рискну предположить, что ты хочешь сказать, что проблема именно в неиспользовании пиксельный шейдеров? А если начну использовать, смогу заставить перестать не быть чёрными неосвещенную часть квада? (Я просто в шейдерах ваще нуб, знаю что они есть и их нужно прогать, и в самом конце толстенного самоучителя по DX есть глава с названием "пиксельные шейдеры", до которой я не добрался т.к. решил пока не заморачиваться наворотами к которым в том числе отношу и шейдеры... они же вроде для спецэффектов, типа дыма-огня-бликов воды)

#456
19:50, 11 янв 2017

Epsilon
> А почему линейно?

Такая модель освещения, именно такая она т.к. видеокарты той эпохи не могли лучше.

> Там же ничего не освещается, не может из-за непопадания в сферу действия
> единственного источника света.

Пиксели ничего не знают про источник света, они знают только расстояние до вершин и уровень освещенности вершин.

>Не понял о какой ты формуле.

http://msdn.microsoft.com/en-us/library/windows/desktop/bb172279(v=vs.85).aspx

Atten = 1/(Atten0 + Atten1*d  + Atten2*d*d)
d - расстояние от источника света до вершины
Если d > Range, то Atten = 0
Подставив твои коэффициенты,
Atten = 1/(1 + d + d*d)

Т.е.
-освещенность вершин у тебя затухает пропорционально квадрату расстояния от вершины до источника света и учитывает Range
-освещенность пикселей учитывает только расстояние от пикселя до вершин и их освещенность

>А если начну использовать, смогу заставить перестать не быть чёрными неосвещенную часть квада?
Да.

Зайди на http://www.shadertoy.com/new
И вставь вот этот шейдер для примера, и нажми Alt+Enter

vec2 lightPos = vec2(-1.0, -1.0);
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{  
    vec2 tmp = fragCoord - lightPos;
    float d = length(tmp)/200.0;
    float atten = 1.0/(d*d);
    vec4 color = vec4(1.0, 1.0, 1.0, 1.0);
    color.xyz *= atten;
    fragColor = color;
}
#457
23:10, 11 янв 2017

CD
> Epsilon
> > А почему линейно?
> Такая модель освещения, именно такая она т.к. видеокарты той эпохи не могли
> лучше.
> > Там же ничего не освещается, не может из-за непопадания в сферу действия
> > единственного источника света.
> Пиксели ничего не знают про источник света, они знают только расстояние до
> вершин и уровень освещенности вершин.
Т.е. проблема не у меня, а в DX? И что делать? Я DX переписывать не хочу.

CD
> Atten = 1/(Atten0 + Atten1*d  + Atten2*d*d)
> d - расстояние от источника света до вершины
> Если d > Range, то Atten = 0
> Подставив твои коэффициенты,
> Atten = 1/(1 + d + d*d)
Видел, но не думал, что оно работает вне сферы действия источника света.

CD
> > если начну использовать, смогу заставить перестать не быть чёрными
> > неосвещенную часть квада?
> Да.
Ну и на том спасибо. Записал в тудулист, буду осваивать.

#458
7:55, 12 янв 2017

Epsilon
> Т.е. проблема не у меня, а в DX? И что делать? Я DX переписывать не хочу.
Это не проблема DX, это его суть работы, а вернее суть работы видеокарты при использовании FFP. В твоем случае проще всего не использовать большие полигоны. Либо перейти на статические карты освещенности (ligt map), т.е. рассчитывать их заранее и накладывать на полигоны смешивая(blend) тексели текстуры полигона с текселями текстуры лайтмапы, при этом текстура полигона будет находиться в одном текстурном юните, а текстура лайтмапы во втором. На этапе расчетов освещенности можно что угодно вытворять, вплоть до разных световых эффектов на поверхностях игровой карты, но они увы будут статическими.

#459
9:25, 12 янв 2017

Vitorio
> В твоем случае проще всего не использовать большие полигоны.
Я хочу коридорный шутер, мне что, в каждую стенку пихпть по 1к полигоном? Да ну нафиг.

+ А кучу мелких я уже кстати пробовал -- всё равно криво.

Vitorio
> Либо перейти на статические карты освещенности (ligt map), т.е. рассчитывать их
> заранее и накладывать на полигоны смешивая(blend) тексели текстуры полигона с
> текселями текстуры лайтмапы, при этом текстура полигона будет находиться в
> одном текстурном юните, а текстура лайтмапы во втором.
Не умею. Как вообще рассчитываются эти лайтмапы?
Смешивание и мультитекстурированмие в теории вкурил.

Vitorio
> На этапе расчетов освещенности можно что угодно вытворять, вплоть до разных
> световых эффектов на поверхностях игровой карты, но они увы будут статическими.
Теоретически нет, проблема производительности, в принципе в малых объёмах можно и "подинамить"))

#460
11:27, 12 янв 2017

gamedevfor
> Epsilon
> > Кто-нибудь знает, как заюзать отладочный режим в DX под C++ Builder?
> D3DXX_CREATE_DEVICE_DEBUG в C++ Builder не работает?
А что это?
Судя по https://blogs.msdn.microsoft.com/chuckw/2012/11/30/direct3d-sdk-d… layer-tricks/

Staring with Direct3D 10.0, a new mechanism was created for the “Developer Runtime” via a API layering mechanism and is implemented in the D3D10SDKLAYERS.DLL. Developers could opt in their specific application to the debug validation either by creating the device with D3Dxx_CREATE_DEVICE_DEBUG, or by adding the executable to a list in the DirectX Control Panel.

Это доступно только с DX10. Или можно заюзать и на DX9?

upd 1: Да, точно только с 10 версии (https://msdn.microsoft.com/en-us/library/windows/desktop/ff476881.aspx). Фак, придётся повышать версию... перекомпилировать новые либы под билдер...

#461
12:10, 12 янв 2017

gamedevfor
Чёт я совсем закопался.
Короче, D3DXX_CREATE_DEVICE_DEBUG похоже это флаг инициализации DX девайса, доступный начиная с DX10.
Попытался перевести проект на ДХ10 и началось: другая функция инициализации (вместо Direct3DCreate9 + CreateDevice, теперь D3D10CreateDeviceAndSwapChain), а теперь похоже там нет D3DFVF_* и я не могу нагуглить замену.

Поэтому мой новый ответ на вопрос
> D3DXX_CREATE_DEVICE_DEBUG в C++ Builder не работает?
таков: может и работает, не удалось проверить, т.к. мой проект адаптирован под DX9, и под DX10 похоже придётся многое переписать, слишком сложно.

#462
12:21, 12 янв 2017

Epsilon
> Фак, придётся повышать версию

В DX10 нет фиксированного конвеера (SetLight,SetFVF,SetMaterial,SetTransform и т.п.), только шейдеры

> новые либы под билдер

В Visual Studio есть отладчик графики, выглядит примерно так (на видео DX12, в DX10 другие вызовы)

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

#463
12:39, 12 янв 2017

CD
> В DX10 нет фиксированного конвеера (SetLight,SetFVF,SetMaterial,SetTransform и
> т.п.), только шейдеры
Х0
Я шейдеры вообще не умею, так что не вариант. Значит проверить не смогу.

#464
17:10, 14 янв 2017
пккп | шутер [FPS, C++ Builder, DirectX] [закрыто]
Страницы: 130 31 32 3335 Следующая »
ФлеймФорумПроЭкты

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