Показать сообщение отдельно
Старый 15.06.2011, 10:00   #1393
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Ответ: Вопрос-Ответ (для новичков)

Сообщение от dsd Посмотреть сообщение
Захотел я сделать так чтобы предмет был приближен к камере максимально и в тоже время полностью влазил в кадр.
Посчитал я максимальную ширину меша:
Sqr(MeshWidth(testcube)^2+MeshDepth(testcube)^2+Me shHeight(testcube)^2)

Расстояние от камеры до предмета:
EntityDistance(testcube,supershadowcamera)

поделил второе на первое и получил число, которое по моему пониманию при умножении на некую константу даст необходимый зум камеры. В итоге выяснилось что необходимая мне константа ни разу не константа. Почему? На глаз постигать зависимость тяжко. Может кто знает эту зависимость? Или это как то связано с сжатием по оси от камеры в дксграббере? Типа зум как бы линеен, но само 3д пространство не линейно что ли?
CameraProjMode camera,mode
Parameters
camera - camera handle
mode - projection mode:
0: no projection - disables camera (faster than HideEntity)
1: perspective projection (default)
2: orthographic projection

Description
Sets the camera projection mode.

The projection mode is the the technique used by Blitz to display 3D graphics on the screen. Using projection mode 0, nothing is displayed on the screen, and this is the fastest method of hiding a camera. Using camera projection mode 1, the graphics are displayed in their 'correct' form - and this is the default mode for a camera. Camera projection mode 2 is a special type of projection, used for displaying 3D graphics on screen, but in a 2D form - that is, no sense of perspective will be given to the graphics. Two identical objects at varying distances from the camera will both appear to be the same size. Orthographic projection is useful for 3D editors, where a sense of perspective is unimportant, and also certain games.

Use 'CameraZoom' to control the scale of graphics rendered with orthographic projection. As a general rule, using orthographic projection with the default camera zoom setting of 1 will result in graphics that are too 'zoomed-in' - changing the camera zoom to 0.1 should fix this.

One thing to note with using camera project mode 2, is that terrains will not be displayed correctly - this is because the level of detail algorithm used by terrains relies on perspective in order to work properly.

Example
; CameraProjMode Example
; ----------------------

Graphics3D 640,480 
SetBuffer BackBuffer() 

camera=CreateCamera() 
PositionEntity camera,0,0,-10 

light=CreateLight() 
RotateEntity light,0,0,0 

; Create cube 1, near to camera 
cube1=CreateCube() 
EntityColor cube1,255,0,0 
PositionEntity cube1,0,0,0 

; Create cube 2, same size as cube 1 but further away 
cube2=CreateCube() 
EntityColor cube2,0,255,0 
PositionEntity cube2,5,5,5 

While Not KeyDown( 1 ) 

; If spacebar pressed then change mode value 
If KeyHit(57)=True Then mode=mode+1 : If mode=3 Then mode=0 

; If mode value = 2 (orthagraphic), then reduce zoom value to 0.1 
If mode=2 Then zoom#=0.1 Else zoom#=1 

; Set camera projection mode using mode value 
CameraProjMode camera,mode 

; Set camera zoom using zoom value 
CameraZoom camera,zoom# 

RenderWorld 

Text 0,0,"Press spacebar to change the camera project mode" 
Text 0,20,"CameraProjMode camera,"+mode 
Text 0,40,"CameraZoom camera,"+zoom# 

Flip 

Cls 

Wend 

End
__________________
(Offline)
 
Ответить с цитированием