   From AwtRenderingEngine.java

private int xScreenCenter = 320/2;

private int yScreenCenter = 240/2;

private Vector3d screenPosition = new Vector3d( 0, 0, 20 ); private Vector3d viewAngle = new Vector3d( 0, 90, 180 ); private static final double DEG_TO_RAD = 0.017453292; private double modelScale = 10;

CT = Math.cos( DEG_TO_RAD * viewAngle.x ); ST = Math.sin( DEG_TO_RAD * viewAngle.x ); CP = Math.cos( DEG_TO_RAD * viewAngle.y ); SP = Math.sin( DEG_TO_RAD * viewAngle.y );

public void projectPoint( Point3d input, Point3d output )

{

double x = screenPosition.x + input.x * CT − input.y * ST;

double y = screenPosition.y + input.x * ST * SP + input.y * CT * SP

+ input.z * CP;

double temp = viewAngle.z / (screenPosition.z + input.x * ST * CP

+ input.y * CT * CP − input.z * SP );

output.x = xScreenCenter + modelScale * temp * x; output.y = yScreenCenter − modelScale * temp * y; output.z = 0;

} Let’s quickly project some points using this routine to see if it makes sense. The result of running seven 3D points through the projectPoint method is listed in table 2.1.

CT: 1

ST: 0

SP: 1

CP: 0

Table 2.1 Sample output from the projectPoint method to project points from 3D−world coordinates to 2D−screen coordinates

 WX WY WZ SX SY 1 1 0 250 30 −1 1 0 70 30 1 −1 0 250 210 −1 −1 0 70 210 0 0 0 160 120 1 1 1 255 25 −1 −1 1 65 215 Figure 2.3 The positions of some projected points

Plotting these points by hand using a 2D graphics program (figure 2.3), you can see that they seem to make sense. Projecting the point 0,0,0 places a point at the center of the screen (160,120). While you have symmetry about the corners of the cube, increasing the Z−coordinate appears to move the two opposing corners (1,1,1 and −1,−1,1) closer to the viewer.

Taking a look at the projectPoint function again, you can see it uses the following parameters:

Input point x, y, and z coordinates

Center of the screen

Sin and cosine of the viewer’s angle of view

Distance of the screen from the viewer

Model scaling factor

This very simple projection function is adequate for simple 3D projection. As you become more familiar with Java 3D, you will see that it includes far more powerful projection abilities. These allow you to render to stereo displays (such as head−mounted displays) or perform parallel projections. (In parallel projections, parallel lines remain parallel after projection.)

 Impressum und Datenschutz    Copyright ©2018 eir.me Siebel Articles Python Perl 5 Documentation Manuel PHP7 français Java Das PHP7 Handbuch PHP7 Manual English Linux and Unix Jobs