•

Check out our Community Blogs

# Belos

Member Since 20 Jun 2012
Offline Last Active Jun 21 2012 08:37 AM

### Technical 3D Perspective Projection Question

20 June 2012 - 04:24 PM

I have a problem with perspective projection, In order to display a 3D object on screen, I have to do the following:
• Perform model transformation matrix * p, resulting in pm.
• Perform projection matrix * pm, resulting in pp.
• Perform viewport transformation matrix * pp, resulting is ps: point on screen

I did and used the following code to get the perspective projection:

```public static Matrix3D ProjectionMatrix(double angle, double aspect, double near, double far)
{
double size = near * Math.Tan(MathUtils.DegreeToRadian(angle) / 2.0);
double left = -size, right = size, bottom = -size / aspect, top = size / aspect;
Matrix3D m = new Matrix3D(new double[,] {
{2*near/(right-left),0,(right + left)/(right - left),0},
{0,2*near/(top-bottom),(top+bottom)/(top-bottom),0},
{0,0,-(far+near)/(far-near),-(2 * far * near) / (far - near)},
{0,0,-1,0}
});
return m;
}
```

and used the following code to get the camera:

```Matrix3D Camera
{
get
{
Vector3D cameraZAxis = -this.LookDirection;
cameraZAxis.Normalize();[/background]
Vector3D cameraXAxis = Vector3D.CrossProduct(this.UpDirection, cameraZAxis);
cameraXAxis.Normalize();
Vector3D cameraYAxis = Vector3D.CrossProduct(cameraZAxis, cameraXAxis);
Vector3D cameraPosition = (Vector3D)this.Position;
double offsetX = -Vector3D.DotProduct(cameraXAxis, cameraPosition);
double offsetY = -Vector3D.DotProduct(cameraYAxis, cameraPosition);
double offsetZ = -Vector3D.DotProduct(cameraZAxis, cameraPosition);
return new Matrix3D(new double[,]{{cameraXAxis.X, cameraYAxis.X, cameraZAxis.X, 0},
{cameraXAxis.Y, cameraYAxis.Y, cameraZAxis.Y, 0},
{cameraXAxis.Z, cameraYAxis.Z, cameraZAxis.Z, 0},
{offsetX, offsetY, offsetZ, 1}});
}
}
```

The default camera matrix is

{-1,0,0,0},

{0,1,0,0},

{0,0,-1,0},

{0,0,0,1}

after I multiply the three matrices(the third is the model matrix) by the point and the resulting W in the point is very huge like 13000 so I am very confused right now!!

the model matrix is

{0,0,0,100}

{0,0,0,100}

{0,0,0,100}

{0,0,0,1}

Can you tell me where I have gone wrong?
[background=transparent]
note: this is not xna

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download