Bölüm 1: İlk Görüntü Çıktısı (PPM)
Bir render motoru yazmaya başlarken ihtiyacımız olan ilk şey, ürettiğimiz pikselleri ekranda görebileceğimiz bir resim dosyasına dönüştürmektir.
Genellikle bir PNG veya JPEG dosyası yazmak için harici bir kütüphaneye (stb_image_write, libpng vb.) ihtiyaç duyarsınız. Ancak biz işe sıfır bağımlılıkla başlamak istiyoruz. İşte bu yüzden dünyanın en basit, düz metin tabanlı görsel formatı olan PPM (Portable Pixmap) ile başlayacağız!
PPM Dosya Formatı Nedir?
PPM, ASCII metin formatında saklanan bir resim dosyasıdır. Wikipedia veya herhangi bir metin düzenleyicide açtığınızda doğrudan okunabilir.
Bir PPM dosyasının anatomisi şöyledir:

P3: Dosyanın düz metin (ASCII) renkli PPM formatında olduğunu belirten sihirli bayt.- Genişlik ve Yükseklik: Görselin piksel cinsinden boyutları (örneğin
256 256). - Maksimum Renk Değeri: Her bir renk kanalının alabileceği tavan değer (genellikle
255). - Piksel Verileri: Soldan sağa, yukarıdan aşağıya doğru her bir pikselin
Kırmızı Yeşil Mavi(R G B) tamsayı değerleri.
İlk C++ Programımız: Renk Gradyanı
Aşağıdaki program \(256 \times 256\) boyutlarında bir renk gradyanı oluşturur. Kırmızı kanal soldan sağa doğru artarken, yeşil kanal yukarıdan aşağıya doğru azalır; mavi kanal ise sabit tutulur.
Kodun İncelenmesi:
r,g,bdeğişkenleri \([0.0, 1.0]\) aralığında kayan noktalı (double) değerlerdir.255.999ile çarpıpint'e dönüştürdüğümüzde değerler tam olarak \([0, 255]\) tamsayı aralığına oturur.- Standart çıktı (
std::cout) doğrudan terminale PPM metnini basar.
Çıktıyı Dosyaya Yönlendirme
Programınızı derleyip çalıştırdığınızda konsolunuz milyonlarca sayı ile dolup taşacaktır. Bunun yerine işletim sisteminizin çıktı yönlendirme (>) operatörünü kullanarak çıktıyı bir dosyaya aktarırız:
# Programı derleyin
g++ -O3 main.cc -o inOneWeekend
# Çıktıyı image.ppm dosyasına yazdırın
./inOneWeekend > image.ppm
Oluşan image.ppm dosyasını Photoshop, GIMP, VS Code (PPM Viewer eklentisi ile) veya web tabanlı herhangi bir PPM görüntüleyici ile açtığınızda şu güzel gradyanı göreceksiniz:

İlerleme Göstergesi Eklemek (std::clog)
İlerleyen bölümlerde sahnemize yüzlerce ışın ve yansıma eklediğimizde render işlemi birkaç saniye (hatta dakika) sürebilir. Programın donup donmadığını anlamak için bir ilerleme çubuğu eklemek harika bir fikirdir.
Peki bu ilerleme mesajlarını nereye yazacağız? std::cout'a yazamayız; çünkü o zaman PPM dosyamız bozulur!
Çözüm: std::clog (veya std::cerr). Bu akış hata ve günlük kayıtları içindir ve > yönlendirmesinden etkilenmeyip doğrudan konsol ekranına basılır:
Artık terminalinizde satırların geri sayımını canlı olarak görebilirsiniz. İlk görüntümüzü başarıyla ürettik; şimdi ışın izleyicimizin kalbini oluşturacak 3B Vektör Sınıfına geçelim!