Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 10.02.2006, 18:19   #1
<Платон>
 
Сообщений: n/a
Как найти угол поворота какого-нибудь меша, например куба в блице зная только координаты его вершин?
Если находить через аркосинус от скалярного произведения вектора нормали с векторами осей координат, то получаются не такие углы как в блице. Как их преобразовать, так чтобы они совпадали? Или есть какой-то другой (математический) способ?
 
Ответить с цитированием
Старый 10.02.2006, 18:55   #2
Платон
Нуждающийся
 
Регистрация: 09.11.2005
Сообщений: 69
Написано одно полезное сообщение
Вот пример, углы не совпадают
Type TVector
 * * Field x#,y#,z#
End Type

Function DotProduct#(a.TVector,b.TVector)
 * *Return a\x*b\x+a\y*b\y+a\z*b\z
End Function

Function Length#(v.TVector)
 * *Return Sqr(DotProduct(v,v))
End Function

Function Scale(v.TVector,s#)
 * v\x=v\x*s
 *v\y=v\y*s
 *v\z=v\z*s
End Function

Function Normalize(v.TVector)
 * Scale(v,1.0/Length(v))
End Function

Function Normal.TVector(mesh,index)
	Local vec.TVector=New TVector
	Local vx#[2],vy#[2],vz#[2],A#[2],B#[2]
	Local surf=GetSurface(mesh,1)
	For i=0 To 2
 *TFormPoint VertexX(surf,TriangleVertex(surf,index,i)),VertexY(surf,TriangleVertex(surf,index,i)),VertexZ(surf,TriangleVertex(surf,index,i)),mesh,0
 *vx[i]=TFormedX()
 *vy[i]=TFormedY()
 *vz[i]=TFormedZ()
	Next
	A[0]=vx[0]-vx[1]
	A[1]=vy[0]-vy[1]
	A[2]=vz[0]-vz[1]
	B[0]=vx[2]-vx[1]
	B[1]=vy[2]-vy[1]
	B[2]=vz[2]-vz[1]
	vec\x=B[1]*A[2]-B[2]*A[1]
	vec\y=B[2]*A[0]-B[0]*A[2]
	vec\z=B[0]*A[1]-B[1]*A[0]
	Normalize(vec)
	Return vec
End Function

Function GetYaw#(mesh)
	Local VecN.TVector=Normal(mesh,0)
	WorldN\x=1.0
	WorldN\y=0.0
	WorldN\z=0.0
	Return ACos(DotProduct(VecN,WorldN))
End Function

Function GetPitch#(mesh)
	Local VecN.TVector=Normal(mesh,0)
	WorldN\x=0.0
	WorldN\y=0.0
	WorldN\z=1.0
	Return ACos(DotProduct(VecN,WorldN))
End Function

Global WorldN.TVector=New TVector

Graphics3D 640,480,16,2
SetBuffer BackBuffer() 

camera=CreateCamera()

mesh=CreateCube() 
PositionEntity mesh,0,0,5 

While Not KeyDown(1)
	If KeyDown(203) Then TurnEntity mesh,0,-0.1,0
	If KeyDown(205) Then TurnEntity mesh,0,0.1,0
	If KeyDown(200) Then TurnEntity mesh,0.1,0,0
	If KeyDown(208) Then TurnEntity mesh,-0.1,0,0
	If KeyDown(30) Then TurnEntity mesh,0,0,0.1
	If KeyDown(44) Then TurnEntity mesh,0,0,-0.1
RenderWorld
Text 10,10,"origin Pitch "+Int(EntityPitch(mesh))+" normal Pitch "+ Int(GetPitch(mesh))
Text 10,25,"origin Yaw "+Int(EntityYaw(mesh))+" normal Yaw "+ Int(GetYaw(mesh))
Flip 
Wend 
End
Еще проблема в том что треугольник у модели может быть ориентирован под другим углом чем сама модель, и таким способом находитль углы модели нельзя.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Математика в Blitz3D impersonalis FAQ 20 28.01.2013 13:57
Истинная математика alcoSHoLiK Юмор 5 21.06.2007 14:49
Вычислительная математика: Аппроксимация КУБА Horror Болтовня 1 27.05.2007 18:14
Алгоритм поворота alcosholik Алгоритмика 8 08.09.2005 21:05


Часовой пояс GMT +4, время: 19:36.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com