C++ Oyun Motorunuzu Yazın Serisi Bölüm 4 Shader I İlk Motorumu Yazıyorum Bitti

TRPixelServer

YASAKLANDI
Mesajlar
47
En iyi cevaplar
0
Beğeniler
47
Puanları
70
Ruh hali
Arkadaşlar daha önceki projeniz malesef bozuk olduğundan sıfırdan yazmak zorunda kaldım.Size parıltı gibi pek çok özelliğin olduğu Kendi demomu vereceğim.
Bu çok basit bir shader sonraki bölümde Gölgeleri göstereceğim bu arada bilgi vereceğim burdaki yazılar openglnin resmi sitesinde verilen kodların türkçeye uyarlanmış ve dahada geliştirilmiş halidir örneğin openglnin sitesinde verilen ışıklandırma shader demosunda hareket etme yoktu mesela ben ekledim bölece bu ortamda hareket edebildik. Kodları dahada optimize edip sizlere sunuyorum bu arada bu kodların daha güzel versiyonlarını mesajlara yazabilirsiniz. Görüntülenme fazla mesaj yok.
C++:
#include <stdlib.h>
#include <GL/glut.h>

int Tx = 0;
int Ty = 0;
int Tz = 0;
int mouseDown = 0;

float xrot = 100.0f;
float yrot = -100.0f;

float xdiff = 100.0f;
float ydiff = 100.0f;


float grow_shrink = 70.0f;
float resize_f = 1.0f;
using namespace std;



void Pyramid(int x,int y,int z)
{

    
    glTranslatef(x,y,z);
    glBegin(GL_POLYGON);
    
    

    glColor3f(1.0f, 0.0f, 0.0f);
    // FRONT
glVertex3f(-1.000000,0.000000,0.976219);
glVertex3f(1.000000,0.000000,1.000000);
glVertex3f(-1.000000,0.000000,-1.000000);
glVertex3f(1.000000,0.000000,-1.000000);
glVertex3f(-0.025518,-1.178359,0.010958);
    
    
    glEnd();
}

        

    



void init(void)
{
   GLfloat ambient[] = { 0.0, 0.0, 0.0, 1.0 };
   GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
  
   GLfloat specular[] = { 1.0, 1.0, 1.0, 1.0 };
   GLfloat position[] = { 0.0, 3.0, 2.0, 0.0 };
   GLfloat lmodel_ambient[] = { 0.4, 0.4, 0.4, 1.0 };
   GLfloat local_view[] = { 0.0 };

   glClearColor(0.0, 0.1, 0.1, 0.0);
   glEnable(GL_DEPTH_TEST);
   glShadeModel(GL_SMOOTH);

   glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
   glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
   glLightfv(GL_LIGHT0, GL_POSITION, position);
   glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
   glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view);

   glEnable(GL_LIGHTING);
   glEnable(GL_LIGHT0);
}






void display(void)
{

   GLfloat no_mat[] = { 0.0, 0.0, 0.0, 1.0 };
   GLfloat mat_ambient[] = { 0.7, 0.7, 0.7, 1.0 };
   GLfloat mat_ambient_color[] = { 0.8, 0.8, 0.2, 1.0 };
     GLfloat diffuse_wood[] = { 0.941, 0.902, 0.549};
   GLfloat mat_diffuse[] = { 0.1, 0.5, 0.8, 1.0 };
      GLfloat mat_red_diffuse[] = { 5.1, 0.0, 0.0, 1.0 };
   GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
   GLfloat no_shininess[] = { 0.0 };
   GLfloat low_shininess[] = { 5.0 };
   GLfloat high_shininess[] = { 100.0 };
   GLfloat mat_emission[] = {0.3, 0.2, 0.2, 0.0};
     GLfloat diffuse_KIRMIZI[] = { 10.941, 0,0};
          GLfloat diffuse_conc[] = {0.827, 0.827, 0.827};
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);




   glPushMatrix();
   glTranslatef (1.25, 3.0, 0.0);
glRotatef(xrot, 1.0f, 0.0f, 0.0f);
glRotatef(yrot, 0.0f, 1.0f, 0.0f);
    glTranslatef(Tx,Ty,Tz);
   glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);
   glMaterialfv(GL_FRONT, GL_DIFFUSE,  mat_diffuse);
   glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
   glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
   glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);


        glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess);
glMaterialfv(GL_FRONT, GL_DIFFUSE,  diffuse_wood);
   glScalef(10,5,10);
   glTranslatef(0,-1,0);
glutSolidCube(1);


   glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);
   glMaterialfv(GL_FRONT, GL_DIFFUSE,  mat_diffuse);
   glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
   glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
   glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);


        glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess);
glMaterialfv(GL_FRONT, GL_DIFFUSE,  diffuse_KIRMIZI);
glScalef(10,0.1,10);
glutSolidCube(1);
   glPopMatrix();

   glFlush();
}

void sekillen(int w, int h)
{
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    glViewport(0, 0, w, h);

    gluPerspective(grow_shrink, resize_f * w / h, resize_f, 100 * resize_f);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

void klavye(unsigned char key, int x, int y)
{
   switch (key) {
      case 27:
         exit(0);
         break;
           case 'w':
        case 'W':
            Tz --;

  
            break;
                   case 's':
        case 'S':
            Tz ++;

  
            break;
            case 'a':
            case 'A':
            Tx --;

  
            break;
            
            case 'D':
            case 'd':
            Tx ++;


            break;
            
            case 'E':
            case 'e':
            Ty ++;

  
            break;
            
                        case 'Q':
            case 'q':
            Ty --;

  
            break;
            
        
    }
    glutPostRedisplay();
}

void fare(int button, int state, int x, int y)
{
    if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
    {
        mouseDown = 1;

        xdiff = x - yrot;
        ydiff = -y + xrot;
    }
    else
        mouseDown = 0;
}

void mouseHareket(int x, int y)
{
    if (mouseDown)
    {
        yrot = x - xdiff;
        xrot = y + ydiff;

        glutPostRedisplay();
    }
}

int main(int argc, char** argv)
{
   glutInit(&argc, argv);
   glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
   glutInitWindowSize (600, 450);
   glutCreateWindow(argv[0]);
   init();
   glutReshapeFunc(sekillen);
       glDepthFunc(GL_LEQUAL);
    glClearDepth(1.0f);
    
   glutDisplayFunc(display);
   glutKeyboardFunc (klavye);
       glutMouseFunc(fare);
    glutMotionFunc(mouseHareket);
   glutMainLoop();
   return 0;
}

Kodda oluşacak hatalar için geri bildirimde bulunun konuyu 24 saat sonra düzeltirim...
 


TRPixelServer

YASAKLANDI
Mesajlar
47
En iyi cevaplar
0
Beğeniler
47
Puanları
70
Ruh hali
Bu seri bitmedi sadece sezonu bitti bilmeyenler icin sadece seri molaya gecti
 

Üst