@@ -224,6 +224,12 @@ public class PGraphicsOpenGL extends PGraphics {
224
224
/** Aspect ratio of camera's view. */
225
225
public float cameraAspect ;
226
226
227
+ /** Default camera properties. */
228
+ public float defCameraFOV ;
229
+ public float defCameraX , defCameraY , defCameraZ ;
230
+ public float defCameraNear , defCameraFar ;
231
+ public float defCameraAspect ;
232
+
227
233
/** Distance between camera eye and center. */
228
234
protected float eyeDist ;
229
235
@@ -594,13 +600,21 @@ public void setSize(int iwidth, int iheight) {
594
600
updatePixelSize ();
595
601
596
602
// init perspective projection based on new dimensions
597
- cameraFOV = 60 * DEG_TO_RAD ; // at least for now
598
- cameraX = width / 2.0f ;
599
- cameraY = height / 2.0f ;
600
- cameraZ = cameraY / ((float ) Math .tan (cameraFOV / 2.0f ));
601
- cameraNear = cameraZ / 10.0f ;
602
- cameraFar = cameraZ * 10.0f ;
603
- cameraAspect = (float ) width / (float ) height ;
603
+ defCameraFOV = 60 * DEG_TO_RAD ; // at least for now
604
+ defCameraX = width / 2.0f ;
605
+ defCameraY = height / 2.0f ;
606
+ defCameraZ = defCameraY / ((float ) Math .tan (defCameraFOV / 2.0f ));
607
+ defCameraNear = defCameraZ / 10.0f ;
608
+ defCameraFar = defCameraZ * 10.0f ;
609
+ defCameraAspect = (float ) width / (float ) height ;
610
+
611
+ cameraFOV = defCameraFOV ;
612
+ cameraX = defCameraX ;
613
+ cameraY = defCameraY ;
614
+ cameraZ = defCameraZ ;
615
+ cameraNear = defCameraNear ;
616
+ cameraFar = defCameraFar ;
617
+ cameraAspect = defCameraAspect ;
604
618
605
619
sized = true ;
606
620
}
@@ -4334,7 +4348,8 @@ public void endCamera() {
4334
4348
*/
4335
4349
@ Override
4336
4350
public void camera () {
4337
- camera (cameraX , cameraY , cameraZ , cameraX , cameraY , 0 , 0 , 1 , 0 );
4351
+ camera (defCameraX , defCameraY , defCameraZ , defCameraX , defCameraY ,
4352
+ 0 , 0 , 1 , 0 );
4338
4353
}
4339
4354
4340
4355
@@ -4398,6 +4413,10 @@ public void camera() {
4398
4413
public void camera (float eyeX , float eyeY , float eyeZ ,
4399
4414
float centerX , float centerY , float centerZ ,
4400
4415
float upX , float upY , float upZ ) {
4416
+ cameraX = eyeX ;
4417
+ cameraY = eyeY ;
4418
+ cameraZ = eyeZ ;
4419
+
4401
4420
// Calculating Z vector
4402
4421
float z0 = eyeX - centerX ;
4403
4422
float z1 = eyeY - centerY ;
@@ -4555,7 +4574,7 @@ public void ortho(float left, float right,
4555
4574
*/
4556
4575
@ Override
4557
4576
public void perspective () {
4558
- perspective (cameraFOV , cameraAspect , cameraNear , cameraFar );
4577
+ perspective (defCameraFOV , defCameraAspect , defCameraNear , defCameraFar );
4559
4578
}
4560
4579
4561
4580
@@ -4584,6 +4603,11 @@ public void frustum(float left, float right, float bottom, float top,
4584
4603
// Flushing geometry with a different perspective configuration.
4585
4604
flush ();
4586
4605
4606
+ cameraFOV = 2 * (float ) Math .atan2 (top , znear );
4607
+ cameraAspect = left / bottom ;
4608
+ cameraNear = znear ;
4609
+ cameraFar = zfar ;
4610
+
4587
4611
float n2 = 2 * znear ;
4588
4612
float w = right - left ;
4589
4613
float h = top - bottom ;
@@ -6819,6 +6843,8 @@ protected void setGLSettings() {
6819
6843
normalX = normalY = 0 ;
6820
6844
normalZ = 1 ;
6821
6845
6846
+ pgl .clearDepthStencil ();
6847
+
6822
6848
// Clear depth and stencil buffers.
6823
6849
pgl .depthMask (true );
6824
6850
pgl .clearDepth (1 );
@@ -8378,9 +8404,9 @@ void addTrianglesEdges() {
8378
8404
int i1 = 3 * i + 1 ;
8379
8405
int i2 = 3 * i + 2 ;
8380
8406
8381
- addEdge (i0 , i1 , true , false );
8407
+ addEdge (i0 , i1 , true , false );
8382
8408
addEdge (i1 , i2 , false , false );
8383
- addEdge (i2 , i0 , false , false );
8409
+ addEdge (i2 , i0 , false , false );
8384
8410
closeEdge (i2 , i0 );
8385
8411
}
8386
8412
}
@@ -8391,9 +8417,9 @@ void addTriangleFanEdges() {
8391
8417
int i1 = i ;
8392
8418
int i2 = i + 1 ;
8393
8419
8394
- addEdge (i0 , i1 , true , false );
8420
+ addEdge (i0 , i1 , true , false );
8395
8421
addEdge (i1 , i2 , false , false );
8396
- addEdge (i2 , i0 , false , false );
8422
+ addEdge (i2 , i0 , false , false );
8397
8423
closeEdge (i2 , i0 );
8398
8424
}
8399
8425
}
@@ -8410,9 +8436,9 @@ void addTriangleStripEdges() {
8410
8436
i2 = i - 1 ;
8411
8437
}
8412
8438
8413
- addEdge (i0 , i1 , true , false );
8439
+ addEdge (i0 , i1 , true , false );
8414
8440
addEdge (i1 , i2 , false , false );
8415
- addEdge (i2 , i0 , false , false );
8441
+ addEdge (i2 , i0 , false , false );
8416
8442
closeEdge (i2 , i0 );
8417
8443
}
8418
8444
}
@@ -8424,10 +8450,10 @@ void addQuadsEdges() {
8424
8450
int i2 = 4 * i + 2 ;
8425
8451
int i3 = 4 * i + 3 ;
8426
8452
8427
- addEdge (i0 , i1 , true , false );
8453
+ addEdge (i0 , i1 , true , false );
8428
8454
addEdge (i1 , i2 , false , false );
8429
- addEdge (i2 , i3 , false , false );
8430
- addEdge (i3 , i0 , false , false );
8455
+ addEdge (i2 , i3 , false , false );
8456
+ addEdge (i3 , i0 , false , false );
8431
8457
closeEdge (i3 , i0 );
8432
8458
}
8433
8459
}
@@ -8439,10 +8465,10 @@ void addQuadStripEdges() {
8439
8465
int i2 = 2 * qd + 1 ;
8440
8466
int i3 = 2 * qd ;
8441
8467
8442
- addEdge (i0 , i1 , true , false );
8468
+ addEdge (i0 , i1 , true , false );
8443
8469
addEdge (i1 , i2 , false , false );
8444
- addEdge (i2 , i3 , false , false );
8445
- addEdge (i3 , i0 , false , true );
8470
+ addEdge (i2 , i3 , false , false );
8471
+ addEdge (i3 , i0 , false , false );
8446
8472
closeEdge (i3 , i0 );
8447
8473
}
8448
8474
}
0 commit comments