OpenGL을 사용하여 등각 투영 도면을 만들려고합니다. 따르면OpenGL을 사용한 등각 투영
: http://en.wikipedia.org/wiki/Isometric_projection#Mathematics
"이 제 직선 방향 일 개면을보고함으로써 행해진 다 다음 큐브 종축에 대해 45 ° ± 회전, 약 ± 35.264 °의 회전 (정확하게 다 arcsin 하였다. (tan 30 °) 또는 arctan (sin 45 °))을 측정합니다. "
그러나 분명히 나는 일부 세부 사항을 놓치고 있습니다. 이 코드는 작동하지만 이상한 각도에 있습니다. 노란색이 맨 아래 줄이어야합니다.
import Graphics.UI.GLFW
import Graphics.Rendering.OpenGL
main :: IO()
main = do
initialize
openWindow (Size 800 600) [] Window
windowTitle $= "Test Projection"
clearColor $= Color4 0 0 0 1
pointSize $= 3
lineWidth $= 1
blend $= Enabled
blendFunc $= (SrcAlpha, OneMinusSrcAlpha)
viewport $= (Position 0 0, Size 800 600)
matrixMode $= Projection
loadIdentity
-- ortho (-2) (2) (-2) 2 (-20.0) 20.0
matrixMode $= Modelview 0
loadIdentity
rotate (35.264) (Vector3 1.0 0.0 0.0 :: Vector3 GLfloat)
rotate (-45) (Vector3 0.0 1.0 0.0 :: Vector3 GLfloat)
clear [ColorBuffer]
renderPrimitive Lines $ do
color $ Color3 1 zero zero
vertex' (0,0,0)
vertex' (1,0,0)
color $ Color3 zero 1 zero
vertex' (0,0,0)
vertex' (0,1,0)
color $ Color3 zero zero 1
vertex' (0,0,0)
vertex' (0,0,1)
color $ Color3 1 1 zero
vertex' (1,0,0)
vertex' (0,1,0)
swapBuffers
getChar
return()
vertex' :: Integral a => (a, a, a) -> IO()
vertex' (x, y, z) = vertex (Vertex3 (f x) (f y) (f z))
where f p = fromIntegral p :: GLint
zero :: GLfloat
zero = 0.0
감사합니다. 상황이 훨씬 더 중요합니다. – user1149863
사실 지난 밤 4 시까 지 내가 뭘 잘못했는지 알아 내려고 노력했습니다. – user1149863