Opengl Oyun Geliştirme Serileri-1

Flap

rubiconnetwork.keyubu.com
Mesajlar
94
En iyi cevaplar
0
Beğeniler
51
Puanları
300
Ruh hali
Hepinize merhaba arkadaşlar biliyorsunuz ki eskiden de buralardaydım, her neyse o zamanlar bitiremediğim Geliştirme serilerini tekrar başlatıyorum. Eğer yetkili arkadaşlar yapabilirse bu konuyu oyun geliştirme bölümüne taşısınlar. (Orada açmaya yetkim yok.)

İnternetten Freeglut'un, nasıl Visuall Studio'da Devc++'ya kurulacağını bulabilirsiniz (İngilizce aramayla Türkçe kurulum yok.)

Glut ile Freeglutun farkına gelecek olursanız. Glut 1999'dan beri güncellenmememiştir . FreeGlut 2003'ten beri sürekli güncellenir ve Gluta göre daha fazla özelliğe sahiptir. Freeglutun çıkma nedeni ise ücretsiz olmak değil Glutda ücretsiz fakat Glut'un telif hakkı sorunları vardı örneğin koda müdahele ederseniz Glutun yayınlamanıza izin vermiyordu. Fakat Freeglut tamamen açık kaynak ve ingilizcede freenin iki anlamı var ücertsizlik ve özgürlük burda özgürglut anlamında kullanılmış. Freeglut %100 açık kaynak kodlu Glut ise %50 açık kaynak böyle düşünün. Freeglut ticari oyunlara izin verirken (oyununuzu parayla satmaya izin veriyor) Glut ise kendi uygulamanızın kaynak kodunu paylaşmak kaydı ile izin veriyor. Glut Mark J. Kilgard tarafından yazılıp Freeglut ise Paweł W. Olszta tarafından yazıldı. Anlayacağınız FreeGlut daha avantajlı.


Şimdi Konuya geri dönelim:
Bugun ekrana bir üçgen çizeceğiz. Oyunda klavyeyeyle hareket eklenecektir

Not: bu bilgi serileri kitap formatında olacaktır.

Yaptıktan sonra pekiştirmeler: üçgene animasyon eklemek rengini değiştirmek.

Burda kullanacağımız değişlenlerin açıklamaları ise şunlar: tra_x = oyuncunun x kordinatı tra_y = oyuncunun y kordinatı tra_z = oyuncunun z kordinatıdır
Burda kullanacağımız fonksiyonların açıklamaları ise şunlar: GlutPostRedisplay = yeniden sahneyi renderler glutInit = openglyi başlatır glutKeyboardFunc = klavyeyi bağlayacağımız yer glClearColor = arkaplan rengi (gökyüzü) glEnable(GL_DEPTH_TEST); = nesnelerin birbirinin icinden gorunmesini engeller.
:rank:

Çalmayın haa :D
Kodumuza gelecek olursak:
C++:
#include <GL/glut.h>
#include <GL/freeglut.h>
#include <iostream>
#include <stdlib.h>     /* srand, rand */
#include <ctime>
//Kodu yazan: Flup
float tra_x = 0.0f;// Değişkenlerimiz
float tra_y = 0.0f;
float tra_z = -36.0f;
void render (){


  
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glTranslatef(tra_x,tra_y,tra_z); // yürüme kodu
  
glClearColor(0,0,1,0);
    glEnable(GL_DEPTH_TEST);

      

glPushMatrix(); // bu islemin diger islemlerden etkilenmesini engeller ayrıca burda yapılan islemler baska islemleri etkilemez orneginn burda glColor3f(1,0,0) yazdıysak bu kırmızı olcak ancak altaaki nesneler kırmızı olmayacak
glBegin(GL_POLYGON);// Bir polygon oluşturalım
//NOT Burdaki renk kodları rgb tarzıdır rgb kodunu örnek: 0.445 şekilde yapın  her rgb kodu olmuyor söliyim buna lut renk systemi diyorlar (lut editorle yapabilirsiniz renkleri)

glColor3f(1,0,0);//renk kodu
glVertex2i(0,2);
glColor3f(0,1,0);//renk kodu
glVertex2i(-1,0);
glColor3f(0,0,1);//renk kodu
glVertex2i(1,0);
glEnd();

glPopMatrix();
glutPostRedisplay(); //not bunu optimizasyon için kaldırabilirsiniz çünkü fazla ram yiyen bir fonksiyon
glFlush();
glutSwapBuffers();
}


