Render.ru

Порядок вершин в полигоне.

Kuulman

Пользователь сайта
Рейтинг
2
#1
Я сделал экспорт сцены в нужный мне формат и вывожу её в своей программе. Столкнулся с такой проблемой:
при отрисовке сцены в программе играет роль, в каком порядке указаны вершины для полигона - по часовой или против часовой стрелки. Это определяет, с какой стороны полигон видно, а с какой он прозрачный. Некоторые сцены содержат объекты, которые нормально выглядят в 3Дмаксе, нормально рендерятся, но после экспорта оказывается, что у части объектов полигоны заданы в неправильном направлении, и они отображаются наоборот. Подскажите, cull_fase в 3Д максе определяется только нормалью полигона, и нужно вычислять порядок вершин самому, или есть ещё какой-то параметр у объекта?
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#2
Глянул в SDK нормаль face (EditMesh) в максе напрямую расчитывается от направления индексов вертексов
так что ошибка скорее вего у тебя в экспортере или программе.
 

Kuulman

Пользователь сайта
Рейтинг
2
#4
По всей видимости, ошибки нигде нету. Возможно, так получается из-за различных преобразований объекта. Нашёл код, который позволяет бороться с такой проблемой:

local WorldMatrix = copy tmpObj.transform
WorldMatrix.row1 = normalize WorldMatrix.row1
WorldMatrix.row2 = normalize WorldMatrix.row2
WorldMatrix.row3 = normalize WorldMatrix.row3
local CCW=(WorldMatrix.determinantsign < 0)

и дальше опираясь на условие уже указываем порядок вертексов:
face = (getFace tmpObj i) --получаем фейс
for j = 1 to 3 do
(
if (not CCW) then
jj = j
else
jj = 4 - j

writefloat f (meshop.getFaceRNormals tmpObj i)[jj][1] --добавляем X-нормали вертекса
writefloat f (meshop.getFaceRNormals tmpObj i)[jj][2] --добавляем Y-нормали вертекса
writefloat f (meshop.getFaceRNormals tmpObj i)[jj][3] --добавляем Z-нормали вертекса
writefloat f (getVert tmpObj face[jj])[1] -- добавляем X вертекса
writefloat f (getVert tmpObj face[jj])[2] -- добавляем Y вертекса
writefloat f (getVert tmpObj face[jj])[3] -- добавляем Z вертекса
)

Но есть проблема с нормалями на объектах с обратным порядком вершин. Они отображаются неправильно:(
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#5
Понятно работаеш с глобальными координатами.
Можно приатачитьвсе объекты к обьекту пустышке в цетре координат и экспортнуть.
Или дорабатывай этот скрипт: Для повернутых фейсов нужно и нормали инвертировать - домнож их на -1
 
Сверху