Dx9

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

Модератор: Mikle

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3747
Зарегистрирован: 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
Новичок
Новичок
 
Сообщения: 49
Зарегистрирован: 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

Пред.

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

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

Сейчас этот форум просматривают: Bing-бот и гости: 2

    TopList