Dx9

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3819
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Dx9

Сообщение Mikle » 13.11.2017 (Пн) 16:02

cam(0) - координата позиции камеры по Х
cam(1) - координата позиции камеры по У
cam(2) - координата позиции камеры по Z
cam(3) - координата позиции цели взора по Х
cam(4) - координата позиции цели взора по Y
cam(5) - координата позиции цели взора по Z

Это я и так понял, хотя всё это как-то странно, но основная мысль была другая:
Такие базовые вещи, как позиция и направление камеры, не нужно ниоткуда "тягать"

Вперёд и вправо получается так:

Код: Выделить всё
Vec3Subtract CamDir, vAt, CamPos 'vAt - тот вектор, который задаётся в MatrixLookAtLH
Vec3Normalize CamDir, CamDir
Vec3Cross CamRight, vUp, CamDir 'vUp - тот вектор, который задаётся в MatrixLookAtLH
Vec3Normalize CamRight, CamRight
Vec3Cross CamUp, CamDir, CamRight 'CamUp - направление вверх камеры

Sneaks
Обычный пользователь
Обычный пользователь
 
Сообщения: 52
Зарегистрирован: 29.07.2006 (Сб) 12:08

Re: Dx9

Сообщение Sneaks » 14.11.2017 (Вт) 20:41

Спасибо, заработало.
Там было 2 косяка с одним фовом :) во первых в радианах и во вторых не 90 градусов, а 45
Оставлю что у меня вышло тут, может кому пригодится.
Код: Выделить всё
Dim v As D3DVECTOR, CamPos As D3DVECTOR, ThingPos As D3DVECTOR, CamDir As D3DVECTOR
Dim CamUp As D3DVECTOR, CamRight As D3DVECTOR
Dim Width As Single, Height As Single
Dim vUp As D3DVECTOR, vAt As D3DVECTOR

ThingPos.x = 20
ThingPos.y = 10
ThingPos.z = 0

CamPos.x = cam(0)
CamPos.y = cam(1)
CamPos.z = cam(2)

vAt.x = cam(3)
vAt.y = cam(4)
vAt.z = cam(5)

vUp.x = 0
vUp.y = 1
vUp.z = 0

Vec3Subtract CamDir, vAt, CamPos
Vec3Normalize CamDir, CamDir
Vec3Cross CamRight, vUp, CamDir
Vec3Normalize CamRight, CamRight
Vec3Cross CamUp, CamDir, CamRight

Height = Me.ScaleHeight
Width = Me.ScaleWidth

FovY = 0.785398 '1.5708

Vec3Subtract v, ThingPos, CamPos
  Vec3Scale v, v, 1 / Vec3Dot(CamDir, v)
 
  TestX = (Width + Vec3Dot(CamRight, v) / Tan(FovY / 2) * Height) * 0.5
  TestY = (Height - Vec3Dot(CamUp, v) / Tan(FovY / 2) * Height) * 0.5
 
  Line (TestX, TestY)-(TestX + 20, TestY + 20), 200, BF

Sneaks
Обычный пользователь
Обычный пользователь
 
Сообщения: 52
Зарегистрирован: 29.07.2006 (Сб) 12:08

Re: Dx9

Сообщение Sneaks » 03.05.2018 (Чт) 14:25

Доброго время суток,
я опять со своими теоретическими вопросами.
Раньше рисовал землю DrawIndexedPrimitive'ом, объекты DrawPrimitive или DrawPrimitiveUp'ом и горя не знал, решил перекинуть объекты на DrawIndexedPrimitiveUp и у меня возникли проблемы с нормалями если объект острой формы как к примеру куб, и возникли проблемы с текстурными координатами, на стыке виден шов. Раскинув скромным количеством своих мозгов пришел к точу что задача не решаема, т.к. по вертоксно мы вбиваем на одну точку несколько координат и нормалей для каждой стороны, а через индексы, то на каждую точку только одну нормаль и текстурную координату.
Теперь вопрос: на сколько сильно я заблуждаюсь, может я что то не учел.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3819
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Dx9

Сообщение Mikle » 03.05.2018 (Чт) 16:33

Всё, что можно нарисовать с помощью DrawPrimitiveUp, можно нарисовать и с помощью DrawIndexedPrimitiveUp.

Sneaks
Обычный пользователь
Обычный пользователь
 
Сообщения: 52
Зарегистрирован: 29.07.2006 (Сб) 12:08

Re: Dx9

Сообщение Sneaks » 03.05.2018 (Чт) 21:54

Единственное решения которое я нахожу это дублировать вертексы. Ну тогда теряется смысл индексов.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3819
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Dx9

Сообщение Mikle » 03.05.2018 (Чт) 23:02

Смысл индексов в том, чтобы не дублировать полностью совпадающие вертексы, то есть в которых всё одинаково, ту часть вертексов, которые совпадают частично, можно дублировать, это не противоречит идее индексирования. У куба 8 вершин, но, если использовать нормали, то придётся использовать 24 вертекса с индексами, по три на вершину, но это всё-таки не 36 вертексов, которые пришлось бы задействовать при обычном TriangleList без индексов.

Пред.

Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList