Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2012.03.18;
Скачать: [xml.tar.bz2];

Вниз

Direct3D   Найти похожие ветки 

 
Agent[007]   (2008-08-24 19:01) [0]

Если в Direct3D треугольники отображаются лишь тогда, когда его вершины заданы по часовой стрелке относительно камеры(т.е. vNormal^vCamera > pi/2), то есть ли флажок или способ отображения его с обоих сторон. кроме двойной прорисовки с разным порядком задания вершин?


 
МистерТ   (2008-08-24 19:24) [1]

Естественно есть.
IDirect3DDevice9.SetRenderState(D3DRS_CULLMODE, xxx);
где ххх
D3DCULL_NONE - "с обоих сторон"
D3DCULL_CW - "по часовой"
D3DCULL_CCW - "против часовой"


 
Agent[007]   (2008-08-24 20:06) [2]

Огромное спасибо.


 
Agent[007]   (2008-08-25 08:11) [3]

А вот ещё вопрос. есть ли в d3d аналоги glPushMatrix и glPopMatrix? если да, то как изменить у полученной системы координат ось Y? чтоб она сверху вниз шла, а не снизу вверх.


 
Agent[007]   (2008-08-25 13:48) [4]

в OpenGL это типа
glTranslatef(0, Screen.Height, 0);
glRotatef(1, 0, 0, pi);

а как это будет в Direct3D?


 
Sapersky   (2008-08-25 14:58) [5]

В D3DX есть ID3DXMatrixStack.


 
Agent[007]   (2008-09-27 05:55) [6]

а будет ли действовать изменение в матрице World на объекты, рисуемые в экранных координатах. если нет, то как отобразить объект из VertexBuffer в с некоторым смещением по осям?


 
Agent[007]   (2008-09-27 18:49) [7]

то есть есть допустим треугольник вершины которого записаны в VertexBuffer. И надо его отобразить со смещением по осям. т.е. аналог glTranslate для Direct3D. Но так как к экранным координатам изменения матрицами применить нельзя, то как же быть? и ещё вопросик: будет ли наложенная текстура полупрозрачной, если указать соответствующее значение альфа-канала для цвета вершин.


 
Sapersky   (2008-09-28 13:59) [8]

Но так как к экранным координатам изменения матрицами применить нельзя, то как же быть?

Залочить буфер, сдвинуть. Или, если полигонов относительно немного, проще (и скорее всего даже быстрее) рисовать без буфера, используя DrawPrimitiveUP.

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

Должна, если задать правильный blending mode.


 
Agent[007]   (2008-09-28 14:27) [9]

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


 
Agent[007]   (2008-09-28 15:52) [10]

И не знаешь ли, третьим параметром в DrawPrimitiveUP что идёт? Массив, указатель на него или ещё что? а то я поискал, чёт точно не нашёл...


 
Sapersky   (2008-09-28 16:35) [11]

А ты не знаешь, какой именно бленд-мод надо ставить?

Вероятно, стандартный blending mode для полигонов (поскольку альфу задаём через полигоны), что-то вроде
SetRenderState(D3DRS_SRCBLEND, DWord(D3DBLEND_SRCALPHA));
SetRenderState(D3DRS_DESTBLEND, DWord(D3DBLEND_INVSRCALPHA));

И не знаешь ли, третьим параметром в DrawPrimitiveUP что идёт

function DrawPrimitiveUP(PrimitiveType: TD3DPrimitiveType; PrimitiveCount: LongWord; const pVertexStreamZeroData; VertexStreamZeroStride: LongWord): HResult; stdcall;

Массив вершин. Но объявлен он как нетипизированные данные (что-то вроде "Pointer^"), т.к. вершины могут быть разного типа. Если нужно передать указатель - добавляем ^.


 
Agent[007]   (2008-09-28 20:29) [12]

Огромное спасибо. но всё, что я нашёл в нете, это сабжи о неэффективности этого метода... :( ты не знаешь как ещё можно перемещать 2д объекты в Д3Д? просто менюшку ща пишу... а без этого никак... :)


 
Agent[007]   (2008-09-28 22:18) [13]

