Your IP : 216.73.216.40


Current Path : /var/www/html/venkat/check3/file/cg2013/pawan/
Upload File :
Current File : /var/www/html/venkat/check3/file/cg2013/pawan/ISM2013017_1.cpp.cpp

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/freeglut.h>
#include <cmath>
#include <iostream>
#include <stdio.h>
using namespace std;

#define SF 1000.0

//code starts here

double line[19][6];
double observer[3];
double lookatPoint[3];
double upVector[3];
double zmin, d;
double lVector[3],rVector[3],uVector[3];
double lCap[3],rCap[3],uCap[3];
double CameraMatrix[4][4];
double CameraCoordinate[19][6];
double mul[4][1];
double prespective[19][6];

void scan(){
	cout<<"enter eye coordinate\n";
	cin>>observer[0]>>observer[1]>>observer[2];
	cout<<"enter lookat Point\n";
	cin>>lookatPoint[0]>>lookatPoint[1]>>lookatPoint[2];
	cout<<"enter up vector\n";
	cin>>upVector[0]>>upVector[1]>>upVector[2];
	cout<<"enter zmin and distance in question it is given 10 \n";
	cin>>zmin>>d;
	cout<<"enter co-ordinate\n";

	for(int i = 1;i<=4;i++){
		for(int j=0;j<6;j++){
			cin>>line[i][j];
		}
	}
}
void init(){
	for(int i=5;i<=18;i++){
		if(i%2==0){
			line[i][0] = line[4][0];
			line[i][1] = line[4][1];
			line[i][2] = line[4][2]+40*((i-2)/2-1);
			line[i][3] = line[4][3];
			line[i][4] = line[4][4];
			line[i][5] = line[4][5]+40*((i-2)/2-1);
		}
		else{
			line[i][0] = line[3][0];
			line[i][1] = line[3][1];
			line[i][2] = line[3][2]+40*((i-1)/2-1);
			line[i][3] = line[3][3];
			line[i][4] = line[3][4];
			line[i][5] = line[3][5]+40*((i-1)/2-1);
		}
	}
}
void compute(){
	for(int i=0;i<3;i++){
		lVector[i] = lookatPoint[i]-observer[i];
	}
	double lmod = sqrt(lVector[0]*lVector[0]+lVector[1]*lVector[1]+lVector[2]*lVector[2]);
	for(int i=0;i<3;i++){
		lCap[i] = lmod>0?lVector[i]/lmod:lVector[i];
	}
	rVector[0] = lVector[1]*upVector[2]-lVector[2]*upVector[1];
	rVector[1] = lVector[2]*upVector[0]-lVector[0]*upVector[2];
	rVector[2] = lVector[0]*upVector[1]-lVector[1]*upVector[0];

	double rmod = sqrt(rVector[0]*rVector[0]+rVector[1]*rVector[1]+rVector[2]*rVector[2]);
	for(int i=0;i<3;i++){
		rCap[i] = rmod>0?rVector[i]/rmod:rVector[i];
	}

	uVector[0] = rVector[1]*lVector[2]-rVector[2]*lVector[1];
	uVector[1] = rVector[2]*lVector[0]-rVector[0]*lVector[2];
	uVector[2] = rVector[0]*lVector[1]-rVector[1]*lVector[0];

	double umod = sqrt(uVector[0]*uVector[0]+uVector[1]*uVector[1]+uVector[2]*uVector[2]);
	for(int i=0;i<3;i++){
		uCap[i] = umod>0?uVector[i]/umod:uVector[i];
	}

}
void print(){

	//cout<<"-----------------------------------------------------\n";
	cout<<"generated coordinates are -:\n";
	for(int i=1;i<=18;i++){
		for(int j = 0;j<6;j++){
			cout<<line[i][j]<<"\t";
		}
		cout<<endl;
	}
	cout<<"\n\ngenerated Camera coordinates are -:\n";
	for(int i=1;i<=18;i++){
		for(int j = 0;j<6;j++){
			cout<<CameraCoordinate[i][j]<<"\t";
		}
		cout<<endl;
	}
	cout<<endl<<endl;
	cout<<"\n\ngenerated Prespective Projection are(nan - infinity) -:\n";
	for(int i=1;i<=18;i++){
		for(int j = 0;j<6;j++){
			cout<<prespective[i][j]<<"\t";
		}
		cout<<endl;
	}
	cout<<endl<<endl;

}
void MakeCameraMatrix(){
	memset(CameraMatrix,0,sizeof(CameraMatrix));
	for(int i=0;i<3;i++)
		CameraMatrix[0][i] = rCap[i];
	for(int i=0;i<3;i++)
		CameraMatrix[1][i] = uCap[i];
	for(int i=0;i<3;i++)
		CameraMatrix[2][i] = (-1)*lCap[i];
	for(int i = 0;i<3;i++)
		CameraMatrix[0][3] += (-1)*(rCap[i]*observer[i]);
	for(int i = 0;i<3;i++)
		CameraMatrix[1][3] += (-1)*(uCap[i]*observer[i]);
	for(int i = 0;i<3;i++)
		CameraMatrix[2][3] += lCap[i]*observer[i];
	CameraMatrix[3][3] = 1;
}
void MatrixMul(int n1,int n2,int n3,int idx1,int idx2){
	double ans[n1][n3];
	memset(ans,0,sizeof(ans));
	for(int i = 0; i < n1; i++){
		for(int j = 0; j < n3; j++){
			for(int k = 0; k < n2; k++){
				ans[i][j] += CameraMatrix[i][k]*mul[k][j];
			}
		}
	}
	for(int i = 0;i<3;i++)
		CameraCoordinate[idx1][i+idx2] = ans[i][0];
}
void ComputeCameraCoordinate(){
	for(int i = 1;i <= 18;i++){
		mul[0][0] = line[i][0];mul[1][0] = line[i][1];mul[2][0] = line[i][2];
		mul[3][0] = 1;
		MatrixMul(4,4,1,i,0);
		mul[0][0] = line[i][3];mul[1][0] = line[i][4];mul[2][0] = line[i][5];
		MatrixMul(4,4,1,i,3);
	}
}

