Я пытаюсь создать игру в стиле вокселей и хочу использовать GL_POINTS для имитации сферических вокселей.
Я стремлюсь, чтобы они выглядели как 3D-сферы без необходимости рендеринга реальной сферы со многими вершинами.
Однако, когда я создал массу GL_POINTS, они перекрываются таким образом, что становится очевидным, что это спрайты с плоскими кругами.
Вот пример: пример моего изображения с перекрытием gl_points, показывающим круговой спрайт:
Я хотел бы, чтобы круговые GL_POINTS перекрывались таким образом, чтобы они выглядели как сферы, сжатые вместе и скрывающие части друг друга.
В качестве примера того, чего я хотел бы достичь, вот изображение, показывающее Star Defenders 3D от Эрика Гурта, в котором он использовал сферические точки в качестве вокселей в Javascript для своих уровней:
Пример изображения, показывающего точки, похожие на сферы:
Как видите, в местах наложения точек они скрывают части друг друга, создавая иллюзию того, что они представляют собой 3D-сферы, а не круглые спрайты.
Есть ли способ воспроизвести это в openGL? Я использую OpenGL 3.3.0.
gl_FragDepth
) зависит от расстояния до центра сферы в фрагментном шейдере - person Rabbid76   schedule 26.04.2020glPointSize()
, чтобы покрыть вашу сферу с фактическим масштабированием/поле зрения и в шейдере вычислить фрагменты поверхности сферы... Другой альтернативойglPointSize
является геометрический шейдер, испускающий треугольники из точек... не забудьте обновить глубину фрагмента, как предложил Rabbid76 - person Spektre   schedule 27.04.2020gl_PointSize = viewPortSize.y * projectionMatrix[1][1] * pointRadius / gl_Position.w;
- person rabbet   schedule 28.04.2020glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
Также разве размер точки gl не контролирует только ширину 2d-спрайта в пикселях? Я не думаю, что это имеет какое-либо отношение к глубине.. - person rabbet   schedule 28.04.2020gl_FragCoord
внутри фрагмента неверен для больших точек ... поэтому я не могу пересчитать положение поверхности. Либо я делаю что-то глупое, но, скорее всего, это ошибка драйвера :( - person Spektre   schedule 28.04.2020