Package com.jme.renderer
Class Camera
- java.lang.Object
-
- com.jme.renderer.Camera
-
- All Implemented Interfaces:
Savable
,java.lang.Cloneable
public class Camera extends java.lang.Object implements Savable, java.lang.Cloneable
Camera
is a standalone, purely mathematical class for doing camera-related computations.Given input data such as location, orientation (direction, left, up), and viewport settings, it can compute data necessary to render objects with the graphics library. Two matrices are generated, the view matrix transforms objects from world space into eye space, while the projection matrix transforms objects from eye space into clip space.
Another purpose of the camera class is to do frustum culling operations, defined by six planes which define a 3D frustum shape, it is possible to test if an object bounded by a mathematically defined volume is inside the camera frustum, and thus to avoid rendering objects that are outside the frustum
- Author:
- Mark Powell, Joshua Slack
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
Camera.FrustumIntersect
TheFrustumIntersect
enum is returned as a result of a culling check operation, seecontains(com.jme.bounding.BoundingVolume)
-
Field Summary
Fields Modifier and Type Field Description protected float[]
coeffBottom
protected float[]
coeffLeft
protected float[]
coeffRight
protected float[]
coeffTop
protected float
frustumBottom
Distance from camera to bottom frustum plane.protected float
frustumFar
Distance from camera to far frustum plane.protected float
frustumLeft
Distance from camera to left frustum plane.protected float
frustumNear
Distance from camera to near frustum plane.protected float
frustumRight
Distance from camera to right frustum plane.protected float
frustumTop
Distance from camera to top frustum plane.protected int
height
protected Vector3f
location
Camera's locationprotected java.lang.String
name
The camera's name.protected Matrix4f
projectionMatrix
protected Matrix4f
projectionMatrixOverride
protected Quaternion
rotation
The orientation of the camera.protected Matrix4f
viewMatrix
protected float
viewPortBottom
Percent value on display where vertical viewing begins for this camera.protected boolean
viewportChanged
protected float
viewPortLeft
Percent value on display where horizontal viewing starts for this camera.protected float
viewPortRight
Percent value on display where horizontal viewing ends for this camera.protected float
viewPortTop
Percent value on display where vertical viewing ends for this camera.protected Matrix4f
viewProjectionMatrix
protected int
width
protected Plane[]
worldPlane
Array holding the planes that this camera will check for culling.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
clearViewportChanged()
Clears the viewport changed flag once it has been updated inside the renderer.Camera
clone()
Camera.FrustumIntersect
contains(BoundingVolume bound)
contains
tests a bounding volume against the planes of the camera's frustum.boolean
containsGui(BoundingVolume bound)
containsGui
tests a bounding volume against the ortho bounding box of the camera.void
copyFrom(Camera cam)
This method copies the settings of the given camera.float
distanceToNearPlane(Vector3f pos)
Returns the pseudo distance from the given position to the near plane of the camera.Vector3f
getDirection()
getDirection
retrieves the direction vector the camera is facing.Vector3f
getDirection(Vector3f store)
getDirection
retrieves the direction vector the camera is facing.float
getFrustumBottom()
getFrustumBottom
returns the value of the bottom frustum plane.float
getFrustumFar()
getFrustumFar
gets the value of the far frustum plane.float
getFrustumLeft()
getFrustumLeft
gets the value of the left frustum plane.float
getFrustumNear()
getFrustumNear
gets the value of the near frustum plane.float
getFrustumRight()
getFrustumRight
gets the value of the right frustum plane.float
getFrustumTop()
getFrustumTop
gets the value of the top frustum plane.int
getHeight()
Vector3f
getLeft()
getLeft
retrieves the left axis of the camera.Vector3f
getLeft(Vector3f store)
getLeft
retrieves the left axis of the camera.Vector3f
getLocation()
getLocation
retrieves the location vector of the camera.java.lang.String
getName()
This method returns the cameras name.int
getPlaneState()
getPlaneState
returns the state of the frustum planes.Matrix4f
getProjectionMatrix()
Quaternion
getRotation()
getRotation
retrieves the rotation quaternion of the camera.Vector3f
getScreenCoordinates(Vector3f worldPos)
Converts the given position from world space to screen space.Vector3f
getScreenCoordinates(Vector3f worldPosition, Vector3f store)
Converts the given position from world space to screen space.Vector3f
getUp()
getUp
retrieves the up axis of the camera.Vector3f
getUp(Vector3f store)
getUp
retrieves the up axis of the camera.Matrix4f
getViewMatrix()
float
getViewPortBottom()
getViewPortBottom
gets the bottom boundary of the viewportfloat
getViewPortLeft()
getViewPortLeft
gets the left boundary of the viewportfloat
getViewPortRight()
getViewPortRight
gets the right boundary of the viewportfloat
getViewPortTop()
getViewPortTop
gets the top boundary of the viewportMatrix4f
getViewProjectionMatrix()
float
getViewToProjectionZ(float viewZPos)
Computes the z value in projection space from the z value in view space Note that the returned value is going non linearly from 0 to 1.int
getWidth()
Vector3f
getWorldCoordinates(Vector2f screenPos, float projectionZPos)
Computes a position in World space given a screen position in screen space (0,0 to width, height) and a z position in projection space ( 0 to 1 non linear).Vector3f
getWorldCoordinates(Vector2f screenPosition, float projectionZPos, Vector3f store)
Plane
getWorldPlane(int planeId)
boolean
isParallelProjection()
boolean
isViewportChanged()
void
lookAt(Vector3f pos, Vector3f worldUpVector)
lookAt
is a convenience method for auto-setting the frame based on a world position the user desires the camera to look at.void
lookAtDirection(Vector3f direction, Vector3f up)
lookAtDirection
sets the direction the camera is facing given a direction and an up vector.void
normalize()
normalize normalizes the camera vectors.void
onFrameChange()
onFrameChange
updates the view frame of the camera.void
onFrustumChange()
onFrustumChange
updates the frustum to reflect any changes made to the planes.void
onViewPortChange()
Called when the viewport has been changed.void
read(JmeImporter e)
void
resize(int width, int height, boolean fixAspect)
Resize this camera's view for the specified display size.void
setAxes(Quaternion axes)
setAxes
uses a rotational matrix to set the axes of the camera.void
setAxes(Vector3f left, Vector3f up, Vector3f direction)
setAxes
sets the axes (left, up and direction) for this camera.void
setClipPlane(Plane clipPlane)
Sets a clipPlane for this camera.void
setClipPlane(Plane clipPlane, Plane.Side side)
Sets a clipPlane for this camera.void
setFrame(Vector3f location, Quaternion axes)
setFrame
sets the orientation and location of the camera.void
setFrame(Vector3f location, Vector3f left, Vector3f up, Vector3f direction)
setFrame
sets the orientation and location of the camera.void
setFrustum(float near, float far, float left, float right, float top, float bottom)
setFrustum
sets the frustum of this camera object.void
setFrustumBottom(float frustumBottom)
setFrustumBottom
sets the value of the bottom frustum plane.void
setFrustumFar(float frustumFar)
setFrustumFar
sets the value of the far frustum plane.void
setFrustumLeft(float frustumLeft)
setFrustumLeft
sets the value of the left frustum plane.void
setFrustumNear(float frustumNear)
setFrustumNear
sets the value of the near frustum plane.void
setFrustumPerspective(float fovY, float aspect, float near, float far)
setFrustumPerspective
defines the frustum for the camera.void
setFrustumRight(float frustumRight)
setFrustumRight
sets the value of the right frustum plane.void
setFrustumTop(float frustumTop)
setFrustumTop
sets the value of the top frustum plane.void
setLocation(Vector3f location)
setLocation
sets the position of the camera.void
setName(java.lang.String name)
This method sets the cameras name.void
setParallelProjection(boolean value)
Enable/disable parallel projection.void
setPlaneState(int planeState)
setPlaneState
sets the state to keep track of tested planes for culling.void
setProjectionMatrix(Matrix4f projMatrix)
Overrides the projection matrix used by the camera.void
setRotation(Quaternion rotation)
setRotation
sets the orientation of this camera.void
setViewPort(float left, float right, float bottom, float top)
setViewPort
sets the boundaries of the viewportvoid
setViewPortBottom(float bottom)
setViewPortBottom
sets the bottom boundary of the viewportvoid
setViewPortLeft(float left)
setViewPortLeft
sets the left boundary of the viewportvoid
setViewPortRight(float right)
setViewPortRight
sets the right boundary of the viewportvoid
setViewPortTop(float top)
setViewPortTop
sets the top boundary of the viewportjava.lang.String
toString()
void
update()
update
updates the camera parameters by callingonFrustumChange
,onViewPortChange
andonFrameChange
.void
updateViewProjection()
Updates the view projection matrix.void
write(JmeExporter e)
-
-
-
Field Detail
-
location
protected Vector3f location
Camera's location
-
rotation
protected Quaternion rotation
The orientation of the camera.
-
frustumNear
protected float frustumNear
Distance from camera to near frustum plane.
-
frustumFar
protected float frustumFar
Distance from camera to far frustum plane.
-
frustumLeft
protected float frustumLeft
Distance from camera to left frustum plane.
-
frustumRight
protected float frustumRight
Distance from camera to right frustum plane.
-
frustumTop
protected float frustumTop
Distance from camera to top frustum plane.
-
frustumBottom
protected float frustumBottom
Distance from camera to bottom frustum plane.
-
coeffLeft
protected float[] coeffLeft
-
coeffRight
protected float[] coeffRight
-
coeffBottom
protected float[] coeffBottom
-
coeffTop
protected float[] coeffTop
-
viewPortLeft
protected float viewPortLeft
Percent value on display where horizontal viewing starts for this camera. Default is 0.
-
viewPortRight
protected float viewPortRight
Percent value on display where horizontal viewing ends for this camera. Default is 1.
-
viewPortTop
protected float viewPortTop
Percent value on display where vertical viewing ends for this camera. Default is 1.
-
viewPortBottom
protected float viewPortBottom
Percent value on display where vertical viewing begins for this camera. Default is 0.
-
worldPlane
protected Plane[] worldPlane
Array holding the planes that this camera will check for culling.
-
width
protected int width
-
height
protected int height
-
viewportChanged
protected boolean viewportChanged
-
projectionMatrixOverride
protected Matrix4f projectionMatrixOverride
-
viewMatrix
protected Matrix4f viewMatrix
-
projectionMatrix
protected Matrix4f projectionMatrix
-
viewProjectionMatrix
protected Matrix4f viewProjectionMatrix
-
name
protected java.lang.String name
The camera's name.
-
-
Method Detail
-
clone
public Camera clone()
- Overrides:
clone
in classjava.lang.Object
-
copyFrom
public void copyFrom(Camera cam)
This method copies the settings of the given camera.- Parameters:
cam
- the camera we copy the settings from
-
setName
public void setName(java.lang.String name)
This method sets the cameras name.- Parameters:
name
- the cameras name
-
getName
public java.lang.String getName()
This method returns the cameras name.- Returns:
- the cameras name
-
setClipPlane
public void setClipPlane(Plane clipPlane, Plane.Side side)
Sets a clipPlane for this camera. The clipPlane is used to recompute the projectionMatrix using the plane as the near plane This technique is known as the oblique near-plane clipping method introduced by Eric Lengyel more info here Note that this will work properly only if it's called on each update, and be aware that it won't work properly with the sky bucket. if you want to handle the sky bucket, look at how it's done in SimpleWaterProcessor.java- Parameters:
clipPlane
- the planeside
- the side the camera stands from the plane
-
setClipPlane
public void setClipPlane(Plane clipPlane)
Sets a clipPlane for this camera. The cliPlane is used to recompute the projectionMatrix using the plane as the near plane This technique is known as the oblique near-plane clipping method introduced by Eric Lengyel more info here Note that this will work properly only if it's called on each update, and be aware that it won't work properly with the sky bucket. if you want to handle the sky bucket, look at how it's done in SimpleWaterProcessor.java- Parameters:
clipPlane
- the plane
-
resize
public void resize(int width, int height, boolean fixAspect)
Resize this camera's view for the specified display size. Invoked by an associatedRenderManager
to notify the camera of changes to the display dimensions.- Parameters:
width
- the new width of the display, in pixelsheight
- the new height of the display, in pixelsfixAspect
- if true, recompute the camera's frustum to preserve its prior aspect ratio
-
getFrustumBottom
public float getFrustumBottom()
getFrustumBottom
returns the value of the bottom frustum plane.- Returns:
- the value of the bottom frustum plane.
-
setFrustumBottom
public void setFrustumBottom(float frustumBottom)
setFrustumBottom
sets the value of the bottom frustum plane.- Parameters:
frustumBottom
- the value of the bottom frustum plane.
-
getFrustumFar
public float getFrustumFar()
getFrustumFar
gets the value of the far frustum plane.- Returns:
- the value of the far frustum plane.
-
setFrustumFar
public void setFrustumFar(float frustumFar)
setFrustumFar
sets the value of the far frustum plane.- Parameters:
frustumFar
- the value of the far frustum plane.
-
getFrustumLeft
public float getFrustumLeft()
getFrustumLeft
gets the value of the left frustum plane.- Returns:
- the value of the left frustum plane.
-
setFrustumLeft
public void setFrustumLeft(float frustumLeft)
setFrustumLeft
sets the value of the left frustum plane.- Parameters:
frustumLeft
- the value of the left frustum plane.
-
getFrustumNear
public float getFrustumNear()
getFrustumNear
gets the value of the near frustum plane.- Returns:
- the value of the near frustum plane.
-
setFrustumNear
public void setFrustumNear(float frustumNear)
setFrustumNear
sets the value of the near frustum plane.- Parameters:
frustumNear
- the value of the near frustum plane.
-
getFrustumRight
public float getFrustumRight()
getFrustumRight
gets the value of the right frustum plane.- Returns:
- frustumRight the value of the right frustum plane.
-
setFrustumRight
public void setFrustumRight(float frustumRight)
setFrustumRight
sets the value of the right frustum plane.- Parameters:
frustumRight
- the value of the right frustum plane.
-
getFrustumTop
public float getFrustumTop()
getFrustumTop
gets the value of the top frustum plane.- Returns:
- the value of the top frustum plane.
-
setFrustumTop
public void setFrustumTop(float frustumTop)
setFrustumTop
sets the value of the top frustum plane.- Parameters:
frustumTop
- the value of the top frustum plane.
-
getLocation
public Vector3f getLocation()
getLocation
retrieves the location vector of the camera.- Returns:
- the position of the camera.
- See Also:
getLocation()
-
getRotation
public Quaternion getRotation()
getRotation
retrieves the rotation quaternion of the camera.- Returns:
- the rotation of the camera.
-
getDirection
public Vector3f getDirection()
getDirection
retrieves the direction vector the camera is facing.- Returns:
- the direction the camera is facing.
- See Also:
getDirection()
-
getLeft
public Vector3f getLeft()
getLeft
retrieves the left axis of the camera.- Returns:
- the left axis of the camera.
- See Also:
getLeft()
-
getUp
public Vector3f getUp()
getUp
retrieves the up axis of the camera.- Returns:
- the up axis of the camera.
- See Also:
getUp()
-
getDirection
public Vector3f getDirection(Vector3f store)
getDirection
retrieves the direction vector the camera is facing.- Returns:
- the direction the camera is facing.
- See Also:
getDirection()
-
getLeft
public Vector3f getLeft(Vector3f store)
getLeft
retrieves the left axis of the camera.- Returns:
- the left axis of the camera.
- See Also:
getLeft()
-
getUp
public Vector3f getUp(Vector3f store)
getUp
retrieves the up axis of the camera.- Returns:
- the up axis of the camera.
- See Also:
getUp()
-
setLocation
public void setLocation(Vector3f location)
setLocation
sets the position of the camera.- Parameters:
location
- the position of the camera.
-
setRotation
public void setRotation(Quaternion rotation)
setRotation
sets the orientation of this camera. This will be equivalent to setting each of the axes:
cam.setLeft(rotation.getRotationColumn(0));
cam.setUp(rotation.getRotationColumn(1));
cam.setDirection(rotation.getRotationColumn(2));
- Parameters:
rotation
- the rotation of this camera
-
lookAtDirection
public void lookAtDirection(Vector3f direction, Vector3f up)
lookAtDirection
sets the direction the camera is facing given a direction and an up vector.- Parameters:
direction
- the direction this camera is facing.
-
setAxes
public void setAxes(Vector3f left, Vector3f up, Vector3f direction)
setAxes
sets the axes (left, up and direction) for this camera.- Parameters:
left
- the left axis of the camera.up
- the up axis of the camera.direction
- the direction the camera is facing.- See Also:
setAxes(com.jme.math.Quaternion)
-
setAxes
public void setAxes(Quaternion axes)
setAxes
uses a rotational matrix to set the axes of the camera.- Parameters:
axes
- the matrix that defines the orientation of the camera.
-
normalize
public void normalize()
normalize normalizes the camera vectors.
-
setFrustum
public void setFrustum(float near, float far, float left, float right, float top, float bottom)
setFrustum
sets the frustum of this camera object.- Parameters:
near
- the near plane.far
- the far plane.left
- the left plane.right
- the right plane.top
- the top plane.bottom
- the bottom plane.- See Also:
setFrustum(float, float, float, float, float, float)
-
setFrustumPerspective
public void setFrustumPerspective(float fovY, float aspect, float near, float far)
setFrustumPerspective
defines the frustum for the camera. This frustum is defined by a viewing angle, aspect ratio, and near/far planes- Parameters:
fovY
- Frame of view angle along the Y in degrees.aspect
- Width:Height rationear
- Near view plane distancefar
- Far view plane distance
-
setFrame
public void setFrame(Vector3f location, Vector3f left, Vector3f up, Vector3f direction)
setFrame
sets the orientation and location of the camera.- Parameters:
location
- the point position of the camera.left
- the left axis of the camera.up
- the up axis of the camera.direction
- the facing of the camera.- See Also:
setFrame(com.jme.math.Vector3f, com.jme.math.Vector3f, com.jme.math.Vector3f, com.jme.math.Vector3f)
-
lookAt
public void lookAt(Vector3f pos, Vector3f worldUpVector)
lookAt
is a convenience method for auto-setting the frame based on a world position the user desires the camera to look at. It repoints the camera towards the given position using the difference between the position and the current camera location as a direction vector and the worldUpVector to compute up and left camera vectors.- Parameters:
pos
- where to look at in terms of world coordinatesworldUpVector
- a normalized vector indicating the up direction of the world. (typically {0, 1, 0} in jME.)
-
setFrame
public void setFrame(Vector3f location, Quaternion axes)
setFrame
sets the orientation and location of the camera.- Parameters:
location
- the point position of the camera.axes
- the orientation of the camera.
-
update
public void update()
update
updates the camera parameters by callingonFrustumChange
,onViewPortChange
andonFrameChange
.- See Also:
update()
-
getPlaneState
public int getPlaneState()
getPlaneState
returns the state of the frustum planes. So checks can be made as to which frustum plane has been examined for culling thus far.- Returns:
- the current plane state int.
-
setPlaneState
public void setPlaneState(int planeState)
setPlaneState
sets the state to keep track of tested planes for culling.- Parameters:
planeState
- the updated state.
-
getViewPortLeft
public float getViewPortLeft()
getViewPortLeft
gets the left boundary of the viewport- Returns:
- the left boundary of the viewport
-
setViewPortLeft
public void setViewPortLeft(float left)
setViewPortLeft
sets the left boundary of the viewport- Parameters:
left
- the left boundary of the viewport
-
getViewPortRight
public float getViewPortRight()
getViewPortRight
gets the right boundary of the viewport- Returns:
- the right boundary of the viewport
-
setViewPortRight
public void setViewPortRight(float right)
setViewPortRight
sets the right boundary of the viewport- Parameters:
right
- the right boundary of the viewport
-
getViewPortTop
public float getViewPortTop()
getViewPortTop
gets the top boundary of the viewport- Returns:
- the top boundary of the viewport
-
setViewPortTop
public void setViewPortTop(float top)
setViewPortTop
sets the top boundary of the viewport- Parameters:
top
- the top boundary of the viewport
-
getViewPortBottom
public float getViewPortBottom()
getViewPortBottom
gets the bottom boundary of the viewport- Returns:
- the bottom boundary of the viewport
-
setViewPortBottom
public void setViewPortBottom(float bottom)
setViewPortBottom
sets the bottom boundary of the viewport- Parameters:
bottom
- the bottom boundary of the viewport
-
setViewPort
public void setViewPort(float left, float right, float bottom, float top)
setViewPort
sets the boundaries of the viewport- Parameters:
left
- the left boundary of the viewport (default: 0)right
- the right boundary of the viewport (default: 1)bottom
- the bottom boundary of the viewport (default: 0)top
- the top boundary of the viewport (default: 1)
-
distanceToNearPlane
public float distanceToNearPlane(Vector3f pos)
Returns the pseudo distance from the given position to the near plane of the camera. This is used for render queue sorting.- Parameters:
pos
- The position to compute a distance to.- Returns:
- Distance from the near plane to the point.
-
contains
public Camera.FrustumIntersect contains(BoundingVolume bound)
contains
tests a bounding volume against the planes of the camera's frustum. The frustum's planes are set such that the normals all face in towards the viewable scene. Therefore, if the bounding volume is on the negative side of the plane is can be culled out. NOTE: This method is used internally for culling, for public usage, the plane state of the bounding volume must be saved and restored, e.g:BoundingVolume bv;
Camera c;
int planeState = bv.getPlaneState();
bv.setPlaneState(0);
c.contains(bv);
bv.setPlaneState(plateState);
- Parameters:
bound
- the bound to check for culling- Returns:
- See enums in
FrustumIntersect
-
getWorldPlane
public Plane getWorldPlane(int planeId)
-
containsGui
public boolean containsGui(BoundingVolume bound)
containsGui
tests a bounding volume against the ortho bounding box of the camera. A bounding box spanning from 0, 0 to Width, Height. Constrained by the viewport settings on the camera.- Parameters:
bound
- the bound to check for culling- Returns:
- True if the camera contains the gui element bounding volume.
-
getViewMatrix
public Matrix4f getViewMatrix()
- Returns:
- the view matrix of the camera. The view matrix transforms world space into eye space. This matrix is usually defined by the position and orientation of the camera.
-
setProjectionMatrix
public void setProjectionMatrix(Matrix4f projMatrix)
Overrides the projection matrix used by the camera. Will use the matrix for computing the view projection matrix as well. Use null argument to return to normal functionality.- Parameters:
projMatrix
-
-
getProjectionMatrix
public Matrix4f getProjectionMatrix()
- Returns:
- the projection matrix of the camera. The view projection matrix transforms eye space into clip space. This matrix is usually defined by the viewport and perspective settings of the camera.
-
updateViewProjection
public void updateViewProjection()
Updates the view projection matrix.
-
getViewProjectionMatrix
public Matrix4f getViewProjectionMatrix()
- Returns:
- The result of multiplying the projection matrix by the view matrix. This matrix is required for rendering an object. It is precomputed so as to not compute it every time an object is rendered.
-
isViewportChanged
public boolean isViewportChanged()
- Returns:
- True if the viewport (width, height, left, right, bottom, up) has been changed. This is needed in the renderer so that the proper viewport can be set-up.
-
clearViewportChanged
public void clearViewportChanged()
Clears the viewport changed flag once it has been updated inside the renderer.
-
onViewPortChange
public void onViewPortChange()
Called when the viewport has been changed.
-
onFrustumChange
public void onFrustumChange()
onFrustumChange
updates the frustum to reflect any changes made to the planes. The new frustum values are kept in a temporary location for use when calculating the new frame. The projection matrix is updated to reflect the current values of the frustum.
-
onFrameChange
public void onFrameChange()
onFrameChange
updates the view frame of the camera.
-
isParallelProjection
public boolean isParallelProjection()
- Returns:
- true if parallel projection is enable, false if in normal perspective mode
- See Also:
setParallelProjection(boolean)
-
setParallelProjection
public void setParallelProjection(boolean value)
Enable/disable parallel projection.- Parameters:
value
- true to set up this camera for parallel projection is enable, false to enter normal perspective mode
-
getViewToProjectionZ
public float getViewToProjectionZ(float viewZPos)
Computes the z value in projection space from the z value in view space Note that the returned value is going non linearly from 0 to 1. for more explanations on non linear z buffer see http://www.sjbaker.org/steve/omniv/love_your_z_buffer.html- Parameters:
viewZPos
- the z value in view space.- Returns:
- the z value in projection space.
-
getWorldCoordinates
public Vector3f getWorldCoordinates(Vector2f screenPos, float projectionZPos)
Computes a position in World space given a screen position in screen space (0,0 to width, height) and a z position in projection space ( 0 to 1 non linear). This former value is also known as the Z buffer value or non linear depth buffer. for more explanations on non linear z buffer see http://www.sjbaker.org/steve/omniv/love_your_z_buffer.html To compute the projection space z from the view space z (distance from cam to object) @see Camera#getViewToProjectionZ- Parameters:
screenPos
- 2d coordinate in screen spaceprojectionZPos
- non linear z value in projection space- Returns:
- the position in world space.
-
getWorldCoordinates
public Vector3f getWorldCoordinates(Vector2f screenPosition, float projectionZPos, Vector3f store)
-
getScreenCoordinates
public Vector3f getScreenCoordinates(Vector3f worldPos)
Converts the given position from world space to screen space.
-
getScreenCoordinates
public Vector3f getScreenCoordinates(Vector3f worldPosition, Vector3f store)
Converts the given position from world space to screen space.- See Also:
getScreenCoordinates(Vector3f, Vector3f)
-
getWidth
public int getWidth()
- Returns:
- the width/resolution of the display.
-
getHeight
public int getHeight()
- Returns:
- the height/resolution of the display.
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
write
public void write(JmeExporter e) throws java.io.IOException
-
read
public void read(JmeImporter e) throws java.io.IOException
-
-


