p5. js WebGL 3d-графика покрыта 2d-фоном при повороте - PullRequest
0 голосов
/ 20 марта 2020

У меня есть две вещи, которые я хочу отобразить с помощью p5, одна - это 2D-фон, а другая - передний план 3D WebGL, обе сгенерированы с помощью p5. Я заметил, что даже если я рисую 2D-фон перед 3D-компонентом в функции draw(), 3D-компонент все равно будет частично покрываться фоном при вызове rotateX() или rotateY(). Это выглядит примерно так:

enter image description here

Я подозреваю, что 2d и 3d объекты находятся в одной и той же z-плоскости, поэтому, когда передний план поворачивается, часть покрывается фоном, который теперь находится спереди по сравнению с покрытыми частями.

Таким образом, мой вопрос заключается в том, как сохранить фон полностью сзади (т.е. не покрывая передний план независимо от поворота)?

Ниже моей текущей реализации, 2d фон генерируется в закадровый холст затем поместите на основной холст с помощью image(), где генерируется материал 3d, но я воспользуюсь другими подходами.

let bg;
p.setup = () => {
    p.createCanvas(width,height,p.WEBGL);
    bg = p.createGraphics(width,height);
}

p.draw = () => {
    ... // draw background bg
    p.image(bg,x,y); // draw background on canvas

    ... // draw foreground
    p.rotateX(degrees);//rotate
}
...