C++ / OpenGL [ 15 – SOIL ]

SOIL.h

soil texturelarimizi kolaylikla yukleyebilmemize yarayan yardimci bir c kutuphanesi;

soil hosunuza gitmezse kendi resim yukleme kutuphanenizi olusturabilir yada baska yardimci kutuphanelerden

yararlanabilirsiniz sonuc olarak mantik ayni.

http://www.lonesock.net/soil.html

// kendi sitesinde kullanilabilecek methodlar ve bilgilere ulasabilirsiniz.

SOIL .lib yuklemesi VStudio kullananlar icin biraz zor olacagi icin ben buraya hazir kutuphaneleri yukluyorum;

VS8 kutuphanesi icin; //VS8 vs2010 ve 2012 desteklemekte.

SOILv8_lib

VS9 kutuphanesi icin;

SOILv9_lib

ve Header dosyasi;

SOIL_H

Kendi orjinal dosyasini indirmek isteyenler icin;

http://www.lonesock.net/files/soil.zip

kendi orjinal dosyasinda bulunan project kismindan kutuphaneleri yaratabilirsiniz.

SOIL KURULUM

glut kurulumu icin takip ettigimiz ayni yolu izleyecegiz;

lib dosyasi icin VS8 ,VS9,VS10,VS11 hangisini kullaniyosaniz inc dosyasi icine

Microsoft Visual Studio kullananlar icin C://program files (x86 yada program files/)/Microsoft Visual Studio (8,9,10,11.0)/VC/lib/  

Header .h dosyasi icin ise include klasorunun icine ekliyoruz.

Microsoft Visual Studio kullananlar icin C://program files (x86 yada program files/)/Microsoft Visual Studio (8,9,10,11.0)/VC/include/

#include <SOIL.h>   //kutuphaneyi cagiriyoruz.

.lib dosyasini istersek linker ilen program icine aciyoruz yada elimizle programa dahil ediyoruz;

#pragma comment(lib, “SOIL.lib”)

Eger kurulumdan sonra programimizi calistirdigimizda ;

1> LINK : C:\Users\Erym\Desktop\Projects\erimicel.com\Debug\erimicel.com.exe not found or not built by the last incremental link; performing full link
1>SOIL.lib(stb_image_aug.obj) : error LNK2019: unresolved external symbol ___report_rangecheckfailure referenced in function _stbi_decode_DXT1_block
1>C:\Users\Erym\Desktop\Projects\erimicel.com\Debug\erimicel.com.exe : fatal error LNK1120: 1 unresolved externals

Hatasi alirsak VStudioda sol pencerede bulunan projemizin uzerine sag tikliyoruz >Ayarlara geliyoruz > Linker >Comman line > ordaki bosluga

/NODEFAULTLIB:msvcrtd   yaziyoruz.

Bazi hatalardan dolayi ileriki zamanlarda baska bir yardimci texture kutuphanesini kullanicagiz.

Kurulumu tamamladigimiza gore ilk ornegimize gecebiliriz;
kutuphanelerimizi ekliyoruz.

[c language=”++”]
#include <windows.h>
#include <gl\gl.h>
#include <gl\glu.h>
#include <glut.h>
#include <math.h> // Matematik islemleri icin cos sin etc.
// SOIL kutuphanemizi ekledik.
#include <SOIL.h>

#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) //Command Ekrani Kapamak Icin
#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "SOIL.lib") // .lib kutuphanemizi bagladik.
[/c]

gerekli degiskenlerimizi ekliyoruz;

[c language=”++”]
//Texturelarimizi tutacak dizimiz.
GLuint texture[1];
[/c]

resimlerimizi yuklememiz icin gereken fonksiyonumuzu olusturuyoruz.

[c language=”++”]
int LoadGLTextures()
{
texture[0] = SOIL_load_OGL_texture
(
"1.png",
SOIL_LOAD_AUTO,
SOIL_CREATE_NEW_ID,
SOIL_FLAG_INVERT_Y
);

if(texture[0] == 0)
return false;

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );

glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE, GL_TEXTURE);

//islem tamamlandi raporu
return true;
}
[/c]

yukaridaki fonksiyonda goruldugu uzere SOIL kutuphanesi yardimiyla 1.png adli resmimizi
programimizin icine dahil ettik.
1.png dosyamiz (jpg,bmp…) degisebilir, projemizin ana.cpp dosyamizin bulundugu klasorde olmasi gerekmekte.

parametrelerimizide tanimladiktan sonra devam ediyoruz;
resize ve ayarlar fonksiyonlarimiz;

[c language=”++”]
// Resize ayarlari
GLvoid ReSizeGLScene(GLsizei width, GLsizei height)
{
if (height==0)
{
height=1;
}

glViewport (0, 0, (GLsizei) width, (GLsizei) height);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective(60.0, (GLfloat) width/(GLfloat) height, 1.0, 200.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

}
// GL Ayarlari
int Ayarlar(GLvoid) {

glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // Arkaplan Siyah

if (!LoadGLTextures())
{
return FALSE;
}

glClearDepth( 1.0f );
glShadeModel( GL_SMOOTH );
glDepthFunc(GL_LEQUAL);
glEnable(GL_TEXTURE_2D);
glEnable( GL_DEPTH_TEST );

return TRUE; // yukleme tamamlandimi
}
[/c]

Ayarlar kisminda glEnable(GL_TEXTURE_2D); komutu ile kaplamamizi actik.

daha sonra displayimizi olusturuyoruz.

[c language=”++”]
void display(void) {

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity ();

glTranslatef(0.0f,0.0f,-5.0f);
glRotatef(60.0, 0.0, 1.0, 1.0);

glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

glBegin(GL_QUADS);
// Front Face
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
// Back Face
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
// Top Face
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
// Bottom Face
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
// Right face
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
// Left Face
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
glEnd();

glutSwapBuffers ();

}
[/c]

burada bindTexture ilen kaplanacak dokumuzu sectik ve altinda kalan kup seklindeki cismimize kapladik.

en son olarak ana fonksiyonumuzu yaziyoruz;

[c language=”++”]
int main(int argc, char *argv[])
{

glutInit(&argc, argv);
glutInitWindowSize(800,600);
glutInitWindowPosition(0,0);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Baslik");

Ayarlar();
glutDisplayFunc(display);
glutReshapeFunc(ReSizeGLScene);

glutMainLoop();
free(texture);
return 0;

}
[/c]

Projemizin goruntusu;
ders15_soil

 

Ders sonunda olusturdugumuz projenin .cpp kaynak dosyasini buradan indirebilirsiniz.

ders15

 

2 comments

  1. merhaba
    gerçekten çok güzel bir yazı olmuş teşekkürler 🙂
    dediklerinizi yaptım ama gene de bu hatam düzelmedi sizde neden olabilir
    1>C:\Users\ELİF\Documents\Visual Studio 2012\Projects\proje\Debug\Project1.exe : fatal error LNK1120: 1 unresolved externals

    diğer sitelerde de sizin koyduğunuz .lib dosylarını v8 ve v9 a göre built etmeyi çözüm olarak göstermiş
    v8 ve v9 u denememe rağmen düzelmedi 🙁 visiual studio 2012 kullanıyorum

    • pardon yanlış error u koymuşum bu olcak 😀
      1>SOIL.lib(stb_image_aug.o) : error LNK2019: unresolved external symbol __alloca referenced in function _stbi_zlib_decode_noheader_buffer
      teşekkürler

Leave a Reply

Your email address will not be published. Required fields are marked *