For example v1y = 200, v2y = 400, v3y = 400 in screen coord. Triangles draws ok. But when v1 not within of screen of monitor, and v1 very fast change on more and more great value. For example v1y out of screen space: v1y= -20523, v2y = 100, v3y = 100 (vert v2y and v3y is within of screen space). Then I this triangle a little move more higher and v1y = - 50324, v2y = 50, v3y= 50. I can not properly draw my triangles when v1Y very fast changing not within screen.
This my short piece of code:
My3DMatrix4x4 mWorld(
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,0, 0, 0, 1);
m_pCamera->FrameMove(0.03f);
My3DMatrix4x4 mView = m_pCamera->GetViewMatrix();
float fFov = 3.1415926f/4.0f;
float fAspect = 4.0f/3.0f;
float fZFar = 250.0;
float fZNear = 0.001f;
float h, w, Q;
w = (1.0f/tan(fFov*0.5f))/fAspect;
h = 1.0f/tan(fFov*0.5f);
Q = fZFar/(fZFar - fZNear);
My3DMatrix4x4 mProj(
w, 0, 0, 0,
0, h, 0, 0,
0, 0, Q, 1,
0, 0, -Q*fZNear, 0);
My3DMatrix4x4 mRes(
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1);
mRes = My3DMatrixMultiply(mRes, mWorld);
mRes = My3DMatrixMultiply(mRes, mView);
mRes = My3DMatrixMultiply(mRes, mProj);
//Transform vertices into homogeneous space
for( int i = 0; i < 12; i++)
{
My3DVector3 v1 = My3DVec3TransformCoord(My3DVector3(pMy3DTriangle_Original[i].v1.x,
pMy3DTriangle_Original[i].v1.y,
pMy3DTriangle_Original[i].v1.z),
mRes);
pMy3DTriangle_Transformed[i].v1.x = v1.x;
pMy3DTriangle_Transformed[i].v1.y = v1.y;
pMy3DTriangle_Transformed[i].v1.z = v1.z;
My3DVector3 v2 = My3DVec3TransformCoord(My3DVector3(pMy3DTriangle_Original[i].v2.x,
pMy3DTriangle_Original[i].v2.y,
pMy3DTriangle_Original[i].v2.z),
mRes);
pMy3DTriangle_Transformed[i].v2.x = v2.x;
pMy3DTriangle_Transformed[i].v2.y = v2.y;
pMy3DTriangle_Transformed[i].v2.z = v2.z;
My3DVector3 v3 = My3DVec3TransformCoord(My3DVector3(pMy3DTriangle_Original[i].v3.x,
pMy3DTriangle_Original[i].v3.y,
pMy3DTriangle_Original[i].v3.z),
mRes);
pMy3DTriangle_Transformed[i].v3.x = v3.x;
pMy3DTriangle_Transformed[i].v3.y = v3.y;
pMy3DTriangle_Transformed[i].v3.z = v3.z;
}
//Screen Space transformation
for(int i = 0; i < 12; i++)
{
pMy3DTriangle_Transformed[i].vScreen1.x = pMy3DTriangle_Transformed[i].v1.x * nViewWidth/2.0 + nViewWidth/2.0;
pMy3DTriangle_Transformed[i].vScreen1.y = -pMy3DTriangle_Transformed[i].v1.y * nViewHeight/2.0 + nViewHeight/2.0;
pMy3DTriangle_Transformed[i].vScreen2.x = pMy3DTriangle_Transformed[i].v2.x * nViewWidth/2.0 + nViewWidth/2.0;
pMy3DTriangle_Transformed[i].vScreen2.y = -pMy3DTriangle_Transformed[i].v2.y * nViewHeight/2.0+ nViewHeight/2.0;
pMy3DTriangle_Transformed[i].vScreen3.x = pMy3DTriangle_Transformed[i].v3.x * nViewWidth/2.0 + nViewWidth/2.0;
pMy3DTriangle_Transformed[i].vScreen3.y = -pMy3DTriangle_Transformed[i].v3.y * nViewHeight/2.0+ nViewHeight/2.0;
}
And then I do draw triangle and cube.
Why vert v1y very much more change its value not within screen space? How do control this?












