Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Программирование графики > Помогите пожалуйста


Автор: olegber1 05.07.07, 07:53
Как получить оконные координаты вершины(координаты на экране) после всех матричных преобразований в DirectX (т.е. не самому вычислять,а достать из буфера "готовые")?Как это можно реализовать?(или хотя бы 3D координаты).

Автор: XandoX 05.07.07, 07:59
координаты вершины умнажаешь на WorldViewProjection матрицу и все.
а выдрать помоему не получиться. самому вычислять.

Автор: Antber 05.07.07, 08:06
нету буфера с готовыми вершинами. все делается "on the fly".

Автор: olegber1 05.07.07, 08:26
Т.е. если у меня 500 вершин,то для вычисления их координат на эране мне нужно выполнить 500 матричных преобразований(перенос,вращение(X,Y,Z),проекция и т.д.). Т.е. параллельно вычислять их месте с direct3d (+синхронизация вычислений). Я так понял?

И даже готовые 3d координаты не достать?

Автор: XandoX 05.07.07, 08:28
Цитата olegber1 @
И даже готовые 3d координаты не достать?

что ты имеешь ввиду?

а зачем тебе паралельно с DXом вычеслять экранные координаты?

Автор: olegber1 05.07.07, 08:38
Я использую функцию SetTransform Direct3d
Т.е. direct3d сам вычисляет все матричные преобразования.
А я как понял мне вы предложили мне самому вычислять координаты вершины на экране.

Автор: XandoX 05.07.07, 08:40
olegber1

я чего-то не пойму чего ты хочешь сделать?

Автор: olegber1 05.07.07, 08:43
Разве нет никакого выходного буфера,содержащего координаты трансформированных вершин(хотя бы 3d).

Автор: XandoX 05.07.07, 08:44
olegber1 буфера нет

что значит
Цитата
(хотя бы 3d).

Автор: olegber1 05.07.07, 08:47
Это так от отчаяния :'(

Автор: XandoX 05.07.07, 08:49
olegber1

обьясни зачем тебе нужны эти буферы. Мож поможем

Автор: olegber1 05.07.07, 08:51
Получается мне нужно самому каждый раз вычислять 3d координаты, загонять их в вершинный буфер, прорисовывать примитив,потом на основе этих 3d координат вычислять координаты на экране?

Автор: XandoX 05.07.07, 08:55
olegber1

рендер в direcx происходит в следующем порятке

создаешь буфер вершин на основе какихто координат какихто точек
задаешь Мировую матрицу для модели
задаешь Видовую матрицу для сцены
задаешь проекционную матрицу

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

Автор: olegber1 05.07.07, 08:57
Дак вот мне надо узнать куда он поставил эту точку на экране

Автор: XandoX 05.07.07, 09:06
ну тогда самому вычислять

Автор: olegber1 05.07.07, 09:11
Цитата olegber1 @
Получается мне нужно самому каждый раз вычислять 3d координаты, загонять их в вершинный буфер, прорисовывать примитив,потом на основе этих 3d координат вычислять координаты на экране?

Т.е. таким образом

Автор: XandoX 05.07.07, 09:12
Цитата olegber1 @
Т.е. таким образом

да

только не мог бы ты поделиться, зачем тебе это надо?

Автор: olegber1 05.07.07, 09:15
Вообще задача стоит следующая:следующая кубик(36 вершин) двигается по экрану(Это реализовано Вычисляет всё direct3d).
Нужно выводить координаты его вершин.Кубиков может быть 10 штук(соответственно 36 вершин).

Добавлено
Ну выводить нужно само сабой 4 вершины у каждого кубика

Автор: XandoX 05.07.07, 09:17
Цитата olegber1 @
Нужно выводить координаты его вершин

Экранных?

Автор: olegber1 05.07.07, 09:19
Экранных

Автор: XandoX 05.07.07, 09:20
olegber1
ну удачи

Автор: olegber1 05.07.07, 09:24
Спасибо, буду искать дальше

Автор: barazuk 05.07.07, 09:31
Цитата olegber1 @
кубик(36 вершин)


Это сколькомерный кубик-то? :blink:

Автор: XandoX 05.07.07, 09:34
Цитата barazuk @
Это сколькомерный кубик-то

если с текстурами и нормалями то как раз

Автор: olegber1 05.07.07, 09:55
Ещё такой вопрос как бы Вы решили эту задачу?

Автор: XandoX 05.07.07, 09:58
XandoX

ну так бы и решили


тока почему
Цитата olegber1 @
Ну выводить нужно само сабой 4 вершины у каждого кубика

Автор: olegber1 05.07.07, 10:02
Опечатался, конечно координаты 8 вершин,которые лежат на углах кубика

Автор: olegber1 06.07.07, 13:32
а можно как-нибудь для решения этой проблемы использовать буфер IDirect3DDevice8::ProcessVertices?

Автор: XandoX 06.07.07, 13:36
olegber1
да

незнал про эту функцию

Автор: olegber1 06.07.07, 13:38
Вот только как интересно?
Кто-нибудь мог бы подсказать примерный порядок действий.

Автор: XandoX 06.07.07, 13:46
создаешь свой кубик
устанавливаешь матрицы
создаешь доп буфер пока пустой с нужным тебе FVF
устанавливаешь буфер кубика в поток
вызываешь эту функцию
и там у тебя то что нужно
только в SDK написано что если вершина не попала в фрустум то она сохраниться только в проекционном виде. и все.

Автор: olegber1 06.07.07, 13:56
спасибо

Автор: olegber1 09.07.07, 12:30
Ничего не получается. Не могли бы Вы выложить часть кода (на delphi,c)?

Автор: XandoX 10.07.07, 03:56
olegber1
лучше сам выложи, что у тебя получилось

Автор: barazuk 10.07.07, 04:52
Цитата XandoX @
что у тебя получилось

Цитата olegber1 @
Ничего


Или всё-таки хоть что-то?

Автор: olegber1 11.07.07, 08:29
Всё работает как написано в SDK.Спасибо за помощь.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)