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

[Direct3D] Вопросы по Direct3D9, Direct3D10, Direct3D11 (2 стр)

Страницы: 1 2
#15
17:24, 27 июня 2012

evirus
> Текстурированный объект, например, куб.
или барабан


#16
17:28, 27 июня 2012

antilopka
> Тебе не жалко время тратить на такие "капризы"?
Очень жалко. Иначе не писал бы сюда.
С шейдерами конечно всё просто, лучше и быстрее.
Есть даже задумка (ну это лично для меня) попробовать сделать обработку вершин и пикселей полностью через CUDA (без шейдеров).

#17
17:54, 27 июня 2012

asvp

Поэкспериментировав сегодня ночью с D3DRS_COLORVERTEX так и не понял для чего это состояние. Правда я не использую Diffuse и Specular в самих данных вершин, а использую материал. Может с этим что-то связано. Как-нить поэкспериментирую еще.

Как настроены
- D3DRS_DIFFUSEMATERIALSOURCE
- D3DRS_SPECULARMATERIALSOURCE
- D3DRS_AMBIENTMATERIALSOURCE
- D3DRS_EMISSIVEMATERIALSOURCE
?

Когда текстур нет, D3DRS_COLORVERTEX = TRUE. И данные о цвете вершины берется из самих данных или из материала.

Текстуры отдельно, цвет отдельно.

Когда идет текстурирование, эту шнягу можно отключить, т.к. данные о цвете вершины (а точнее пиксела) будут взяты из текстур(ы).

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

Т.к. я особо не заметил потерю быстродействия при D3DRS_NORMALIZENORMALS = TRUE

Этой потери особо не заметно с конца 90-х, когда появились карточки с HW TnL.

#18
17:59, 27 июня 2012

>Очень жалко. Иначе не писал бы сюда.
Что, так много за это платят? И заказчика нельзя переубедить?

#19
20:14, 27 июня 2012

arabesc
> Как настроены
> - D3DRS_DIFFUSEMATERIALSOURCE
> - D3DRS_SPECULARMATERIALSOURCE
> - D3DRS_AMBIENTMATERIALSOURCE
> - D3DRS_EMISSIVEMATERIALSOURCE
> ?
По дефолту.

> Текстуры отдельно, цвет отдельно.
> Текстуры могут модулироваться рассчитанным цветом материала, например, при освещении.
К чему всё это? Я про это знаю.
Меня именно интересует D3DRS_COLORVERTEX (хотя уже можно тоже вопрос закрывать).

> Этой потери особо не заметно с конца 90-х, когда появились карточки с HW TnL.
Спс. Хоть какой-то ответ по этому вопросу.

Пережитки прошлого.

#20
20:21, 27 июня 2012

asvp
> Меня именно интересует D3DRS_COLORVERTEX
Так он и влияет на перечисленные RS. Собственно, если все понятно, тогда непонятно, в чем заключается вопрос о D3DRS_COLORVERTEX?

#21
20:39, 27 июня 2012

arabesc
> ак он и влияет на перечисленные RS. Собственно, если все понятно, тогда
> непонятно, в чем заключается вопрос о D3DRS_COLORVERTEX?
Каким образом он виляет.
Что при D3DRS_COLORVERTEX = TRUE, что при D3DRS_COLORVERTEX = FALSE выводится одинаково. Вот в этом вопрос и заключается.
И пока остановился на том, что не попробовал цвет вершин задавать в самих данных. Может на это будет влиять.

#22
20:50, 27 июня 2012

asvp
> Что при D3DRS_COLORVERTEX = TRUE, что при D3DRS_COLORVERTEX = FALSE выводится
> одинаково.
Это лучше исходники глядеть, чего так гадать, почему одинаково.

#23
21:42, 27 июня 2012

В доках сказано:

