Revision 98455aa2
Added by Leszek Koltunski almost 9 years ago
| src/main/java/org/distorted/library/Distorted.java | ||
|---|---|---|
| 91 | 91 |
static int mTextureCoordH; // pass in model texture coordinate information. |
| 92 | 92 |
static int mProgramH; // This is a handle to our shading program. |
| 93 | 93 |
|
| 94 |
static DistortedFramebuffer mFramebuffer = new DistortedFramebuffer(0); |
|
| 94 |
static DistortedFramebuffer mFramebuffer = new DistortedFramebuffer(0); // output to the screen
|
|
| 95 | 95 |
|
| 96 | 96 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 97 | 97 |
|
| ... | ... | |
| 284 | 284 |
// Public API |
| 285 | 285 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 286 | 286 |
/** |
| 287 |
* Sets Vertical Field of View angle. This changes the Projection Matrix.
|
|
| 287 |
* Sets Vertical Field of View angle and the point the camera is looking at. This changes the Projection Matrix.
|
|
| 288 | 288 |
* |
| 289 | 289 |
* @param fov Vertical Field Of View angle, in degrees. If T is the middle of the top edge of the |
| 290 | 290 |
* screen, E is the eye point, and B is the middle of the bottom edge of the screen, then |
| 291 | 291 |
* fov = angle(TEB) |
| 292 |
* @param x X-coordinate of the point the camera is looking at. -scrWidth/2 < x < scrWidth/2 |
|
| 293 |
* @param y Y-coordinate of the point the camera is looking at. -scrHeight/2 < y < scrHeight/2 |
|
| 292 | 294 |
*/ |
| 293 |
public static void setFov(float fov)
|
|
| 295 |
public static void setProjection(float fov, float x, float y)
|
|
| 294 | 296 |
{
|
| 295 |
mFramebuffer.setProjection(fov,0.0f,0.0f);
|
|
| 297 |
mFramebuffer.setProjection(fov,x,y);
|
|
| 296 | 298 |
} |
| 297 | 299 |
|
| 298 | 300 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| src/main/java/org/distorted/library/DistortedFramebuffer.java | ||
|---|---|---|
| 63 | 63 |
|
| 64 | 64 |
private void createProjection() |
| 65 | 65 |
{
|
| 66 |
if( mFOV>0.0f ) // perspective projection
|
|
| 66 |
if( mWidth>0 && mHeight>0 )
|
|
| 67 | 67 |
{
|
| 68 |
float ratio = (float) mWidth / mHeight; |
|
| 69 |
float left =-ratio; |
|
| 70 |
float right = ratio; |
|
| 71 |
float bottom = -1.0f; |
|
| 72 |
float top = 1.0f; |
|
| 73 |
float near= (float)(top / Math.tan(mFOV*Math.PI/360)); |
|
| 74 |
mDistance = (int)(mHeight*near/(top-bottom)); |
|
| 75 |
float far = 2*mDistance-near; |
|
| 76 |
mDepth = (int)((far-near)/2); |
|
| 77 |
|
|
| 78 |
if( far<=0 ) |
|
| 68 |
if( mFOV>0.0f ) // perspective projection |
|
| 79 | 69 |
{
|
| 80 |
android.util.Log.e("FBO", "error: far<=0. width="+mWidth+" height="+mHeight+
|
|
| 81 |
" mFOV="+mFOV+" mDistance="+mDistance+" far="+far+" near="+near); |
|
| 82 |
} |
|
| 83 |
else |
|
| 70 |
float left =(-mX-mWidth )/mHeight; |
|
| 71 |
float right =(-mX+mWidth )/mHeight; |
|
| 72 |
float bottom =(-mY-mHeight)/mHeight; |
|
| 73 |
float top =(-mY+mHeight)/mHeight; |
|
| 74 |
float near= (float)( (top-bottom) / (2*Math.tan(mFOV*Math.PI/360)) ); |
|
| 75 |
mDistance = (int)(mHeight*near/(top-bottom)); |
|
| 76 |
float far = 2*mDistance-near; |
|
| 77 |
mDepth = (int)((far-near)/2); |
|
| 78 |
|
|
| 84 | 79 |
Matrix.frustumM(mProjectionMatrix, 0, left, right, bottom, top, near, far); |
| 85 |
} |
|
| 86 |
else // parallel projection |
|
| 87 |
{
|
|
| 88 |
float left =-mWidth/2; |
|
| 89 |
float right = mWidth/2; |
|
| 90 |
float bottom =-mHeight/2; |
|
| 91 |
float top = mHeight/2; |
|
| 92 |
float near= (float)(top / Math.tan(Math.PI/360)); |
|
| 93 |
mDistance = (int)(mHeight*near/(top-bottom)); |
|
| 94 |
float far = 2*mDistance-near; |
|
| 95 |
mDepth = (int)((far-near)/2); |
|
| 96 |
|
|
| 97 |
Matrix.orthoM(mProjectionMatrix, 0, left, right, bottom, top, near, far); |
|
| 80 |
} |
|
| 81 |
else // parallel projection |
|
| 82 |
{
|
|
| 83 |
float left =-mX-mWidth/2; |
|
| 84 |
float right =-mX+mWidth/2; |
|
| 85 |
float bottom =-mY-mHeight/2; |
|
| 86 |
float top =-mY+mHeight/2; |
|
| 87 |
float near= (float)( (top-bottom) / (2*Math.tan(Math.PI/360)) ); |
|
| 88 |
mDistance = (int)(mHeight*near/(top-bottom)); |
|
| 89 |
float far = 2*mDistance-near; |
|
| 90 |
mDepth = (int)((far-near)/2); |
|
| 91 |
|
|
| 92 |
Matrix.orthoM(mProjectionMatrix, 0, left, right, bottom, top, near, far); |
|
| 93 |
} |
|
| 98 | 94 |
} |
| 99 | 95 |
} |
| 100 | 96 |
|
| src/main/java/org/distorted/library/EffectTypes.java | ||
|---|---|---|
| 63 | 63 |
// EffectQueueMatrix.setMax(int) |
| 64 | 64 |
|
| 65 | 65 |
maxtable[1] = 5; // Max 5 VERTEX Effects |
| 66 |
maxtable[2] = 3; // Max 3 FRAGMENT Effects
|
|
| 66 |
maxtable[2] = 5; // Max 3 FRAGMENT Effects
|
|
| 67 | 67 |
} |
| 68 | 68 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 69 | 69 |
} |
Also available in: Unified diff
Turn the former 'FOV' app into 'Projection' app that also checks the (x,y) the camera looks at.