Я пытаюсь реализовать нормальную генерацию вершины из положений вершины, используя метод перекрестного продукта (в JavaScript, из буфера позиций GLTF), но большинство полученных нормеров оказываются (0, 0, 0). Код: < /p>
const vertices = new Float32Array(
positionsBuffer,
meshData.positions.byteOffset,
meshData.positions.byteLength
)
const indices =
new Uint16Array(
indexBuffer,
meshData.indices.byteOffset,
meshData.indices.byteLength
)
const normals = new Float32Array(vertices.length)
for (let i = 0; i < indices.length; i += 9) {
const vert0 = vec3.create(
vertices[indices[i]],
vertices[indices[i + 1]],
vertices[indices[i + 2]]
)
const vert1 = vec3.create(
vertices[indices[i + 3]],
vertices[indices[i + 4]],
vertices[indices[i + 5]]
)
const vert2 = vec3.create(
vertices[indices[i + 6]],
vertices[indices[i + 7]],
vertices[indices[i + 8]]
)
// p = cross(B-A, C-A)
const normal = vec3.normalize(
vec3.cross(
vec3.subtract(vert1, vert0),
vec3.subtract(vert2, vert0)
)
)
normals[indices[i]] += normal[0]
normals[indices[i + 1]] += normal[1]
normals[indices[i + 2]] += normal[2]
normals[indices[i + 3]] += normal[0]
normals[indices[i + 4]] += normal[1]
normals[indices[i + 5]] += normal[2]
normals[indices[i + 6]] += normal[0]
normals[indices[i + 7]] += normal[1]
normals[indices[i + 8]] += normal[2]
}
for (let i = 0; i < indices.length; i += 3) {
const normalizedNormal = vec3.normalize(
vec3.create(
normals[indices[i]],
normals[indices[i + 1]],
normals[indices[i + 2]]
)
)
normals[indices[i]] = normalizedNormal[0]
normals[indices[i + 1]] = normalizedNormal[1]
normals[indices[i + 2]] = normalizedNormal[2]
}
< /code>
То, что я ожидал получить, - это нечто похожее на это изображение, но я на самом деле получаю это < /p>
Я попытался изменить порядок извилистого, на Нет эффекта. Нормализация или нет, кажется, не имеет никакого значения (но это связано с тем, что нормализации нормализации в шейдере в любом случае).
Из того, что я видел в Интернете, математика, кажется, в порядке.
i ' M также довольно уверен, что все вершины обрабатываются, потому что касательные, которые я генерирую таким же образом, оказалось просто отлично. Для меня это означает, что нормали [индексы [i]] += нормальный [0]
регулярно производят 0, но я не могу понять, почему. И что с этим делать, если это проблема. Любые предложения были бы очень оценены. Модель генерируется с помощью khronos blender gltf 2.0 exporter
Я пытаюсь реализовать нормальную генерацию вершины из положений вершины, используя метод перекрестного продукта (в JavaScript, из буфера позиций GLTF), но большинство полученных нормеров оказываются (0, 0, 0). Код: < /p> [code] const vertices = new Float32Array( positionsBuffer, meshData.positions.byteOffset, meshData.positions.byteLength )
const indices = new Uint16Array( indexBuffer, meshData.indices.byteOffset, meshData.indices.byteLength )
const normals = new Float32Array(vertices.length)
for (let i = 0; i < indices.length; i += 9) { const vert0 = vec3.create( vertices[indices[i]], vertices[indices[i + 1]], vertices[indices[i + 2]] ) const vert1 = vec3.create( vertices[indices[i + 3]], vertices[indices[i + 4]], vertices[indices[i + 5]] )
for (let i = 0; i < indices.length; i += 3) { const normalizedNormal = vec3.normalize( vec3.create( normals[indices[i]], normals[indices[i + 1]], normals[indices[i + 2]] ) )
normals[indices[i]] = normalizedNormal[0] normals[indices[i + 1]] = normalizedNormal[1] normals[indices[i + 2]] = normalizedNormal[2] } < /code> То, что я ожидал получить, - это нечто похожее на это изображение, но я на самом деле получаю это < /p> Я попытался изменить порядок извилистого, на Нет эффекта. Нормализация или нет, кажется, не имеет никакого значения (но это связано с тем, что нормализации нормализации в шейдере в любом случае). Из того, что я видел в Интернете, математика, кажется, в порядке. i ' M также довольно уверен, что все вершины обрабатываются, потому что касательные, которые я генерирую таким же образом, оказалось просто отлично. Для меня это означает, что нормали [индексы [i]] += нормальный [0] [/code] регулярно производят 0, но я не могу понять, почему. И что с этим делать, если это проблема. Любые предложения были бы очень оценены. Модель генерируется с помощью khronos blender gltf 2.0 exporter