In 2007, two years after the Shadow Moses incident, Solid Snake - now working for a freelance organization known as Philanthropy - infiltrates the oil tanker U.S.S. Discovery, investigating the development of a new Metal Gear-type weapon. A confrontation with a Russian military group as well as an old acquaintance from Snake's past adventure leads to a massive detonation, after which Snake is presumed dead.
Fast-forward to the year 2009: the player takes control of Raiden, a rookie agent operating under the order of the Colonel, apparently member of a reformed Foxhound unit. His initial assignment is to infiltrate the offshore clean-up facility Big Shell and rescue the President of the United States of America, who was kidnapped by members of a terrorist organization known as Sons of Liberty. However, the matters become increasingly complicated as almost everyone Raiden communicates with appears to have a hidden agenda, and it is hard to tell a friend from foe...
Metal Gear Solid 2: Sons of Liberty is the fourth entry in Konami's Metal Gear series and continues to follow the exploits of Solid Snake, a legendary mercenary who's already foiled three devious and bizarre plots involving various incarnations of Metal Gear, a bipedal, nuclear-capable robot whose existence threatens to destabilize an already jittery near-future world. In Metal Gear Solid 2, Solid Snake is working for a fringe group known as Philanthropy, an organization devoted to the destruction of Metal Gear projects around the world. Thanks to the fallout from Snake's previous mission on Shadow Moses Island, any country with a decent bankroll now has access to Metal Gear technology. To combat this problem, the Marines have developed a new Metal Gear, known as Metal Gear Ray. Snake's mission is to infiltrate a tanker headed out to sea and obtain proof of the existence of this new Metal Gear, while keeping out of sight in the process.
Things soon take a turn for the worse as a rogue group of Russian soldiers take control of the tanker and its precious cargo. And thus begins Metal Gear Solid 2's plot, which features a cast of characters, new and old, wrapped around a core that is part military techno-thriller, part comic book heroics, and in keeping with the Metal Gear Solid tone, part philosophy.
Infiltration and stealth are of key importance to a successful mission, but there are also ample opportunities to cause death and destruction. The environments in Metal Gear Solid 2 are more interactive than its predecessor, as weapon fire damages windows and knocks items across the room. More precise sharp shooting is not only possible in this sequel, but also necessary at times. Of course, well-considered strategies and careful, stealthy execution are absolutely crucial to success.
The European version features The Making of Metal Gear Solid 2: Sons of Liberty as a bonus DVD.
Features:
128-bit continuation of Hideo Kojima's masterpiece series
Solid Snake performs somersaults, hangs from ledges, and uses disguises
Bullets damage rooms and characters leave footprints in interactive environment
Dynamic musical score by Harry Gregson-Williams
MANUFACTURER'S DESCRIPTION:
Solid Snake is back in th latest installment of the critically acclaimed series from director, Hideo Kojima. Top-secret weapons technology is being mysteriously transported under cover of an oil tanker to an unknown destination. Armed with an aresnal of new weapons, supplies, and steal manuevers, it's up to Snake to infiltrate the transport and keep this deadly weapon of mass destruction from falling into the wrong hands!
Features:
- New moves and infiltration methods, such as diving summersaults, hanging from ledges, and using disguises.
- Battle new, highly skilled opponents, as well as some returning vengeful foes.
- Fully interactive environment where bullets pierce steam pipes, smoke reveals laser beams and wet shoes leave footprints.
- Powerful musical score composed by Harry Gregson-Williams (Enemy of the State, Armageddon, The Rock).
FEATURES:
- Third & First person perspectives.
- 3D graphics
- Cartoon graphics
- Counter-terrorist theme.
|
|


