Don't like ads? PRO users don't see any ads ;-)
Guest

Ex: Basit bir ev yapımı (OpenGL(UT))

By: ahesgo on Jun 11th, 2012  |  syntax: C++  |  size: 4.88 KB  |  hits: 34  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include<gl/glut.h>
  2.  
  3. #include <cmath>
  4.  
  5. GLfloat           x=0.0f;  // x ekseni kordinat değiştirmek için
  6.  
  7. GLfloat           y=0.0f;   // buda  y ekseni kordinatları için
  8.  
  9. void Draw() {
  10.  
  11. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  // Ekranı ve belleği temizler
  12.  
  13. // Şekilllerimizin X ve Y eksenlerini normal kendimiz çizdirdik... fakat bunları hareket ettirirken...Hepsi bir bütün olarak hareket etmesi için
  14.  
  15. //yukarıda tanımladığımız x ve y değişkenleri ile topladım...bu x ve y değişkenleri değiştikçe tüm şekil koordine bir şekilde hareket etmiş olacak...
  16.  
  17. //altta aynı fonksiyonlar hep tekrar ettiği için burrda bir kerede açıklamakta fayda olacfağını düşündüm
  18.  
  19. // şekili çizmeden önce ona color fonksiyonu(Red green blue sıralaması ile) ile rengini atıyoruz....
  20.  
  21. // çizeceğimiz şekli begin blogu ile başlayıp end blogu ile bitiriyoruz...
  22.  
  23. // begine parametre olarak yazdığımız yerde ise şeklimizin tipini belirtiyoruz (çizgi üçgen kare vs.)
  24.  
  25. // son olarak da Vertex komutu ile cismimizin kordinatlarını belirtiyoruz(x y z)
  26.  
  27. //vertex de belirttiğimiz her kordinata bi nokta koyar ve onları birleştirerek şeklimizi ortaya koyar
  28.  
  29. //bunun için sırası önemlidir bi köşeden başlayıp sırayla gidilmelidir...
  30.  
  31. //aksi takdirde istenmedik sonuçlar doğurabilir...
  32.  
  33. //mesela benim ilk yaptığım çizimde evin gövdesini çizerken yan dönmüş m harfi gibi çıkmıştı...
  34.  
  35. //Duman
  36.  
  37. //j ile olan for halka sayısı için bu örnekte 25 halka var mesela
  38.  
  39. //alttaki for da ise 360 nokta yani 360 derece ile çemberimizi çiizdiriyoruz
  40.  
  41. for(int j=0;j<25;j++)
  42.  
  43. {
  44.  
  45. glColor3f(0.3,0.6,0.9);
  46.  
  47. glPointSize(3.0);
  48.  
  49. glBegin(GL_POINTS);
  50.  
  51. for(int i = 1; i < 360; i++)
  52.  
  53. {
  54.  
  55. float z = 0.025f * sin(((float)i) * 3.14 / 180);
  56.  
  57. float k = 0.025f * cos(((float)i) * 3.14 / 180);
  58.  
  59. glVertex2f(z+0.17f-j*0.022+x,k+0.43f+j*0.02+y);
  60.  
  61. }
  62.  
  63. }
  64.  
  65. glEnd();
  66.  
  67. //Baca
  68.  
  69. glColor3f(0.3,0.2,0.1);
  70.  
  71. glBegin(GL_QUADS);
  72.  
  73. glVertex3f(x+0.12f,y+0.4f,0.0f);
  74.  
  75. glVertex3f(x+0.2f,y+0.4f,0.0f);
  76.  
  77. glVertex3f(x+0.2f,y-0.2f,0.0f);
  78.  
  79. glVertex3f(x+0.12f,y-0.2f,0.0f);
  80.  
  81. glEnd();
  82.  
  83. //Çatı
  84.  
  85. glColor3f(0.9,0.0,0.0);
  86.  
  87. glBegin(GL_QUADS);
  88.  
  89. glVertex3f( x-0.25f,y+0.25f, 0.0f);
  90.  
  91. glVertex3f( x+0.25f,y+0.25f, 0.0f);
  92.  
  93. glVertex3f( x+0.3f, y+0.1f, 0.0f);
  94.  
  95. glVertex3f( x-0.3f, y+0.1f, 0.0f);
  96.  
  97. glEnd();
  98.  
  99. //Evin dörtgeni
  100.  
  101. glColor3f(0.7,0.8,0.9);
  102.  
  103. glBegin(GL_QUADS);
  104.  
  105. glVertex3f(x-0.3f,y+0.1f,0.0f);
  106.  
  107. glVertex3f(x+0.3f,y+0.1f,0.0f);
  108.  
  109. glVertex3f(x+0.3f,y-0.5f,0.0f);
  110.  
  111. glVertex3f(x-0.3f,y-0.5f,0.0f);
  112.  
  113. glEnd();
  114.  
  115. //Kapı
  116.  
  117. glColor3f(0.0,0.0,0.9);
  118.  
  119. glBegin(GL_QUADS);
  120.  
  121. glVertex3f(x-0.02f,y-0.15f,0.0f);
  122.  
  123. glVertex3f(x+0.23f,y-0.15f,0.0f);
  124.  
  125. glVertex3f(x+0.23f,y-0.5f,0.0f);
  126.  
  127. glVertex3f(x-0.02f,y-0.5f,0.0f);
  128.  
  129. glEnd();
  130.  
  131. //Pencere
  132.  
  133. glColor3f(1.0,0.5,0.5);
  134.  
  135. glBegin(GL_QUADS);
  136.  
  137. glVertex3f(x-0.25f, y-0.15f,0.0f);
  138.  
  139. glVertex3f(x-0.05f, y-0.15f,0.0f);
  140.  
  141. glVertex3f(x-0.05f, y+0.0f,0.0f);
  142.  
  143. glVertex3f(x-0.25f, y+0.0f,0.0f);
  144.  
  145. glEnd();
  146.  
  147. //Perde Soldaki
  148.  
  149. glColor3f(0.4,0.0,0.0);
  150.  
  151. glBegin(GL_TRIANGLES);
  152.  
  153. glVertex3f( x-0.15f, y+0.0f, 0.0f);
  154.  
  155. glVertex3f( x-0.25f, y+0.0f, 0.0f);
  156.  
  157. glVertex3f( x-0.25f, y-0.15f, 0.0f);
  158.  
  159. glEnd();
  160.  
  161. //Sağdaki Perde
  162.  
  163. glColor3f(0.4,0.0,0.0);
  164.  
  165. glBegin(GL_TRIANGLES);
  166.  
  167. glVertex3f( x-0.15f, y+0.0f, 0.0f);
  168.  
  169. glVertex3f( x-0.05f, y+0.0f, 0.0f);
  170.  
  171. glVertex3f( x-0.05f, y-0.15f, 0.0f);
  172.  
  173. glEnd();
  174.  
  175. //Kapı Kolu
  176.  
  177. glColor3f(0.3,0.6,0.4);
  178.  
  179. glPointSize(4.0);
  180.  
  181. glBegin(GL_POINTS);
  182.  
  183. for(int i = 1; i < 360; i++)
  184.  
  185. {
  186.  
  187. float z = 0.025f * sin(((float)i) * 3.14 / 180);
  188.  
  189. float k = 0.025f * cos(((float)i) * 3.14 / 180);
  190.  
  191. glVertex2f(z+0.17f+x,k-0.35f+y);
  192.  
  193. }
  194.  
  195. glEnd();
  196.  
  197. glFlush();
  198.  
  199. }
  200.  
  201. void Initialize()
  202.  
  203. {
  204.  
  205. glShadeModel(GL_SMOOTH); // Enable Smooth Shading
  206.  
  207. glClearColor(0.0f, 0.5f, 0.0f, 1.0f);   // Green Background
  208.  
  209. glClearDepth(1.0f);     // Depth Buffer Setup
  210.  
  211. glEnable(GL_DEPTH_TEST);  //Enables Depth Testing
  212.  
  213. glDepthFunc(GL_LEQUAL);  // The Type Of Depth Testing To Do
  214.  
  215. glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);  // Really Nice Perspective Calculations
  216.  
  217. }
  218.  
  219. //Buradada yön tuşlarımmızı belirledik
  220.  
  221. //w-a-s-d ve büyük harfleride tanımladık ki capslock açıksa sorun çıkmasın...:)
  222.  
  223. //buradaki 0.1 değeri ile oynayarak hareket hassasiyetiyle oynayabiliriz.. ben 0.1 i ideal gördüm...
  224.  
  225. void keybFunc(unsigned char k, int a, int b)
  226.  
  227. {
  228.  
  229. if(k == 'd' || k == 'D' ) x += 0.1f;
  230.  
  231. if(k == 'a' || k == 'A') x -= 0.1f;
  232.  
  233. if(k == 'w' || k == 'W') y += 0.1f;
  234.  
  235. if(k == 's' || k == 'S') y -= 0.1f;
  236.  
  237. glutPostRedisplay();
  238.  
  239. }
  240.  
  241. int main(int iArgc, char** cppArgv)
  242.  
  243. {
  244.  
  245. glutInit(&iArgc,cppArgv);
  246.  
  247. glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
  248.  
  249. glutInitWindowSize(600,600);
  250.  
  251. lutInitWindowPosition(20,20);
  252.  
  253. glutCreateWindow("Berdem");
  254.  
  255. Initialize();
  256.  
  257. glutDisplayFunc(Draw);
  258.  
  259. glutKeyboardFunc(keybFunc);
  260.  
  261. glutMainLoop();
  262.  
  263. return 0;
  264.  
  265. }