Ejemplo n.º 1
0
void MakeNorm(void)
{
	int i, j;
	float a[3],b[3],c[3];

	for(i=0; i<size; i++)
	for(j=0; j<size; j++)
	{
		if (i!=size-1 && j!=size-1)
		{
			sub(a, a_points[i][j+1], a_points[i][j]);
			sub(b, a_points[i+1][j], a_points[i][j]);
		}
		else
		{
			sub(a, a_points[i][j-1], a_points[i][j]);
			sub(b, a_points[i-1][j], a_points[i][j]);
		}

		cross(c, a, b);
		normz(c);

		if (i==0 && j==size-1)
		{
			sub(a, a_points[i][j-1], a_points[i][j]);
			sub(b, a_points[i+1][j], a_points[i][j]);

			cross(c, a, b);
			normz(c);

			c[0]=-c[0]; c[1]=-c[1]; c[2]=-c[2];
		}

		if (i==size-1 && j==0)
		{
			sub(a, a_points[i-1][j], a_points[i][j]);
			sub(b, a_points[i][j+1], a_points[i][j]);

			cross(c, a, b);
			normz(c);
		}

		copy(norm[i][j], c);
   }
}
Ejemplo n.º 2
0
void calcul(int xx,int yy)
{
	if ((xx==0)&&(yy==0)) MakeNorm();
	sub(cameraray,camera,a_points[xx][yy]);
	normz(cameraray);
	rray[0]=norm[xx][yy][0]*coeff+cameraray[0];
	rray[1]=norm[xx][yy][1]*coeff+cameraray[1];
	rray[2]=norm[xx][yy][2]*coeff+cameraray[2];
	scalDiv(rray,-1);
	normz(rray);

	GLfloat depth=gendep+a_points[xx][yy][2];
	GLfloat t=depth/rray[2];
	GLfloat mapx=a_points[xx][yy][0]+rray[0]*t;
	GLfloat mapz=a_points[xx][yy][1]+rray[1]*t;

	newcoord[xx][yy][0]=-(mapx-a_points[0][0][0])/25.6;
	newcoord[xx][yy][1]=(mapz-a_points[size][size][1])/25.6;

}
Ejemplo n.º 3
0
float4 RotationQuaternionFromToVec(const float3 & fromVector, const float3 & toVector)
{
    auto a = norm(fromVector), b = norm(toVector);
    return RotationQuaternionAxisAngle(normz(cross(a,b)), std::acos(dot(a,b)));
}