|
#41
|
KahinaTextView/KahinaTextViewPanel don't support model changes
|
core
|
|
|
defect
|
jd
|
new
|
Oct 17, 2010
|
|
#28
|
Filter hidden steps from main tree view
|
core
|
|
|
enhancement
|
jd
|
new
|
Oct 11, 2010
|
|
#29
|
Blocked goals tree summary
|
core
|
|
|
enhancement
|
jd
|
new
|
Oct 11, 2010
|
|
#39
|
Keyboard shortcuts
|
core
|
|
|
enhancement
|
jd
|
assigned
|
Oct 16, 2010
|
|
#51
|
Saving and restoring user data
|
core
|
|
|
enhancement
|
jd
|
new
|
Nov 1, 2010
|
|
#54
|
build in a rudimentary online help system
|
core
|
|
|
enhancement
|
jd
|
new
|
Nov 2, 2010
|
|
#40
|
Chart display
|
trale-sld
|
|
|
task
|
jd
|
new
|
Oct 16, 2010
|
|
#20
|
Show solutions as complete parse trees
|
trale-sld
|
|
|
defect
|
ke
|
new
|
Apr 2, 2010
|
|
#25
|
Layered tree view needs rethinking
|
core
|
|
|
defect
|
jd
|
new
|
Sep 11, 2010
|
|
#58
|
source code highlighting
|
kahina-swi
|
|
|
defect
|
ke
|
new
|
Nov 6, 2010
|
|
#59
|
variable bindings on redo
|
kahina-swi
|
|
|
defect
|
ke
|
new
|
Nov 7, 2010
|
|
#61
|
marking the parent node is broken
|
core
|
|
|
defect
|
jd
|
new
|
May 13, 2011
|
|
#66
|
Closing GUI should lead to abortion, but (sometimes) leads to NullPointerException if done while fast-forwarding/auto-completing
|
core
|
|
|
defect
|
jd
|
new
|
Jul 22, 2011
|
|
#71
|
Step counters in window title and view title are inconsistent.
|
core
|
|
|
defect
|
jd
|
new
|
Sep 8, 2011
|
|
#72
|
No step counter when loading a session from a file
|
core
|
|
|
defect
|
jd
|
new
|
Sep 8, 2011
|
|
#104
|
Breakpoint (skip point, ...) editors show breakpoints (skip points, ...) from previous session
|
core
|
|
|
defect
|
jd
|
new
|
Dec 26, 2011
|
|
#105
|
rethink transmission of step information/step data to bridge
|
core
|
|
|
defect
|
jd
|
new
|
Dec 27, 2011
|
|
#109
|
breakpoints match too often
|
core
|
|
|
defect
|
jd
|
new
|
Dec 27, 2011
|
|
#120
|
Selecting a step with layer X in a list tree view panel with layer Y where X < Y should not change the root
|
core
|
|
|
defect
|
jd
|
new
|
Apr 4, 2012
|
|
#137
|
tree-node re-entrancies are not shown
|
trale-sld
|
|
|
defect
|
jd
|
new
|
Jul 23, 2013
|
|
#9
|
Explicitly visualize that different invocations of the same step belong together
|
core
|
|
|
enhancement
|
jd
|
assigned
|
Mar 16, 2010
|
|
#30
|
Tooltips for node labels
|
core
|
|
|
enhancement
|
jd
|
new
|
Oct 11, 2010
|
|
#33
|
Measure time in profiler
|
core
|
|
|
enhancement
|
jd
|
new
|
Oct 11, 2010
|
|
#36
|
Less failed edges
|
trale-sld
|
|
|
enhancement
|
jd
|
new
|
Oct 11, 2010
|
|
#42
|
Support multiple source files in TRALE's debugger
|
trale-sld
|
|
|
enhancement
|
jd
|
new
|
Oct 23, 2010
|
|
#43
|
Warn user of hidden features
|
trale-sld
|
|
|
enhancement
|
jd
|
new
|
Oct 23, 2010
|
|
#44
|
Keep zoom factor in feature structure view
|
trale-sld
|
|
|
enhancement
|
jd
|
assigned
|
Oct 23, 2010
|
|
#45
|
Source code view: open files as soon as they are used
|
core
|
|
|
enhancement
|
jd
|
new
|
Oct 23, 2010
|
|
#62
|
Handle TRALE errors and display them in Kahina
|
trale-sld
|
|
|
enhancement
|
jd
|
new
|
May 17, 2011
|
|
#107
|
unhide substructures that contain highlights by default
|
trale-sld
|
|
|
enhancement
|
jd
|
new
|
Dec 27, 2011
|
|
#108
|
preserve hide/show state of substructures as rendered by GraleJ
|
trale-sld
|
|
|
enhancement
|
jd
|
new
|
Dec 27, 2011
|