как я понял, есть ещё какой-то динамический VertexBuffer... но что это за фрукт и с чем его едят... А Фленов о нём даже не заикнулся... подскажи, если знаешь...


 
Agent[007]   (2008-09-29 08:10) [14]

как я понял, там каждый раз при изменении координат надо делать Lock, Move, Unlock. Или нет?


 
Agent[007]   (2008-09-29 10:14) [15]

и будет ли при этом всё работать без тормозов, если у меня допустим 5 dynVB и каждый из них рисуется и изменяется по 3-5 раз за кадр?


 
Sapersky   (2008-09-29 15:22) [16]

но всё, что я нашёл в нете, это сабжи о неэффективности этого метода...

Если тысяча и более полигонов, особенно статических или модифицируемых шейдером (их можно хранить в видеопамяти, а не гонять через шину на каждом кадре) - лучше VB.
Если полигонов мало (менюшки) и они часто меняются - лучше UP-функции. Точнее, если выводить элементы менюшки по-простому, каждый отдельно - быстрее UP; если сгруппировать все полигоны в один буфер, установить им одну текстуру и вывести за 1 вызов - может быть динамический VB окажется лучше.
ИМХО, для начала менюшку можно сделать через UP, это проще. А потом уже, если будет невозможно тормозить (что вряд ли) - возиться с оптимизацией.

как я понял, есть ещё какой-то динамический VertexBuffer...

В общем-то такой же VB, но оптимизированный для частых блокировок. Создаётся с флагом D3DUSAGE_DYNAMIC, блокировка делается с флагами D3DLOCK_DISCARD или D3DLOCK_NOOVERWRITE.
http://msdn.microsoft.com/en-us/library/bb147263(VS.85,printer).aspx#Using_Dynamic_Vertex_and_Index_Buffers


 
Agent[007]   (2008-09-29 21:44) [17]

огромное спасибо... ты мне очень помог... жаль не могу тебя ни чем отблагодарить, разве что сказать ещё раз ОТ ДУШИ БЛАГОДАРЮ...


 
Sapersky   (2008-09-30 15:14) [18]

Да ладно, ничего особенного :)
Вот, кстати, может пригодится в качестве примера использования  динамического VB для вывода 2D-графики (модуль DX_sprite.pas):
http://sapersky.narod.ru/files/AnyDX2D_v0.6.rar

Пример Blobs можно использовать для сравнения UP-функций с DynVB (по умолчанию включён буфер, чтобы переключить на UP - закомментировать строчку Engine.SprBufSize := SprCount div 2).
У меня получилось следующее (P3-700/Radeon 9000):

спрайты:  2048 шт. (мелкие) 256 шт. (крупные)  
UP   94    344
Dynamic VB  400   346

Т.о. VB быстрее, но заметно это только при использовании большого кол-ва мелких спрайтов, которые слабо грузят fillrate (скорость закраски) карты, так что overhead от пересылки спрайтов в видеопамять становится заметным. Если выводить немного, но крупных - они грузят карту так, что разницы между буфером и UP практически нет.


 
Agent[007]   (2008-09-30 17:44) [19]

понятно... спасибо... мне в меню много и не надо... максимум 500... просто некоторые элементы будут из 18 треугольников... т.е. 9 прямоугольников... центр и по краям. так при изменении размера элемента не будет обычного масштабирования... например списки... ещё раз спасибо. к сожалению пример посмотреть не могу... ближайшие 7 месяцев. дембель тока в мае. я ща пока наброски делаю... вот и спрашиваю такую элементарщину. КСФ в лице меня объявляет благодарность.:)



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2012.03.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.004 c
2-1323012601
xrumas
2011-12-04 19:30
2012.03.18
Работа с одномерными массивами


2-1323102981
Prok186
2011-12-05 20:36
2012.03.18
Компонент TMediaPlayer: как при открытии AVI ...


2-1323062407
kulakovboris
2011-12-05 09:20
2012.03.18
Утечка памяти на ровном месте


15-1322034106
vuk
2011-11-23 11:41
2012.03.18
Проверяем цветовое восприятие


15-1315555388
Василий Жогарев
2011-09-09 12:03
2012.03.18
Перевод заголовочного файла *.h в подключаемый модуль *.pas





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский