Как отображать «бесконечные» сетки с использованием OpenGL?JAVA

Программисты JAVA общаются здесь
Anonymous
Как отображать «бесконечные» сетки с использованием OpenGL?

Сообщение Anonymous »

Я делаю клон Minecraft, и я хочу, чтобы у него было «бесконечное» поколение. В то время как в процессоре, все, что мне нужно сделать, это использовать 64 типа данных, каждый из них - еще один Sotry, чтобы сказать ... < /p>
Если я использую 64 типа данных в GLSL, я собираюсь использовать два раза от терафлопов моего драйвера. После некоторых исследований проблема заключается в том, что OpenGL - это 32 -битный графический API и не очень хорошо обрабатывает удвоение. Чем больше позиция чанка, менее точная открытая) получает ... < /p>
Вот код, который я использую для рендеринга кусочек: вершины не отправляются в графический процессор. Вместо этого я просто отправляю данные Faces и строю позицию вершины и UVS непосредственно внутри графического процессора. А потом я использую униформу для положений кусок и добавляю это в исчисление, чтобы получить локальную позицию сетки: < /p>

Код: Выделить всё

ChunkShaders[0].Uniform3f("Position", chunk.positionX, chunk.positionY, chunk.positionZ);
< /code>
Все, что мне нужно сейчас сделать, - это просто умножение результата на размер чанка (в настоящее время 16), а затем мы получаем мировую позицию: < /p>
vec3 modelPosition = FaceVertices[vertexIndex] + localPosition + (Position * CHUNK_SIZE);
< /code>
Несмотря на то, что я отправляю лишь несколько чисел благодаря просто отправке локальных позиций в процессор, проблема не решена ... Мне действительно нужна помощь < /p>
С И я как бы потерпел неудачу: < /p>
Vector3L cameraOrigin = new Vector3L(
(int) floor(Camera.Position.x),
(int) floor(Camera.Position.y),
(int) floor(Camera.Position.z)
);

Vector3f cameraOffset = new Vector3f(
(float) (Camera.Position.x - cameraOrigin.x),
(float) (Camera.Position.y - cameraOrigin.y),
(float) (Camera.Position.z - cameraOrigin.z)
);

Vector3f chunkOffset = new Vector3f(
(chunk.positionX - (long)(Camera.Position.x / ChunkGen.CHUNK_SIZE)) * ChunkGen.CHUNK_SIZE,
(chunk.positionY - (long)(Camera.Position.y / ChunkGen.CHUNK_SIZE)) * ChunkGen.CHUNK_SIZE,
(chunk.positionZ - (long)(Camera.Position.z / ChunkGen.CHUNK_SIZE)) * ChunkGen.CHUNK_SIZE
);

ChunkShaders[0].Uniform3f("chunkOffset", chunkOffset);
ChunkShaders[0].Uniform3f("cameraOffset", cameraOffset);
< /code>
И я только что изменил исчисление GLSL мировой позиции этим: < /p>
vec3 modelPosition = FaceVertices[vertexIndex] + localPosition + chunkOffset + cameraOffset;
Я не знаю, просто ли я тупой или не понял то, что мне сказали другие люди, но я действительно не могу понять, как это сделать.

Подробнее здесь: https://stackoverflow.com/questions/795 ... ing-opengl

Вернуться в «JAVA»