void ComputePrespectiveProjection(){
	double _div;
	for(int i=1;i<=18;i++){
		_div = line[i][2]/d;
		for(int j = 0;j<3;j++){
			prespective[i][j] = line[i][j]/_div;
		}
		_div = line[i][5]/d;
		for(int j = 3;j<6;j++){
			prespective[i][j] = line[i][j]/_div;
		}
	}

}
int proj()
{
	scan();
	init();
	compute();
	MakeCameraMatrix();
	ComputeCameraCoordinate();
	ComputePrespectiveProjection();
	print();
 //return 0;
}



//code ends here

void func() {
   // proj();
	glClearColor(0, 0, 0, 0);
	glClear(GL_COLOR_BUFFER_BIT);


	glBegin(GL_LINES);
	glVertex2f(-100.0 / SF, 700 / SF);
	glVertex2f( 100.0 / SF, 700 / SF);
	glVertex2f( 100.0 / SF, 700 / SF);
	glVertex2f( 100.0 / SF, 500 / SF);
	glVertex2f( 100.0 / SF, 500 / SF);
	glVertex2f(-100.0 / SF, 500 / SF);
	glVertex2f(-100.0 / SF, 500 / SF);
	glVertex2f(-100.0 / SF, 700 / SF);

	glVertex2f(-50 / SF, 0 / SF);
	glVertex2f(-50 / SF,500 / SF);
	glVertex2f(-150 / SF, 0 / SF);
	glVertex2f(-500 / SF,400 / SF);
	glVertex2f(-500 / SF,400 / SF);
	glVertex2f(-100 / SF,700 / SF);
	glVertex2f(-50 / SF, 0 / SF);
	glVertex2f(-400 / SF,400 / SF);
	glVertex2f(-400 / SF, 400 / SF);
	glVertex2f(-100 / SF,600 / SF);

	glVertex2f(50 / SF, 0 / SF);
	glVertex2f(50 / SF,500 / SF);
	glVertex2f(150 / SF, 0 / SF);
	glVertex2f(500 / SF,400 / SF);
	glVertex2f(500 / SF,400 / SF);
	glVertex2f(100 / SF,700 / SF);
	glVertex2f(50 / SF, 0 / SF);
	glVertex2f(400 / SF,400 / SF);
	glVertex2f(400 / SF, 400 / SF);
	glVertex2f(100 / SF,600 / SF);


	glEnd();
	glFlush();
	proj();
}

int main(int argc, char **argv) {
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE);
	glutInitWindowSize(400, 400);
	glutInitWindowPosition(50, 50);
	glutCreateWindow("GVC LAB TEST 1");
	glutDisplayFunc(func);
	glutMainLoop();
	return 0;
}