C'de OpenGl etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
C'de OpenGl etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

29 Kasım 2009 Pazar

OpenGl - 3D

//3D cismi öteleme,döndürme,yansıtma ve ölçekleme
#include <GL/glut.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <math.h>
#include <stdio.h>

void menu(void);
void cizim();
void olcekayar();
void otelemeayar();
void yansimaayar();
void dondurmeayar();

float deger1;
float deger2;
float deger3;
float matris[8][4]={{0,0,1,1},
{1,0,1,1},
{1,0,0,1},
{0,0,0,1},
{1,1,1,1},
{0,1,1,1},
{1,1,0,1},
{0,1,0,1}};


int main(int argc, char **argv)
{
int sec;

menu();
scanf("%d",&sec);

glutInit(&argc, argv);

glutInitWindowSize(1000,1000);

if(sec==1){

olcekayar();
glutCreateWindow("OLCEKLENMIS 3D");
glutDisplayFunc(cizim);

}

else if(sec==2){

otelemeayar();
glutCreateWindow("OTELENMIS 3D");
glutDisplayFunc(cizim);

}

else if(sec==3){

yansimaayar();
glutCreateWindow("YANSIMIS 3D");
glutDisplayFunc(cizim);

}

else if(sec==4){

dondurmeayar();
glutCreateWindow("DONDURULMUS 3D");
glutDisplayFunc(cizim);

}

glutMainLoop();

return(0);
}

OpenGl - 3D Ölçekleme

void olcekayar(){

int i,j;

printf("\nolcekleme x degerini giriniz(0.x seklinde):");
scanf("%f",&deger1);
printf("\nolcekleme y degerini giriniz(0.x seklinde):");
scanf("%f",&deger2);
printf("\nolcekleme z degerini giriniz(0.x seklinde):");
scanf("%f",&deger3);

for(i=0;i<8;i++)
matris[i][0]=matris[i][0]*deger1;

for(i=0;i<8;i++)
matris[i][1]=matris[i][1]*deger2;

for(i=0;i<8;i++)
matris[i][2]=matris[i][2]*deger3;

for(i=0;i<8;i++){
printf("\n");
for(j=0;j<4;j++){
printf("%f ",matris[i][j]);}}
}

OpenGl - 3D Yansıma

void yansimaayar(){

int i,secim,j;

printf("\nhangi duzleme gore yansima\n");
printf("\n1- yz duzlemine gore yansima\n");
printf("\n2- xz duzlemine gore yansima\n");
printf("\n3- xy duzlemine gore yansima\n");
scanf("%d",&secim);


if(secim==1){

for(i=0;i<8;i++)
matris[i][0]=matris[i][0]*(-1);
}

else if(secim==2){
for(i=0;i<8;i++)
matris[i][1]=matris[i][1]*(-1);
}
else if(secim==3){
for(i=0;i<8;i++)
matris[i][2]=matris[i][2]*(-1);
}

for(i=0;i<8;i++){
printf("\n");
for(j=0;j<4;j++){
printf("%f ",matris[i][j]);}}
}

OpenGl - 3D Döndürme

void dondurmeayar(){

int i,j,k,secim;
float mtrs[8][4]={0},aci;

printf("\ndondurme acisini giriniz:");
scanf("%f",&aci);

printf("\nhangi eksen etrafinda dondurme\n");
printf("\n1- x ekseni etrafinda dondurme\n");
printf("\n2- y ekseni etrafinda dondurme\n");
printf("\n3- z ekseni etrafinda dondurme\n");
scanf("%d",&secim);


if(secim==1){
float deger[4][4]={{1,0,0,0},
{0,cos(aci*3.14/180),sin(aci*3.14/180),0},
{0,sin(aci*3.14/180)*(-1),cos(aci*3.14/180),0},
{0,0,0,1}};

for(i=0;i<8;i++)
for(j=0;j<4;j++)
for(k=0;k<4;k++)
mtrs[i][j]=mtrs[i][j] + (matris[i][k])*(deger[k][j]);
}

else if(secim==2){
float deger[4][4]={{cos(aci*3.14/180),0,sin(aci*3.14/180)*(-1),0},
{0,1,0,0},
{sin(aci*3.14/180),0,cos(aci*3.14/180),0},
{0,0,0,1}};

for(i=0;i<8;i++)
for(j=0;j<4;j++)
for(k=0;k<4;k++)
mtrs[i][j]=mtrs[i][j] + (matris[i][k])*(deger[k][j]);
}

else if(secim==3){
float deger[4][4]={{cos(aci*3.14/180),sin(aci*3.14/180),0,0},
{sin(aci*3.14/180)*(-1),cos(aci*3.14/180),0,0},
{0,0,1,0},
{0,0,0,1}};

for(i=0;i<8;i++)
for(j=0;j<4;j++)
for(k=0;k<4;k++)
mtrs[i][j]=mtrs[i][j] + (matris[i][k])*(deger[k][j]);
}


for(i=0;i<8;i++)
for(j=0;j<4;j++)
matris[i][j]=mtrs[i][j];

for(i=0;i<8;i++){
printf("\n");
for(j=0;j<4;j++){
printf("%f ",matris[i][j]);}}

}