You are viewing an historical archive of past issues. Please report new issues to the appropriate project issue tracker on GitHub.
Comments
-
Greg Hurrell
Irrelevant because I removed the feeds feature. Closing.
-
Greg Hurrell
Status changed:
- From: open
- To: closed
Add a comment
Comments are now closed for this issue.


NIF Objects | Compound Types | Enum Types | Basic Types | File Versions
| Number | Name | Description |
|---|---|---|
| 0x00000001 | SLSF2_ZBuffer_Write | Enables writing to the Z-Buffer |
| 0x00000002 | SLSF2_LOD_Landscape | SLSF2_LOD_Landscape |
| 0x00000004 | SLSF2_LOD_Objects | SLSF2_LOD_Objects |
| 0x00000008 | SLSF2_No_Fade | SLSF2_No_Fade |
| 0x00000010 | SLSF2_Double_Sided | Double-sided rendering. |
| 0x00000020 | SLSF2_Vertex_Colors | Has Vertex Colors. |
| 0x00000040 | SLSF2_Glow_Map | Use Glow Map in the third texture slot. |
| 0x00000080 | SLSF2_Assume_Shadowmask | SLSF2_Assume_Shadowmask |
| 0x00000100 | SLSF2_Packed_Tangent | SLSF2_Packed_Tangent |
| 0x00000200 | SLSF2_Multi_Index_Snow | SLSF2_Multi_Index_Snow |
| 0x00000400 | SLSF2_Vertex_Lighting | SLSF2_Vertex_Lighting |
| 0x00000800 | SLSF2_Uniform_Scale | SLSF2_Uniform_Scale |
| 0x00001000 | SLSF2_Fit_Slope | SLSF2_Fit_Slope |
| 0x00002000 | SLSF2_Billboard | SLSF2_Billboard |
| 0x00004000 | SLSF2_No_LOD_Land_Blend | SLSF2_No_LOD_Land_Blend |
| 0x00008000 | SLSF2_EnvMap_Light_Fade | SLSF2_EnvMap_Light_Fade |
| 0x00010000 | SLSF2_Wireframe | Wireframe (Seems to only work on particles) |
| 0x00020000 | SLSF2_Weapon_Blood | Used for blood decals on weapons. |
| 0x00040000 | SLSF2_Hide_On_Local_Map | Similar to hide secret, but only for self? |
| 0x00080000 | SLSF2_Premult_Alpha | Has Premultiplied Alpha |
| 0x00100000 | SLSF2_Cloud_LOD | SLSF2_Cloud_LOD |
| 0x00200000 | SLSF2_Anisotropic_Lighting | Hair only? |
| 0x00400000 | SLSF2_No_Transparency_Multisampling | SLSF2_No_Transparency_Multisampling |
| 0x00800000 | SLSF2_Unused01 | Unused? |
| 0x01000000 | SLSF2_Multi_Layer_Parallax | Use Multilayer (inner-layer) Map |
| 0x02000000 | SLSF2_Soft_Lighting | Use Soft Lighting Map |
| 0x04000000 | SLSF2_Rim_Lighting | Use Rim Lighting Map |
| 0x08000000 | SLSF2_Back_Lighting | Use Back Lighting Map |
| 0x10000000 | SLSF2_Unused02 | Unused? |
| 0x20000000 | SLSF2_Tree_Anim | Enables Vertex Animation, Flutter Animation |
| 0x40000000 | SLSF2_Effect_Lighting | SLSF2_Effect_Lighting |
| 0x80000000 | SLSF2_HD_LOD_Objects | SLSF2_HD_LOD_Objects |


