| Current Path : /var/www/html/venkat/check3/file/cg2013/pawan/ |
| 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;
}