JoseMY
April 5, 2021, 12:29pm
1
Hi!
I designed a 3D sign using PSHAPE on a P3D environment.
The problem is I want to use it in a mixed 2D/3D environment
/*
displaying text or 2d graphics on a 3d canvas is a pain.
But we can cast a 3d canvas inside a 2d canvas.
*/
size(1000,1000,P2D);
/* .... */
PGraphics canvas3d=createGraphics(1000,1000,P2D);
As main renderer (size) is 2d, I can’t rotateX my shape.
Is there a way for me to access the 3d renderer inside PGraphics to rotate the shape there?
Can I do canvas3d.shape(myshape.rotateX(HALF_PI))?
Yours,
José.
below is an example
BUT it might be easier to use #9 from 25 life-saving tips for Processing | Amnon P5 - Experiments with Processing by Amnon Owed
Example
here I used canvas3d=createGraphics(500, 500, P3D); not P2D
(the Sketch itself is P2D of course)
/*
displaying text or 2d graphics on a 3d canvas is a pain.
But we can cast a 3d canvas inside a 2d canvas.
*/
PGraphics canvas3d;
float a1=0.77;
void setup() {
size(1000, 1000, P2D);
/* .... */
canvas3d=createGraphics(500, 500, P3D);
}
void draw() {
background(0);
canvas3d.beginDraw();
canvas3d.background(100);
canvas3d.lights();
canvas3d.translate(canvas3d.width/2, canvas3d.height/2);
canvas3d.rotateX(a1);
canvas3d.stroke(255);
canvas3d.fill(255, 0, 0);
canvas3d.box(22);
a1+=0.014;
canvas3d.line(20, 20, 100, 100);
canvas3d.endDraw();
image(canvas3d, 9, 30);
text("Yes", 669, 30);
}
//
JoseMY
April 5, 2021, 1:52pm
3
Hi, Chris. Thank for your solution.
But I don’t want to rotate the cancas, only the PShape.
At least with Scale, the results from:
myshape.resize(newsize);
camera....
Rotate...
Scale...
pushMatrix();
Translate ...
shape(myshape);
PopMatrix();
And:
;
camera....
Rotate...
Scale...
pushMatrix();
Translate ...
scale...
shape(myshape);
PopMatrix();
Are different.
I am creating the shape in a position from a map. That is the reason I can’t rotate the shape before other scales or rotations take place.
ahah I just posted the same answer a minute ago!
Hi @KelvinLamptey ,
Welcome to the forum!
Drawing 2d shapes in 3d mode is not specific to Android so the following code also works in Processing Java.
In order to do that, you need to draw your 3d shapes on a separate PGraphics() buffer that you can then display on your 2D canvas. Doing the opposite doesn’t work since drawing an image in 3d space is going to intersect with the 3d shapes you draw.
float angle = 0;
PGraphics canvas3D;
void setup() {
size(300, 300, P2D);
canvas3D =…
1 Like
I can’t help you with that. Maybe we mean two different things.
I don’t rotate the canvas, I rotate the cube / shape on the canvas; you can change the rotation and implement scale
1 Like