Я нарисовал секстику Барта с помощью Haskell OpenGL, и возникла проблема. Я также нарисовал его в R (с пакетами rgl
и misc3d
), и проблем нет. Два алгоритма (в Haskell и R) очень похожи. Секстик Барта — это неявная поверхность, и в Haskell я вычисляю триангуляцию этой поверхности с помощью алгоритма марширующих кубов, который я получил, переведя один из misc3d
в Haskell и C. Я использую нормали вершин, каждая из которых определяется градиентом неявное уравнение.
Вот проблема:
Я не хочу этих черных теней. Когда я смотрю на секстик сзади, повернув его на 180°, такой тени нет:
Полный код доступен в этом репозитории Github. Вот части кода, относящиеся к цветам:
fuchsia :: Color4 GLfloat
fuchsia = Color4 1.00 0.00 1.00 1
discord :: Color4 GLfloat
discord = Color4 0.21 0.22 0.25 1
renderPrimitive Triangles $ mapM_ drawTriangle triangles
swapBuffers
where
drawTriangle ((v1,v2,v3), (n1,n2,n3)) = do
materialDiffuse FrontAndBack $= fuchsia
normal n1
vertex v1
normal n2
vertex v2
normal n3
vertex v3
clearColor $= discord
materialAmbient FrontAndBack $= black
materialDiffuse FrontAndBack $= white
materialEmission FrontAndBack $= black
lighting $= Enabled
lightModelTwoSide $= Enabled
light (Light 0) $= Enabled
position (Light 0) $= Vertex4 0 0 (-1000) 1
ambient (Light 0) $= white
diffuse (Light 0) $= white
specular (Light 0) $= white
Я пытался изменить цвета в этом последнем фрагменте кода, но никак не мог избавиться от этих теней. Я что-то не так делаю с цветами? Я уверен, что нормали правильные, потому что это работает в R. Однако тени появляются там, где поверхность не гладкая, поэтому мне интересно, вызвана ли проблема нормалями.
Рендеринг R:
Редактировать
Мне удалось избавиться от этих теней:
Сам не знаю как, столько попыток делал... Но все равно теперь проблема в том, что спинка секстика слишком легкая:
rgl
в R (я только что отредактировал свой пост, чтобы добавить рендерингrgl
). Я использую то же разрешение и те же нормали, и алгоритм марширующих кубов такой же. Пакетrgl
также основан наOpenGL
(думаю, мне следует проверить), поэтому мне интересно, есть ли параметр по умолчанию, установленный вrgl
, и который я не устанавливаю в Haskell. - person Stéphane Laurent   schedule 16.11.2018Vertex4 500 500 (-1000)
и посмотрите, как это выглядит. - person luqui   schedule 16.11.2018