- 7,099
- 324
- 1,510
Как это правильно делать?
Точнее, в каком порядке ставить вершины?
Щас стоят так:
(x, y, z),(x+w, y, z),(x+w, y+h, z),(x, y+h, z)
Результат:
А если поставить вершины в обратном порядке:
Подскажите, что может быть не так?
Если у кого-нить есть годный пример создания BakedQuad, поделитесь, пожалуйста.
Заранее спасибо
Точнее, в каком порядке ставить вершины?
Щас стоят так:
(x, y, z),(x+w, y, z),(x+w, y+h, z),(x, y+h, z)
Результат:
А если поставить вершины в обратном порядке:
Подскажите, что может быть не так?
Если у кого-нить есть годный пример создания BakedQuad, поделитесь, пожалуйста.
Scala:
private def putVertex(builder: UnpackedBakedQuad.Builder, normal: Vec3d, x: Double, y: Double, z: Double, u: Float, v: Float, sprite: TextureAtlasSprite): Unit = {
var e = 0
import net.minecraft.client.renderer.vertex.VertexFormatElement.EnumUsage._
while ( {
e < format.getElementCount
}) {
format.getElement(e).getUsage match {
case POSITION =>
builder.put(e, x.toFloat, y.toFloat, z.toFloat, 1.0f)
case COLOR =>
builder.put(e, 1.0f, 1.0f, 1.0f, 1.0f)
case UV =>
if (format.getElement(e).getIndex == 0) {
val u1 = sprite.getInterpolatedU(u)
val v1 = sprite.getInterpolatedV(v)
builder.put(e, u1, v1, 0f, 1f)
}
case NORMAL =>
builder.put(e, normal.xCoord.asInstanceOf[Float], normal.yCoord.asInstanceOf[Float], normal.zCoord.asInstanceOf[Float], 0f)
case _ =>
builder.put(e)
}
e += 1
}
}
val format: VertexFormat = net.minecraft.client.renderer.vertex.DefaultVertexFormats.BLOCK
private def createQuad(v1: Vec3d, v2: Vec3d, v3: Vec3d, v4: Vec3d, sprite: TextureAtlasSprite) = {
val normal = v1.subtract(v2).crossProduct(v3.subtract(v2))
val builder = new UnpackedBakedQuad.Builder(format)
builder.setTexture(sprite)
putVertex(builder, normal, v1.xCoord, v1.yCoord, v1.zCoord, 0, 0, sprite)
putVertex(builder, normal, v2.xCoord, v2.yCoord, v2.zCoord, 0, 16, sprite)
putVertex(builder, normal, v3.xCoord, v3.yCoord, v3.zCoord, 16, 16, sprite)
putVertex(builder, normal, v4.xCoord, v4.yCoord, v4.zCoord, 16, 0, sprite)
builder.build
}
Последнее редактирование: