processing / processing/processing4

Flat rendering on PGraphics3D of PShapes created from PGraphics2D

Open
#833 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug core
Dominant language
Java
Stars
494
Forks
183
Avg merge
4h 39m
Merged PRs (30d)
3

Description

Created by: onimatrix

Calling createShape() directly will use the Applet renderer.
If this renderer is set to be of type P2D, the resulting shape seems to ignore any z value set to it's vertices.
I'm guessing that this shape contains some optimizations aimed at 2D rendering.

There should be a warning when using this kind of "flat" PShape on a P3D renderer.
Maybe even a different PShape class to make it foolproof.
Also, it would be great if 3D PShapes could be created without needing to reference a PGraphics3D that is in the "draw state".

Here's a piece of code to replicate the issue:

PGraphics g3D;
PShape shape;

void setup()
{
  size(800, 600, P2D);
  g3D = createGraphics(width, height, P3D);
  
  //g3D.beginDraw(); // uncomment to fix flatness
    shape = createShape(); // change to g3D.createShape(); to fix flatness
  //g3D.endDraw(); // uncomment to fix flatness

  shape.beginShape(LINE_STRIP);
    shape.vertex(0, 0, 0);
    shape.vertex(200, 0, 0);
    shape.vertex(200, 0, 200);
  shape.endShape(CLOSE);
}

void draw()
{
  g3D.beginDraw();
    g3D.background(255);
    g3D.translate(width / 2, height / 3, 0);
    g3D.rotateY(((frameCount % 400) / 400.0f) * TWO_PI);
    g3D.shape(shape);
  g3D.endDraw();
  
  image(g3D, 0, 0, width, height);
}
  • Processing version: 4.2
  • Operating System and OS version: Windows 10

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by running the supplied sketch and compare createShape() with g3D.createShape(), including the beginDraw() case. Trace the createShape(), PGraphics2D, PGraphics3D, and PShape entry points to determine where the flat shape is selected; done means the P3D use case is handled explicitly, with the requested warning or a clearly supported 3D-shape creation path.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
computer-graphics
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.