Показать сообщение отдельно
Старый 01.09.2008, 21:57   #1
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений
(для 6 пользователей)
Восклицание Вид от третьего лица - изображение ТРЯСЁТСЯ...

Добрый день)
Делаю вид от третьего лица в своей игре. Я знаю лишь один алгоритм, как это можно сделать...Алгоритм который приедлагался создателями DARKBasic в их мануале... Теперь я хочу портировать свою игру с DBPro на блитз... Многих функций, которые необходимы мне для вида от третьего лица в блитце нет((( Тогда я написал их в код сам...ТОчнее две функции мне дал HolyDel, а одну я сам попытался написать... вообщем-то в ней вся и проблема!!!
Моя функция предназначена для поинтирования(направления) объекта на определённую точку 3д простанства! (НЕ ОБЪЕКТА НА ОБЪЕКТ)

Вот код
Graphics3D 1280,1024,32,1
SetBuffer BackBuffer()
SeedRnd (MilliSecs()) 

;make camera
Global cam=CreateCamera()
CameraRange cam,5,30000

;make light
lit=CreateLight()

;make player
player = CreateSphere()
ScaleEntity player, 40, 40, 40
PositionEntity player,-9000, 100, -9000
RotateEntity player, 0, -45, 0

;make 50 random cubes
For i = 1 To 50
	n = n + i
	n=CreateCube()
	ScaleEntity n, Rand(40,100) , Rand(40,100), Rand(40,100)
	PositionEntity n, Rand(1, 3002), 0,Rand(1,3002)
Next





;cube for my function
Global pointdot=CreateCube()






Repeat
	
	;move sphere
	playermove#=0
	If KeyDown(200)=1
		playermove#=0.2
	EndIf
	If KeyDown(208)=1
		playermove#=-0.2
	EndIf
	MoveEntity player, 0, 0, playermove#
	
	
	
	;position camera
	ay# = EntityYaw#(player)
	x#=MouseXSpeed()*0.25
	MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
	RotateEntity player, 0, ay# - x#, 0
	PositionEntity cam, NewXValue(EntityX(player),-aY#-180,200),EntityY(player)+80 + 40, NewZValue(EntityZ(player),-aY#-180,200)
	
	
	
	;задаем переменную режима камеры
	If KeyHit(28)=1
		If cammode=0
			cammode = 1
		Else
			cammode=0
		EndIf
	EndIf
	
	;Поинтируем камеру...
	If cammode = 0
		DotPoint cam, EntityX(player),  EntityY(player)+30,  EntityZ(player)
	Else
		RotateEntity cam, 0, ay# - x#, 0
	EndIf
	
	
	
	
	UpdateWorld
	RenderWorld
	Flip 0
Until KeyHit(1)



End






;Эти две функции нужны для вида от третьего лица..
Function NewXValue(old#,angle#,steps#)
	Return old#+Sin(angle#)*steps#
End Function

Function NewZValue(old#,angle#,steps#)
	Return old#+Cos(angle#)*steps#
End Function


; Вот она - ГЛЮЧНАЯ функция, которую я написал сам...Из за неё трясётся изображение((((
Function DotPoint(entity, x#, y#, z#)
	PositionEntity pointdot, x#, y#, z#
	PointEntity entity, pointdot
End Function
Проблема в том, что изза моей ф-ии "DotPoint" трясётся изображение...или камера... вообщем вы сами можете всё увидеть просто запустите код(кубики на заднем плане сильно дёргаются!)... если же исключить мою функцию(нажмите ентер), то изображение трястить перестанет... я не понимаю почему...(((
Код с комментариями! Помогите разобраться! Буду очень благодарен!
(Offline)
 
Ответить с цитированием