void resize(int w, int h) //pencere buyutuldugunde nesnelerin boyutunun aynı kalmasını sağlar

{
    //buralları ellemeyin fazla
    glMatrixMode(GL_PROJECTION); // Projeksyon goruntu
    glLoadIdentity();

    glViewport(0, 0, w, h); // gorus

    gluPerspective(7.0f /* değer mutalaka 7.0f dır bu buyume sarsılması değeridir (grow shrink)*/, 1.0f /* 1.0f olmalıdır yeniden boyutlandırma float dır (resize_f)*/* w / h, 1.0f/* 1.0f olmalıdır yeniden boyutlandırma float dır (resize_f)*/, 100 *1.0f /* 1.0f olmalıdır yeniden boyutlandırma float dır (resize_f)*/) ;

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}


void keyboard(unsigned char key, int x, int y) // klavye fonksiyonu caselerde türkçe karakter kullanmayınız
{
    switch(key)
    {
        case 27 :
            exit(1);
            break;

          

        case 'w':
        case 'W':
      
                tra_z += 0.1f;


            break;
          
        case 's':
        case 'S':
            tra_z -= 0.1f;


            break;
        case 'd':
        case 'D':
      
        tra_x -= 0.1f;
      
  
      
            break;
          
              
        case 'a':
        case 'A':
      
      
        tra_x += 0.1f;
  
            break;

    case 'k':
        case 'K':
            tra_y -= 0.1f;
      
      
  
      
            break;
          
                case 'l':
        case 'L':
            tra_y += 0.1f;
      
      
  
      
            break;
          
                    case 'h':
        case 'H':
        std::cout << "X:" << tra_x <<  "Y:" << tra_y <<  "Z:" << tra_z;
      
      
  
      
            break;

    }
    glutPostRedisplay();
}

int // en önemli fonksiyon
main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutCreateWindow("Ilk Opengl Uygulamam");

  
    glutDisplayFunc(render); //renderleme
    glutReshapeFunc(resize); //yeniden boyutlandırma
glutKeyboardFunc(keyboard); //klavye

    glutMainLoop();
  
    return 0;
}
FREEGLUTU KURAMAYAN ARKADAŞLAR ICIN KURULUM ŞÖYLEDİR:
NOT BU VISUAL STUDIO ıcın kurulumdur DEVC++ ICIN VIDEOSU VAR ORDAN BAKIN
ILK OLARAK FREEGLUTUN SITESINDEN VisualStudio icin MSCV DevC++ icin MinGW
kuruyoruz.(En altlarda olması lazım)
VISUAL STUDIODA proje özelliklerine geliyoruz ordan önce Linker (bağlayıcı) ya gelip
Ek Kütüphane Dizinine ekleyeceğiz .lib diye olcak
Ardından kütüphane isinlerini yazıyoruz(Ek bağımlılıklara)
-opengl32.lib
-freeglut32.lib
-glu32.lib // glu 32lib olmassa sorun değil eklemezseniz bi şey olmuyor sadece kurulumu garantiye almak ıcın yazdım.
Ardından ek içerme dizinlerinden includeyi seçiyoruz.

en son olarak #include "GL/freeglut.h" ŞEKLİNDE Yada projenin direk icine atarak #include "freeglut.h" şeklinde yapabilirsiniz
 


Flap

rubiconnetwork.keyubu.com
Mesajlar
94
En iyi cevaplar
0
Beğeniler
51
Puanları
300
Ruh hali
yetkili arkadaşlaar konuyu oyun geliştirme bölümüne alırsa sevinirim
 

Üst