Intereting Posts
Все возможные комбинации из двух списков Vaadin 8 NativeSelect изменить представление данных списка Конкатенация последовательности Котлина Обновите содержимое фрагмента в разделе PagerAdapter Как хранить данные json при использовании Android Studio 3.0? Kotlin: Избегайте создания FqNameUnsafe и FqName Доступ к статической функции расширения из другого класса в Котлине? Нажатие текстового поля для изменения фрагмента Кинжал 2 не может вводить из подкомпонента (котлин) Получить дату из DatePickerDialog в Kotlin Android Внедрение интерфейса анонимно в Kotlin приводит к ошибке «не имеет конструкторов» Kotlin: как параметр по умолчанию в «fun main (parameters: Array <String>)» печатает «гость» без присвоения каких-либо значений Spring Framework проглатывает исключение пользовательских преобразователей разреженный список значений с использованием диапазонов Spring Boot не обновляет статический html (с Kotlin / Intellij)

OpenGL Texture Glitch с лицами

Я использую LWJGL, чтобы создать простой воксел, как некоторую практику, как умеренно простой проект, чтобы познакомиться с Kotlin .

Итак, у меня есть рендеринг вокселей, за исключением рендеринга вокселя с разными текстурами на лицо.

Это выглядит хорошо, пока я не начну двигаться … тогда: какие

Если кому-то нужно полное репо, это здесь

Что касается соответствующих классов, я не слишком уверен, что имеет значение, но вот что создает glVertex3f и glTexture2f:

public class Shape { class object { public fun CreateCube(x: Float, y: Float, z: Float, colour: ColourRGBA, tex: MutableList<TextureCoords>, size: Float) { val sheet: Spritesheet = Main.Instance!!.blocksprites var textures: MutableList<TextureCoords> = arrayListOf() if (tex.size == 1) { for (i in 0 .. 5) textures.add(tex[0]) } else textures.addAll(tex) // bottom face // bottom face (0, 1) GL11.glColor4f(colour.red.toFloat(), colour.green.toFloat(), colour.blue.toFloat(), colour.alpha.toFloat()); GL11.glTexCoord2f(textures[0].x, textures[0].y + sheet.GetUniformSize()); GL11.glVertex3f(x, y, z + size); GL11.glTexCoord2f(textures[0].x + sheet.GetUniformSize(), textures[0].y + sheet.GetUniformSize()); GL11.glVertex3f(x + size, y, z + size); GL11.glTexCoord2f(textures[0].x + sheet.GetUniformSize(), textures[0].y); GL11.glVertex3f(x + size, y, z); GL11.glTexCoord2f(textures[0].x, textures[0].y); GL11.glVertex3f(x, y, z); // top face (2, 3) GL11.glColor4f(colour.red.toFloat(), colour.green.toFloat(), colour.blue.toFloat(), colour.alpha.toFloat()); GL11.glTexCoord2f(textures[1].x, textures[1].y + sheet.GetUniformSize()); GL11.glVertex3f(x, y + size, z); GL11.glTexCoord2f(textures[1].x + sheet.GetUniformSize(), textures[1].y + sheet.GetUniformSize()); GL11.glVertex3f(x + size, y + size, z); GL11.glTexCoord2f(textures[1].x + sheet.GetUniformSize(), textures[1].y); GL11.glVertex3f(x + size, y + size, z + size); GL11.glTexCoord2f(textures[1].x, textures[1].y); GL11.glVertex3f(x, y + size, z + size); // front face (4, 5) GL11.glColor4f(colour.red.toFloat(), colour.green.toFloat(), colour.blue.toFloat(), colour.alpha.toFloat()); GL11.glTexCoord2f(textures[2].x, textures[2].y + sheet.GetUniformSize()); GL11.glVertex3f(x, y, z); GL11.glTexCoord2f(textures[2].x + sheet.GetUniformSize(), textures[2].y + sheet.GetUniformSize()); GL11.glVertex3f(x + size, y, z); GL11.glTexCoord2f(textures[2].x + sheet.GetUniformSize(), textures[2].y); GL11.glVertex3f(x + size, y + size, z); GL11.glTexCoord2f(textures[2].x, textures[2].y); GL11.glVertex3f(x, y + size, z); // back face (6, 7) GL11.glColor4f(colour.red.toFloat(), colour.green.toFloat(), colour.blue.toFloat(), colour.alpha.toFloat()); GL11.glTexCoord2f(textures[3].x, textures[3].y); GL11.glVertex3f(x, y + size, z + size); GL11.glTexCoord2f(textures[3].x + sheet.GetUniformSize(), textures[3].y); GL11.glVertex3f(x + size, y + size, z + size); GL11.glTexCoord2f(textures[3].x + sheet.GetUniformSize(), textures[3].y + sheet.GetUniformSize()); GL11.glVertex3f(x + size, y, z + size); GL11.glTexCoord2f(textures[3].x, textures[3].y + sheet.GetUniformSize()); GL11.glVertex3f(x, y, z + size); // left face (8, 9) GL11.glColor4f(colour.red.toFloat(), colour.green.toFloat(), colour.blue.toFloat(), colour.alpha.toFloat()); GL11.glTexCoord2f(textures[4].x, textures[4].y + sheet.GetUniformSize()); GL11.glVertex3f(x + size, y, z); GL11.glTexCoord2f(textures[4].x + sheet.GetUniformSize(), textures[4].y + sheet.GetUniformSize()); GL11.glVertex3f(x + size, y, z + size); GL11.glTexCoord2f(textures[4].x + sheet.GetUniformSize(), textures[4].y); GL11.glVertex3f(x + size, y + size, z + size); GL11.glTexCoord2f(textures[4].x, textures[4].y); GL11.glVertex3f(x + size, y + size, z); // right face (10, 11) GL11.glColor4f(colour.red.toFloat(), colour.green.toFloat(), colour.blue.toFloat(), colour.alpha.toFloat()); GL11.glTexCoord2f(textures[5].x, textures[5].y + sheet.GetUniformSize()); GL11.glVertex3f(x, y, z + size); GL11.glTexCoord2f(textures[5].x + sheet.GetUniformSize(), textures[5].y + sheet.GetUniformSize()); GL11.glVertex3f(x, y, z); GL11.glTexCoord2f(textures[5].x + sheet.GetUniformSize(), textures[5].y); GL11.glVertex3f(x, y + size, z); GL11.glTexCoord2f(textures[5].x, textures[5].y); GL11.glVertex3f(x, y + size, z + size); } } } 

EDIT: после немного большего количества тестов, я понимаю, что я получаю странный сбой, когда камера находится над рассматриваемым вокселом. Я аналогичные блоки размещены в другом месте с только стороны лицевые подвергаются, и, если смотреть снизу они в порядке:

Камера немного выше блока (проблема возрастает дальше от камеры): введите описание изображения здесь Камера ниже блока: введите описание изображения здесь

РЕДАКТИРОВАТЬ 2: после некоторого тестирования, выясняется, что проблема связана с любыми двумя различными типами блоков с взаимодействием различных текстур … Так что это, вероятно, не предмет на лице, а скорее взаимодействие с лицом-лицом? Не знаю.

EDIT 3: я решил попытаться определить проблему, поэтому я удалил вызовы glTexCoords2f () из моего кода. К сожалению, проблема сохраняется: введите описание изображения здесь

    Так.

    GLU.gluPerspective(67.0f, (width / height).toFloat(), 0.0001f, 1000.0f)

    Как насчет GLU.gluPerspective(67.0f, (width / height).toFloat(), 0.5f, 1000.0f)

    В принципе, уменьшите минимальное расстояние зрения, решите проблему.