Products - Other Chemicals ('Stain Remover', speculated to be 4-Methylmethcathinone)
I do not know exactly what is in the legally obtained packet that I have now sampled on 4 different occasions. That’s a little frustrating, that in this nudge-nudge-wink-wink fringe legality that we are currently dealing with, the information available on the products is limited—one thing this isn’t is what it is labeled as, which is stain remover. Anyway, broadly speaking, it is Meow. It is an absolutely wonderful addition to my life, and I will be using it regularly.
I have insufflated it and I have mixed it with water and drunk it. I will discuss drinking it (250 mg of the particular brand I have been using mixed with cup or so of water, down it all at once), which gives what I think is a stronger high, and it also gives me a moment of fairly strong nausea about a half-hour after consumption. I haven’t yet actually succumbed and puked, but it’s something I’m coming to realize is part of the deal if I drink this stuff. No big deal—I’m actually already high by then and feeling like all is right, so I just take this nausea in stride, and it passes pretty quickly. Still—I won’t drink it on an empty stomach. The other physiological reactions I note are sweating pretty profusely during the initial rush, and a bit of heart racing.
It comes on strong and fast—15 minutes after drinking it, I’m feeling it, 20 minutes is stronger still, and it continues to increase up to about 40 minutes after consumption, when it levels off for a great, ecstasy-like ride that lasts until about two hours after consumption. I don’t note the same abrupt comedown that others do, it fades out nicely for me. I am able to resist any urge to redose—or give in to that urge, as the situation calls for.
Among the features of the high for me—keeping in mind, this is drinking it mixed with water, and I do think that produces a different high than insufflating—are: A rather interesting time distortion during the first rush—moments linger as time slows down. A strong mood elevation—life is good, and this reminds me that I know that. I want to tell the people I love that I really do love them. Music, which can be the foreground of many highs for this music lover, fades to the background while I contemplate life and love and friendship. There are no visual or aural hallucinations, and this is not a psychedelic experience, it’s a bliss thing.
I don’t lose touch with reality, but am rather overwhelmed by reality’s silver lining.
As I write this, I have obtained this legally, in a perfectly above-board commercial transaction, using a credit card. I want this situation to continue [...] This stuff is pretty strong.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