1. "D3DRS_COLORVERTEX
TRUE to enable per-vertex color or FALSE to disable it. The default value is TRUE. Enabling per-vertex color allows the system to include the color defined for individual vertices in its lighting calculations.
For more information, see the following render states:
D3DRS_DIFFUSEMATERIALSOURCE
D3DRS_SPECULARMATERIALSOURCE
D3DRS_AMBIENTMATERIALSOURCE
D3DRS_EMISSIVEMATERIALSOURCE"

2. D3DRS_DIFFUSEMATERIALSOURCE - Diffuse color source for lighting calculations. Valid values are members of the D3DMATERIALCOLORSOURCE enumerated type.
The default value is D3DMCS_COLOR1. The value for this render state is used only if the D3DRS_COLORVERTEX render state is set to TRUE.

3. The value for Cd is either (Diffuse Lighting = sum[Cd*Ld*(N.Ldir)*Atten*Spot]):
vertex color1, if DIFFUSEMATERIALSOURCE = D3DMCS_COLOR1, and the first vertex color is supplied in the vertex declaration.
vertex color2, if DIFFUSEMATERIALSOURCE = D3DMCS_COLOR2, and the second vertex color is supplied in the vertex declaration.
material diffuse color

4. Note: If either DIFFUSEMATERIALSOURCE option is used, and the vertex color is not provided, the material diffuse color is used.
5. Note: If either EMISSIVEMATERIALSOURCE option is used, and the vertex color is not provided, the material diffuse color is used.
6. If either specular material source option is used and the vertex color is not provided, then the material specular color is used
7. Note: If either  option is used, and the vertex color is not provided, the material diffuse color is used.

Я понимаю этот механизм так:
1. При D3DRS_COLORVERTEX = TRUE
Цвет берется согласно установкам D3DRS_DIFFUSEMATERIALSOURCE, D3DRS_SPECULARMATERIALSOURCE, D3DRS_AMBIENTMATERIALSOURCE, D3DRS_EMISSIVEMATERIALSOURCE
т.е. если в этих стейтах стоит D3DMCS_MATERIAL, цвет берется из материала.
если же стоит D3DMCS_COLOR1, то цвет берется из данных вершин. Если же в данных вершин отсутствует цвет о вершине, то берется из материала.
2. При D3DRS_COLORVERTEX = FALSE - видимо отключает весь этот механизм. А вот откуда данные о цвете берутся? Я подразумеваю что из материала. Поэтому у меня ничего и не менялось.

Я так понимаю, что D3DRS_COLORVERTEX = TRUE нужен только тогда, когда нужно делать интерполяцию цветов между вершинами. Или указывать вершины разными цветами (н-р. выбрили вершину она стала желтой, в то время как все остальные серые). Т.е. в каждой вершине задавать данные о цвете.

Вывод: Т.к. механизм делает работу с цветом более гибким и расширяет функционал, то можно этот стейт держать всегда в TRUE. На производительность это сильно не влияет.
Плюсом также является, что выбор какой цвет будет взят для расчета зависит от: 1. Если данные о цвете в самой вершине 2. И от состояний D3DRS_DIFFUSEMATERIALSOURCE, D3DRS_SPECULARMATERIALSOURCE, D3DRS_AMBIENTMATERIALSOURCE, D3DRS_EMISSIVEMATERIALSOURCE.

Жду ваших мыслей по поводу моих соображений.

#24
13:34, 28 июня 2012

asvp
Не услышишь ты никаких мыслей. Никто по моему не занимается больше этой бредятиной. Она и в актуальные времена не всем и не совсем понятна была. Да и вендоры наверно по разному могли её трактовать.
На встр. видюхах, которые ты хочешь поддержать, нет никакого TnL. Всё на CPU. Так что я бы особо не игрался там со стейтами, включая всё подряд. То, что ты не видишь разницы в производительности говорит
о том, что машины стали намного мощнее с тех времён. Что делает твои старания ещё более абсурдными.

ПС. Если уж так припёрло, сделай софтовый VS. И реализуй там те FVF, которые тебе нужны - и наглядно и понятно всё будет. Дальше либо PS, либо текс. стейджы, если PS не держит.

#25
14:08, 28 июня 2012

antilopka
Понятно. Спс.

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

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