2011-01-09 16 views
0

私は、コードのこの作品に出会ったとき、私はhttp://www.devmaster.net/articles/raytracing_series/part1.phpにレイトレーシングを勉強していました:レイトレースの質問、どのように画面座標をワールド座標にマップするのですか?

void Engine::InitRender() 
{ 
// set first line to draw to 
m_CurrLine = 20; 
// set pixel buffer address of first pixel 
m_PPos = 20 * m_Width; 
// screen plane in world space coordinates 
m_WX1 = -4, m_WX2 = 4, m_WY1 = m_SY = 3, m_WY2 = -3; 
// calculate deltas for interpolation 
m_DX = (m_WX2 - m_WX1)/m_Width; 
m_DY = (m_WY2 - m_WY1)/m_Height; 
m_SY += 20 * m_DY; 
// allocate space to store pointers to primitives for previous line 
m_LastRow = new Primitive*[m_Width]; 
memset(m_LastRow, 0, m_Width * 4); 
} 

私は著者の地図画面が世界座標への座標どのように非常に困惑している...
誰も私に教えてくださいすることができ作者がこれらの行をどのように導いたのか?
または、画面座標をワールド座標にマップする方法を教えてください。

// screen plane in world space coordinates 
m_WX1 = -4, m_WX2 = 4, m_WY1 = m_SY = 3, m_WY2 = -3; 

ありがとうございます!

答えて

1

EDIT:

// render scene 
vector3 o(0, 0, -5); 

// initialize timer 
int msecs = GetTickCount(); 

// reset last found primitive pointer 
Primitive* lastprim = 0; 

// render remaining lines 
for(int y = m_CurrLine; y < (m_Height - 20); y++) 
{ 
    m_SX = m_WX1; 

    // render pixels for current line 
    for (int x = 0; x < m_Width; x++) 
    { 
     // fire primary ray 
     Color acc(0, 0, 0); 
     vector3 dir = vector3(m_SX, m_SY, 0) - o; 
     NORMALIZE(dir); 
     Ray r(o, dir); 
     float dist; 
     Primitive* prim = Raytrace(r, acc, 1, 1.0f, dist); 
     int red = (int)(acc.r * 256); 
     int green = (int)(acc.g * 256); 
     int blue = (int)(acc.b * 256); 
     if (red > 255) red = 255; 
     if (green > 255) green = 255; 
     if (blue > 255) blue = 255; 
     m_Dest[m_PPos++] = (red << 16) + (green << 8) + blue; 
     m_SX += m_DX; 
    } 

    m_SY += m_DY; 

    // see if we've been working to long already 
    if ((GetTickCount() - msecs) > 100) 
    { 
     // return control to windows so the screen gets updated 
     m_CurrLine = y + 1; 
     return false; 
    } 
} 

return true; 

したがって、カメラが(0,0,-5)であり、世界が投影されている上に画面が左上隅(-4,3,0)と右下隅(4,-3,0)を有する:ここraytracer.cppから関連するコードであります。

+0

それは私だけですか、あるいは、stackoverflow = =で常に明確に見えるコードですか? –

関連する問題