You need to use a browser that supports Javascript and AJAX.
Download
Upload
Both
Stop
Download Stress
Upload Stress
CSV
Clear results
Running test:
Upload
Download
Download/Upload
None
Started
Direction
Size
Downloaded
Time (sec)
Speed
%


Edit Currency
Save
Currenct Info
Pick a Currency
Amount
Buy price
{{CNY}}
{{totalOrPer}}
Bount on
{{bount}}
Stored/Kept In
Exchange
Wallet
Note


Enable report by default and switch to using maxmin
v0.1.6
Upgrades to UnCSS 0.6.2 - brings stable support for PhantomJS and processing dynamically injected CSS via JavaScript,
a better selector engine (CSSSelect via cheerio)
Now supports csspath, ignore, raw, timeout options
Improved support for multiple files, general stability fixes with issues upstream now fixed
Added new suite of unit tests. Run with grunt test
README.md now includes links to articles, videos, a better Bootstrap 3 example
General improvements to sample Gruntfile.js (processhtml, cssmin, load-grunt-tasks)


How we use Cookies
Cookies are very small text files that are stored on your computer when you visit some websites.
We use cookies to help identify your computer so we can tailor your user experience, track shopping basket contents and remember where you are in the order process.
You can disable any cookies already stored on your computer, but these may stop our website from functioning properly.
The following is strictly necessary in the operation of our website.
This Website Will:
- Remember what is in your shopping basket
- Remember where you are in the order process
- Remember that you are logged in and that your session is secure. You need to be logged in to complete an order.
The following are not Strictly Necessary, but are required to provide you with the best user experience and also to tell us which pages you find most interesting (anonymously).
Functional Cookies
This Website Will:
- Offer Live Chat Support (If available)
- Track the pages you visits via Google Analytics
Targeting Cookies
This Website Will:
- Allow you to share pages with social networks such as Facebook (If available)
- Allow you to share pages via Add This (If available)
This website will not
- Share any personal information with third parties.


Built-In Operations
What is an Infix operation?
It is a math expression with an operator in the middle and two operands, one on each side of the operator. Here are some examples.
1 + 2
1 + 2 + 3
2 + 5 * 4
1 > 2 or 3 > 2
(1 + 2) * 3
1 * -1
Infix operation can be chained as the examples shown above. When chained, the precedence of the operator will decide who gets executed first. If two operator has the same precedence, the operator should be executed from left to right. For example 2 + 5 * 4
will execute 5 * 4
first because the *
operator has a precedence of 200 which is larger than the precedence of the +
operator. The +
operator will then execute 2 + 20
. The second operand 20
comes from the output of the *
operator.
The parentheses can be used to supersede the precedence of the operators as show in #5.
A unary operator such as the negative sign in #6 will always have precedence over any infix operators.


Peyton Kathleen Marmoll
Home
About Me
Education
Relevant Coursework
Resume
Achievements
Photos
Travel
Goals
Contact Me
Photos