OpenGl - 3D Öteleme

void otelemeayar(){

int i,j;

printf("\noteleme degerini giriniz:(0.x seklinde)");
scanf("%f",&deger1);
printf("\noteleme degerini giriniz:(0.x seklinde)");
scanf("%f",&deger2);
printf("\noteleme degerini giriniz:(0.x seklinde)");
scanf("%f",&deger3);


for(i=0;i<8;i++)
matris[i][0]=matris[i][0]+deger1;

for(i=0;i<8;i++)
matris[i][1]=matris[i][1]+deger2;

for(i=0;i<8;i++)
matris[i][2]=matris[i][2]+deger3;

for(i=0;i<8;i++){
printf("\n");
for(j=0;j<4;j++){
printf("%f ",matris[i][j]);}}
}

OpenGl - 3D Menü ve Çizim Fonksiyonu

void menu(void){
printf("\n 1- OLCEKLEME\n");
printf("2- OTELEME\n");
printf("3- YANSIMA\n");
printf("4- DONDURME\n");
printf("seciminizi giriniz");
}


void cizim(){//çizim

glClear(GL_COLOR_BUFFER_BIT);
glColor3f (1,1,1);
glBegin(GL_POLYGON);
glVertex3f(matris[0][0], matris[0][1], matris[0][2]);
glVertex3f(matris[1][0], matris[1][1], matris[1][2]);
glVertex3f(matris[2][0], matris[2][1], matris[2][2]);
glVertex3f(matris[3][0], matris[3][1], matris[3][2]);
glVertex3f(matris[4][0], matris[4][1], matris[4][2]);
glVertex3f(matris[5][0], matris[5][1], matris[5][2]);
glVertex3f(matris[6][0], matris[6][1], matris[6][2]);
glVertex3f(matris[7][0], matris[7][1], matris[7][2]);

glEnd();

glFlush();
}

25 Kasım 2009 Çarşamba

OpenGl - İzometrik Projeksiyon İşlemi

#include <GL/glut.h>
#include <stdio.h>
#include <math.h>

void izo();
void izoayar();

float matris[10][4]={{0,0,1,1},
{1,0,1,1},
{1,0.5,1,1},
{0.5,1,1,1},
{0,1,1,1},
{0,0,0,1},
{1,0,0,1},
{1,1,0,1},
{0,1,0,1},
{1,1,0.5,1}};//örnek matris



int main(int argc, char **argv)
{
glutInit(&argc, argv);
izoayar();
glutCreateWindow("IZOMETRIK PROJEKSIYON");
glutDisplayFunc(izo);

glutMainLoop();

return(0);
}


void izoayar(){

int i,j,k;
float mtrs[10][4]={0}, y=-45, x=35.26;

float tytxti[4][4]={{cos(y*3.14/180) , sin(y*3.14/180)*sin(x*3.14/180) , 0 , 0} ,
{0 , cos(x*3.14/180) , 0 , 0} ,
{sin(y*3.14/180) , cos(y*3.14/180)*sin(x*3.14/180)*(-1) , 0 , 0} ,
{0 , 0 , 0 , 1}};//transform matrisi


//matris çarpımı
for(i=0;i<10;i++)
for(j=0;j<4;j++)
for(k=0;k<4;k++)
mtrs[i][j]=mtrs[i][j] + matris[i][k]*tytxti[k][j];

for(i=0;i<10;i++){
for(j=0;j<4;j++){
matris[i][j]=mtrs[i][j];
printf("%9f",matris[i][j]);}
printf("\n\n");}//ekrana x' matrisinin değerlerini yazıyor

}

void izo(){//çizim

glClear(GL_COLOR_BUFFER_BIT);
glColor3f (1,1,1);
glBegin(GL_POLYGON);
glVertex2f (matris[0][0], matris[0][1]);
glVertex2f (matris[1][0], matris[1][1]);
glVertex2f (matris[2][0], matris[2][1]);
glVertex2f (matris[3][0], matris[3][1]);
glVertex2f (matris[4][0], matris[4][1]);
glVertex2f (matris[5][0], matris[5][1]);
glVertex2f (matris[6][0], matris[6][1]);
glVertex2f (matris[7][0], matris[7][1]);
glVertex2f (matris[8][0], matris[8][1]);
glVertex2f (matris[9][0], matris[9][1]);

glEnd();

glFlush();
}