blender/source/gameengine/PyDoc/KX_Camera.py
Kester Maddock a96955efc2 Game Python Reference Manual.
This manual lists all the Python classes and modules for Game Objects, Sensor bricks, Controllers etc.
Missing: Actuator & Controller reference.
2004-05-24 07:49:50 +00:00

187 lines
5.0 KiB
Python

# Documentation for Camera game objects.
from KX_GameObject import *
class KX_Camera(KX_GameObject):
"""
A Camera object.
@cvar INSIDE: see sphereInsideFrustum and boxInsideFrustum
@cvar INTERSECT: see sphereInsideFrustum and boxInsideFrustum
@cvar OUTSIDE: see sphereInsideFrustum and boxInsideFrustum
Attributes:
@cvar lens: The camera's lens value. float
@cvar near: The camera's near clip distance. float
@cvar far: The camera's far clip distance. float
@cvar frustum_culling: True if this camera is frustum culling. boolean
@cvar projection_matrix: This camera's 4x4 projection matrix. [[float]]
@cvar modelview_matrix: This camera's 4x4 model view matrix. [[float]] (read only)
Regenerated every frame from the camera's position and orientation.
@cvar camera_to_world: This camera's camera to world transform. [[float]] (read only)
Regenerated every frame from the camera's position and orientation.
@cvar world_to_camera: This camera's world to camera transform. [[float]] (read only)
Regenerated every frame from the camera's position and orientation.
This is camera_to_world inverted.
"""
def sphereInsideFrustum(centre, radius):
"""
Tests the given sphere against the view frustum.
@return: INSIDE, OUTSIDE or INTERSECT
@type centre: list
@param centre: The centre of the sphere (in world coordinates.)
@type radius: float
@param radius: the radius of the sphere
Example:
import GameLogic
co = GameLogic.getCurrentController()
cam = co.GetOwner()
# A sphere of radius 4.0 located at [x, y, z] = [1.0, 1.0, 1.0]
if (cam.sphereInsideFrustum([1.0, 1.0, 1.0], 4) != cam.OUTSIDE):
# Sphere is inside frustum !
# Do something useful !
else:
# Sphere is outside frustum
"""
def boxInsideFrustum(box):
"""
Tests the given box against the view frustum.
@return: INSIDE, OUTSIDE or INTERSECT
@type box: list
@param box: Eight (8) corner points of the box (in world coordinates.)
Example:
@verbatim{
import GameLogic
co = GameLogic.getCurrentController()
cam = co.GetOwner()
# Box to test...
box = []
box.append([-1.0, -1.0, -1.0])
box.append([-1.0, -1.0, 1.0])
box.append([-1.0, 1.0, -1.0])
box.append([-1.0, 1.0, 1.0])
box.append([ 1.0, -1.0, -1.0])
box.append([ 1.0, -1.0, 1.0])
box.append([ 1.0, 1.0, -1.0])
box.append([ 1.0, 1.0, 1.0])
if (cam.boxInsideFrustum(box) != cam.OUTSIDE):
# Box is inside/intersects frustum !
# Do something useful !
else:
# Box is outside the frustum !
}
"""
def pointInsideFrustum(point):
"""
Tests the given point against the view frustum.
@rtype: boolean
@return: True if the given point is inside this camera's viewing frustum.
@type point: [x, y, z]
@param point: The point to test (in world coordinates.)
Example:
@verbatim{
import GameLogic
co = GameLogic.getCurrentController()
cam = co.GetOwner()
# Test point [0.0, 0.0, 0.0]"
if (cam.pointInsideFrustum([0.0, 0.0, 0.0])):
# Point is inside frustum !
# Do something useful !
else:
# Box is outside the frustum !
}
"""
def getCameraToWorld():
"""
Returns the camera-to-world transform.
@rtype: matrix (4x4 list)
@return: the camera-to-world transform matrix.
"""
def getWorldToCamera():
"""
Returns the world-to-camera transform.
This returns the inverse matrix of getCameraToWorld().
@rtype: matrix (4x4 list)
@return: the world-to-camera transform matrix.
"""
def getProjectionMatrix():
"""
Returns the camera's projection matrix.
@rtype: matrix (4x4 list)
@return: the camera's projection matrix.
"""
def setProjectionMatrix(matrix):
"""
Sets the camera's projection matrix.
You should use normalised device coordinates for the clipping planes:
left = -1.0, right = 1.0, top = 1.0, bottom = -1.0, near = 0.0, far = 1.0
@type matrix: 4x4 matrix.
@param matrix: The new projection matrix for this camera.
Example:
@verbatim{
import GameLogic
# Scale a matrix
def Scale(matrix, scalar):
for row in matrix:
for col in row:
col = col * scalar
# Generate an identiy matrix.
def Identity():
return [[1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0], [0.0, 0.0, 0.0, 1.0]]
# Generate a perspective projection matrix
def Perspective():
m = Identity()
m[0][0] = m[0][2] = 2.0
m[1][1] = m[1][2] = 2.0
m[2][2] = m[2][3] = -1.0
m[3][2] = -1.0
m[3][3] = 0.0
return m
# Generate an orthographic projection matrix
# You will need to Scale this matrix.
def Orthographic():
m = Identity()
m[0][0] = 2.0
m[0][3] = 0.0
m[1][1] = 2.0
m[1][3] = 0.0
m[2][2] = 1.0
m[2][3] = 1.0
m[3][3] = 1.0
return m
# Generate an isometric projection matrix
def Isometric():
m = Identity()
m[0][0] = m[0][2] = m[1][1] = 0.8660254037844386
m[1][0] = 0.25
m[1][2] = -0.25
m[3][3] = 1.0
return m
co = GameLogic.getCurrentController()
cam = co.getOwner()
cam.setProjectionMatrix(Perspective()))
"""