Я розгортаю свій власний 3D-движок у JavaScript і використовую лише малюнок на полотні, не WebGL. Це ще один клон Minecraft; Я люблю коробки, не судіть мене.
Поки все працює чудово, за винятком однієї речі: у 3D, коли деякі вершини йдуть за близькою площиною відсікання, їх проекція на екран виходить дивною (припускаючи, що інші вершини, які використовуються для відстеження площини, знаходяться попереду).
Я спробував вирізати ці точки, але тоді я бачу корита поверхонь, які використовують ці вершини. У WebGL / OpenGL відеокарта опікується цими точками, і літак відображається правильно, але я не маю доступу до обладнання, тому я повинен сам це кодувати.
Я не зовсім впевнений, що з цього зробити, на даний момент останнє, що мені прийшло в голову, - це повернути проекцію очок за площиною відсікання гравця, що здається логічним, оскільки я повинен спроектувати точку на екран, який знаходиться попереду. вершини.
Ось мої думки:
Ось кілька зображень для ілюстрації того, що відбувається:
Здалеку блакитна скринька виглядає ідеально добре.
Коли деякі вершини йдуть за близькою площиною відсікання гравця, я роблю зворотну проекцію, але це не виглядає правильно:
focalLength *= -1;
2d.x = x*focalLength/z;
2d.y = y*focalLength/z;
Зауважте, що сіре поле позаду повністю видалено, оскільки всі вершини, які використовуються для малювання його облич, знаходяться позаду гравця.
Це те, що відбувається при погляді вгору або вниз.
Я не знаю, що робити з цього питання, я сподіваюся, що хтось уже стикався з тією ж проблемою і може допомогти мені.
lineTo(x,y)
функцію все-таки можна було викликати, тільки я не знаю, як вона поводиться ... це причудливий вимір, я згоден.