Home Index Search Links About Us
[LinuxFocus Image]
[Navegation Bar]
 News   Archives   Companies   Tips  

POVRAY Hakkında Genel Kavramlar

Yazar: Antonio Castro

Çeviri: Özkan Özer

Bu yazı Povray üzerine hazırlanmış dizinin ikinci yazısıdır. Bu kez bazı genel kavramları gözden geçireceğiz ve bu dilin temel öğelerini tanımlamaya başlaycağız 

Yazının Görüntüleri

Görüntüleştirim Temelleri

Yedi Yanlış

Povray Dili

Canlandırım Hakkında Temel Kavramlar

POV Sürüm 2.0

3 Boyutlu Görünümler

Konum

Öteleme

Dönme

Ölçekleme

Éşık

Kamara

 

Yazı'nın Görüntüleri

Bu yazıdaki tüm görüntüler JPEG formatında ve (Thumbnail) boyutuna indirgenmiştir. Daha kaliteli tam boy GIF sürümlerine thumbnail ikonlarına tıklayarak ulaşabilirsiniz.

Animasyonlar JPEG formatında sadece 15 kareyle düşük çözünürlükte yapılanırlar.Çözünürlüğü sınırlama ve animasyonun boyutu harddiskin büyük bölümünü kullanmaktan kaçınmayı ve bu yazıyı yavaş yüklememeyi umut ederiz.Üstelik bununla birlikte, bu görüntüler için kaynaklar herzamanki gibi hazırlanacaktır ve okuyucular  herhangi istenilen çözünürlükte görüntüleri sunabilen 'pov'  (bir önceki konuda tartışılmıştı)adı verilen araça ulaşabilirler veya okuyuculara görüntüler üzerinde oynama ve değiştirme yapma hakkı verilmiştir 

Eğer okuyucular Povray’i henüz sistemlerine yüklememişse, lütfen kaynakların yeri, yükleme ve POVRAY ’in biçimlendirilmesi hakkında yeterli bilgi verdiğimiz bir önceki serilerin makalelerinde bulunan komutları takip edsinler. 

Görüntüleştirim Temelleri

Bir önceki makalede özetle ışın izlerinin etkilerinden bahsetmiştik. Şimdi bu konuyu daha fazla detayla keşfedelim.

Rendering yapay bir görüntüyü başarabilmek için eksiksiz bir tekniktir. Pahalı olmayan manada en gerçekçikçilik içerisinde işığın davranışıni ve cisim üzerindeki görsel etkileri kopyalamyı dener. 

Bir önceki makalemizde görüntüleyicinin ışın demetlerini saymasından bahsetmiştik. Fakat bu model altında yeterli ışık kaynağı bir kaynak olarak davranmaz bir lavabo(sink) gibi davranır. Bu rollerin değişimi hakkında bir sebep vardır, eğer ışınlar ışık kaynağından ayrılsalardı, hesaplanabilir büyük bir zaman kaybı olacaktı.Çünkü bütün ışınların dışında kalanlar gerçekten sadece az sayıda ışık kaynağı kameraya ulaşır.İleriki aşamalarda kameradaki görüntü ışınların sayısını görüntüyle ilişkili olarak azaltıyoruz.Kameradaki tüm noktalar, bizim gerçek kameramızın teorik, fotoğrafa duyarlı film içerisindeki bir noktanın karşılığı olur.Herbir nokta daha sonra birbirinden bağımsız işlenir.Povray’i,görüntüyü inşa etmek için yapılandırdık ve daha sonra harici bir görüntüleyiciyle gözlenebilir.Povray’i SVGA için yapılandırdık ve daha sonra görüntü hesaplandığı zaman görüntüyü izleyebilmenin mümkün olabileceğini görebiliriz.Bu, ekranda görüntünün en ufak parçasından başlanarak yapılır, soldan sağa, yukarıdan aşağıya.Bu istek eş zamanlı değildir. Povray için en genel yapı bu istek içerisinde tam olarak inşa edilmiş TGA 24 bittir.

Eğer herhangi biri, SVGA için Povray’i inşa etmek üzerine  ilgilenmek isterse(Ben şu ana kadar kendi kendime yapmadım), öğrenecekleri tek şey görüntünün bölgesine bağlı olan render’in hızıdır. Karmaşık bölgeler kolay bölgelerden daha uzun zaman alır.Çok cisimli bölgeler işlenme açısından bir veya hiç cisimi olmayan bölgelerden daha uzun zaman alır. Işınların cisim üzerinde herbir etkisi için renderer ışık üzerindeki etkileri ışık kaynağının rengine ve konumuna bakarak hesap eder. Cismin yüzeyi ile ilgili olarak cismin gerçek konumu .......Bu hesaplamanın sonucu, cisim içerisindeki noktaların yogunluğunu ve rengini tanımlayan üç değerli RGB içinde belirtilmiştir.

Bir özet dolambaçlı yol

24 bitlik TGA yapısı çok yer işgal eder, fakat üretmek önemsiz ve işlemesi(process=denetleme?) kolaydırThe TGA 24bits format occupies a lot of space but is trivial to generate and easy to process. 

Herbir görüntü birimi, RGB paketini kodlayan 8 bitlik 3 rakamla verilir.

8bits *3 = 24 bits; 2^24 = 16777216 (16 milyon renk) 

Genişliği ve yüksekliği çözmek için:

int w, h, i; 
fseek(fi, 12L, SEEK_SET); 
fread(&w, 2L, 1L, fi); /** pos 12 **/ 
fread(&h, 2L, 1L, fi); /** pos 14 **/ 

İlk görüntü birimini okumak için:

fseek(fi, 16L, SEEK_SET); /** pos 16 **/ 
Blue=fgetc(fi); 
Green=fgetc(fi); 
Red=fgetc(fi); 

 
 

Bu bilgi bazı cisimleri işlemek ve birkaç ilginç effecti(sonuç,etki) başarmak açısından yeterli olmalıdır. Eğer okuyucu programlamayla ilgili olaraktan biraz bilgisi varsa, aşağıdaki örnekleri öneriyoruz:

1) Bir cismi Parlaklaştırmak/Koyulaştırmak (beyaz görüntü birimleri 255,255,255 ve siyah görüntü birimleri 0,0,0)
2)***Superimpose and image with a black background on top of another one using black as a transparent value 
3)İki cismi renk değerlerini ortalayarak harmanlamak 
5)Verilen bir rengi azaltmak/artırmak 
6) Bir cismin renk grafiğini sağlamak (renklerin listesi ve frekansları(sıklıkları)

Bu operasyonların tamamı web üzerinde sık sık işe yarar yardımcı programlar kullanılarak üstesinden gelinebilir.Bununla birlikte, bazı vakalarda cisme önemsiz olmayan dönüşüm uygulamak gerekebilir ve bu 24 bitlik TGA yapısı tümüyle başarılabilir. 

Dolambaçlı Yolun Sonu

Gerçek kameranin filmi içerisinde herhangi bir noktadan ayrilan isinlar ayrilir, fakat son rengi hesaplamak için herbir isin, perdedeki herhangi bir cismi kesip kesmedigini belirler.Eger bunu yapiyorsa isin izleri algoritmasi isinin ulastigi bölge içerisindeki cismin özelliklerini çözümlemeye devam eder.Sonra,karmasik cisimlerin tasarimi için  çok etkili bir (optimization?) teknik meydana gelir.Bu birinci karmasik cismi ihtiva eden yeni bir görünmez cismin tanımlanmasindan olusur.Genelde en çok kullanilan kap bir küredir, fakat küplerde en az digeri kadar yaygindir. Buradaki temel amaç, isin izlerini??? o The main goal here is to used the container to force the ray-tracer to approximate the complex object by using the container instead, arriving rays bounce off the invisible spherical container. This removes a great deal of the computational process. The primitive used is "bounce_by" and it is commented next to illustrate how well the ray-tracer works. We will see an example later on in the article when we treat complex figures. 

7 Hata

As an illustration of the issues explored so far let us review an image created using several techniques and discuss them one by one 

Bu ekran "7 hata" olarak başlıklandırılmıştır. 
 
 

7erroresLütfen perdenin özelliklerinin bazilarinin eksik oldugunu farkına varin: 

  1. Yüzügün merkezinde yogun tek bir isik kaynagi var ve hernekadar biz bu noktaya dogruca  baksakta isik kaynagi görünmez durumdadir.
  2. İsik kaynaginin arkasina yerleştirilen beyaz küre gökyüzünde   büyük bir gölge yaratmaktadir.Bu bir "gerçek gökyüzü" yerine pahali olmayan bir dekorasyon içerisinde görülebilir.
  3. Deniz yüzeyi bazi dalgalari gösterir, fakat çok ince düz bir yüzey kullanarak yapilmistir.Sinirin dalga şariltilari olmaksizin düz bir çizgiyi göstermek için düzgün yüzeyi kestik.
  4. Yakin bir düzlem üzerinde 3 tane küp vardir.Orta boylu küp gölge birakmaz. 
  5. Küpün üzerindeki gölgeler ve isiklar cok yabancidir.Ne çesit bir isik kullanilmistir?Düzgün isik kaynagi ?veya daginik isik kaynagi?.Görünüse göre herbir kutu farkli isik ortamlarina sahiptir. 
  6. Cam top sol tarafta kati gibi gözükür(araliksiz), fakat ufak bir bölgeyi saga dogru götürdük ve topun bos oldugunu degerlendirmek için bir cisim koyduk.
  7. Bir bütün olarak perdeye baktigimizda atmosferik etkilerin eksikligi kanit olmustur. effects.Hava asiri derecede "saydamdir".Denizin rengi koyu mavi olmali ve ufuga dogru yayilmalidir. Beyaz top havada iz birakmayan konik bir gölge birakir
Su anda kullanilan sayisiz tekniklerin detaylarini gerçekten açiklayamayiz.Bu örnekle bizim konumuz okuyucuya isin izlerinin  dogal ortami taklit etmek için  atilimlarini göstermektir, fakat fizigin dogal kanunlariyla her zaman bütün olarak bir yakinma vardir.Çünkü gerçegin daha büyük değerleri için olusum süreci yerine ödenecek  büyük bir bedle vardir.Bazi teknikler digerleriyle üretilen kusurlari saptamak için en iyileridir.En kesin sonuçu ve olusum süreci arasinda bir denge bulmak için en önemlidir. 

Povray Dili

Povray hakkindaki bu seriler, imkaninin bir  yüzeysel gezisinin ötesine geçemez. Povray dili, seriler içerisinde derin olarak el alinmak için çok genistir.Bu sebepten dolayi su anda dilin en önemli özeelikleri üzerinde sadece birkaç görüs belirleyebiliriz. 

Povray sik sik benzer sonuçlarin üstesinden gelebilmek için  dilbilgisel düzenin bir miktarinin kullanimina izin verir.Bu Povray'in baslangicina (This is due in part to the genesis of Povray,?)..Povray'in gerçek sözdizimi son derece sürümden sürüme degisir.Su an ki sözdizim tümüyle onaylanmis ve belki gelecekte çok degisiklige ugramayacaktir.Bagdasabilir sebepler için eski sözdizim özellikleri biraz degisik  formda veya orijinalinde yeni sürümlerinde korunmustur.  Sözdizimde esnekligin bir örnegi kisaca test edecegimiz dönmelerdir. 

Povray'in daha önceki sürümlerini kullanan girdi kaynak dosyalarini olusturan derleme seçenekleri vardir. 

Örnek:
 
Benzer dosya yapilari içerisinde, 1 , 2 veya 3. Sürümlerden kullanmak için kolaylikla ekler:

#version 1.0 
....... 
#version 2.0 
....... 
#version 3.0 
....... 

 
 
 

Sasirtici olarak Povray; 1.0, 2.0 veya 3.0'da yazilmis kaynak kodlaraini birlestirmek için gelistiricilere izin verir. 

Povray hakkinda bir çok iyi kilavuz vardir, lütfen bunu tercih edin.Burada çok önemli özelliklere yönelerek zaman kazanacagiz. 

Yorumlar, Bildiriler, include dosyalari 

Yorumlar  C++ tipiyle asagidaki gibi yazilir. 
 

Örnek: 
 

// Bu yorum bir dönüs satiri ile biter. 
/* Bu yorum slash karakteri içerisinde konumlanir. */ 

 
 

# isareti ile başlayan ögeler Dil Yönergesi olarak bilinir.En çok kullanilan yönergeler #declare ve #include yönergeleridir. 

 
Belirtim Sözdizimleri:

#declare IDENTIFIER = ITEM 

 
 

Örnek: 
 
Çoklu Tanımlayıcılarının Belirtimi:

#declare Rows = 5 
#declare Count = Count+1 
#declare Here = <1,2,3 
#declare White = rgb <1,1,1 
#declare Cyan = color blue 1.0 green 1.0 
#declare Font_Name = "ariel.ttf" 
#declare Ring = torus {5,1} 
#declare Checks = pigment { checker White, Cyan } 

 
 

#declare ifadesi ögelerin büyük bir çeşidini depo etmeye izin verir:bir dönme, (texture), renk, cisim, rakamsal deger,... 

Diger cok onemli öge Another crucial element are the include statements that allow to include in our source file code fragments previously saved in other files. 

By default the include directive searches the local directory for the file. If the file is not found it then passes to search the Library_Path. 
 

Esas olarak 2 rehber kullanacağız.: 

Library_Path=${POVRAY}/include // Povray’ in include dosyalari için 
Library_Path=${HOMEPOV}/include //kullanıcı include dosyaları için 

Bu, uygun tanıma dosyasını olusturmak için, 'pov' dilinin yazım sisteminin nasıl pratiğe koyulduğudur. Buna daha sonra geleceğiz.

Povray'dan en yüksek derecede çıktı alabilmek için bilmek zorunda olduğumuz include dosyalarının bir topluluğu vardır.Kodumuza dahil edilebilen ve geliştiicilerin beğenisine customize edilmiş kaynakların bir kütüphanesidir. 
 
Bazı Bilinen include dosyaları: 

#include "colors.inc" 
#include "textures.inc" 
#include "shapes.inc" 
#include "finish.inc" 
#include "glass.inc" 
#include "metals.inc" 
#include "stones.inc" 
#include "woods.inc" 
#include "atmos.inc" 

 

Povray üstelik koşullara bağlı ifadeleri ve döngüleri harekete geçiren yönergelere sahiptir. Povray'in ilk sürümü döngüler ve koşullara bağlı ifadeler için yönergelerden yoksundur. Bundan başka, ekrandaki öğelerin tanimlamasi herhangi bir sırada ortaya çıkabilir ve sonuçta geliştirici, geleneksel programlama dillerinden büyük bir zihinsel hareket getirmek zorundadır. Ekranda öğelerin bildirisinin sırası, hala konuyla ilgili değildir, fakat döngğler benzer satırların yazı kalabalığından geliştiriciyi kurtarır ve koşullu satırlar örneğin, animasyonda kullanılan clock değerine göre bir ekran tanımlamamıza izin verir. Bir sonraki makalede karmaşık cisimleri tartıştığımız zaman koşullu ifadelerin bir örneğini vereceğiz. 

Çok fazla dil yönergeleri vardır.(# ile başlayan), fakat biz burada gösterilenlerden ikisinin üstünde duracağız. Declare ve include , büyük yoğunlukla en sık kullanılanlardır. 

Değişik çeşitlerin sabitleri, mantıklı işletmenler, bağlantı işletmenleri, vektörler için işletmenler, önceden tanımlanmış fonksiyonlar vb. gibi diğer programlama dilleriyle çok benzer dil özelliklerini tartışmayı atlayacağım. 

Dilin ayırtılmış kelimlerinden onları ayırmak için kimliklendirici etiketlere en azından bir büyük harf kullanmak daha uygun olur. 

Animasyon Hakkında Temeller

Dealing with this issue so early on deserves a short explanation 

Bir görüntü bir bin kelimeye eşittir diye sık sık söylenir ve bir ışın zerresinin fonksiyonelliğini açıklamaya çalıştığınız zaman bu özellikle doğrudur.Herbir genel düşünceyi bollukla resimlemeye çalışacağız, aksi halde, okuyucu bu makaleyi izleyebilmek için kendi örneklerini kullanarak açıklamaları test etmek için kod yazmaya zorlayacaktır. Bu Povray dizileri içerisinde çok görüntü dahil edebilmek için temel sebeplerden biridir. Amacımız It is often said that an image is worth a thousand words, and this is especially true when we try to explain the functionality of a ray tracer. We will try to illustrate abundantly each concept, otherwise the reader would be force to write code to test the explanations using his own examples in order to follow the article. This is one of the main reason for including so many images in the Povray series. Our hope is that consulting the images included might be sufficient to remind the reader of the concept studied avoiding having to go through the text once more. Sometimes an image is not sufficient and instead we require a sequence of them to appreciate small differences between images and special effects. This is why we see justified to discuss animations at this moment. 

Povray görüntülerin bir uyumunu üretebilmek ve onları bir kerede diske kaydedebilmek için kendi kendini kısıtlar. Bu noktada, sadece çok basit bir örnekle ilgileneceğiz. Işın zerresini uyum içinde üretebilemk için Povray limits itself to generate a sequence of images and save them to the disk one at a time. For the moment we are only interested on a very simple method. The ray tracer will be launched several times passing each time a number that select the image in the sequence to be produced. In order to re-launch multiple times Povray there are some nice options that can be added to the *.ini file specially thought for generating animations:

Canlandırım için başlatım dosyası örneği: 

Initial_Clock = 0.0 
Final_Clock = 2.0 
Initial_Frame = 1 
Final_Frame = 200 
Subset_Start_Frame = 51 
Subset_End_Frame = 75

 
  Bir önceki makalede animasyonlar için tanıma dosya örnekleri *.ini dosyalarını üretebilmek için basit bir program önerdiğimizden dolayı, Povray'in kullanımını kolay ve kullanışlı yapmak, animasyonların üretimeye izin vermek için Povray'i güncellemeyi izin verir.

Yeni şerit olarak birkaç projenin ötesinde paylaşılan  bir ek include rehberine sahiptir. '$HOME/dat/pov/include'. Bu kullanıcı kütüphanelerini yerleştirmek için ideal bir yerdir. 

Pov ver 2.0

Example of an *.ini file: 
-----------------------------------------------8<-----------------

#!/bin/bash
#####################################################################
#  Yazar: Antonio Castro Snurmacher  (Feb-1998)
#
#       pov (ver 2.0)
#
#       Esta versión esta dedicada a
su inclusión en la
#       revista LinuxFocus  
(freeware)
#
#  Esta version (2.0) incorpora posibilidad de generar animaciones
#
#  Requiere 'xv' e 'imagemagick (convert,animate) '
# 
#  Este programa puede ser utilizado, distribuido, y modificado
#  libremente pero siempre se deberá respetar la propiedad
#  intelectual de su autor. Esta cabecera debe ser conservada 
#  tal cual en todas las modificaciones. 
#
#  En caso de traduccion deberá conservarse el texto original de
#  esta cabecera y añadirse la traducción a
continuación de ella.
#
#  El autor renuncia a todo tipo de beneficio económico y no se
hace 
#  responsable de los posibles perjuicios derivados del uso del
mismo. 
# 
#       Bu sürüm This version is writen for its
inclusion in the              
#       magazine LinuxFocus (freeware)
   
#
#  Bu sürüm (2.0) animasyonları üretebilme yeteneğine sahiptir.         
#
#  'xv' ve  'imagemagick gerektirir. (convert,animate) '
# 
#  Bu program kopya hakkına saygı gösterildiği sürecec kullanılabilir, dağıtılabilir ve değiştirilebilir.
#   Bu başlık hiçbir değişiklik gerektirmeden her zaman aynen dahil edilecektir.
#   
#
#  Çeviriler orijinal başlık metnini koruduğu takdirde bir sonraki çeviriyi ekle. 
#
#  Yazar koddan dolayı her çeşit ekonomik kazançtan  feragat eder
ve kullanımdan dolayı türeyen mümkün zararlar için sorumlu değildir.
# 
#  Elektronik Posta (acastro@ctv.es)
# 
#####################################################################
uso(){
   echo "Usage: pov <project <size=0..6 <quality=1..11 "
   echo "    [ <Initial_Frame <Final_Frame
<Initial_Clock <Final_Clock"
   echo "      [ <Subset_Start_Frame
<Subset_End_Frame ] ]"
   echo
   echo "0) 40x30     (STD/20) No backup"
   echo "1) 80x60     (STD/10) No backup"
   echo "2) 100x75    (STD/8)  No backup"
   echo "3) 200x150   (STD/4)"
   echo "4) 266x200   (STD/3)"
   echo "5) 320x200 *"
   echo "6) 400x300   (STD/2)"
   echo "7) 640x480 *"
   echo "8) 800x600 *   (STD)"
   echo "9) 1024x768 *"
   echo
   echo "Projects should be located in a directory within        "
   echo "${HOMEPOV} and the same base name for the directory and
the "
   echo "main *.pov file will be used."
   echo "(STD) Otomatik belirlenen standart çözünürlüktür."
   echo
   exit 1
}

newversion(){
mv ${PREFIX}.pov.8.gz ${PREFIX}.pov.9.gz 2 /dev/null
mv ${PREFIX}.pov.7.gz ${PREFIX}.pov.8.gz 2 /dev/null
mv ${PREFIX}.pov.6.gz ${PREFIX}.pov.7.gz 2 /dev/null
mv ${PREFIX}.pov.5.gz ${PREFIX}.pov.6.gz 2 /dev/null
mv ${PREFIX}.pov.4.gz ${PREFIX}.pov.5.gz 2 /dev/null
mv ${PREFIX}.pov.3 ${PREFIX}.pov.4 2 /dev/null
mv ${PREFIX}.pov.2 ${PREFIX}.pov.3 2 /dev/null
mv ${PREFIX}.pov.1 ${PREFIX}.pov.2 2 /dev/null
cp ${PREFIX}.pov   ${PREFIX}.pov.1 
gzip ${PREFIX}.pov.4 2 /dev/null
}

#################################################
size(){
   export SAVE="yes"
   case  $1 in
      0) Width=40 ; Height=30; SAVE="no" ;;
      1) Width=80 ; Height=60  SAVE="no" ;;
      2) Width=100; Height=75  SAVE="no" ;;
      3) Width=200; Height=150;;
      4) Width=266; Height=200;;
      5) Width=320; Height=200;;
      6) Width=400 ;Height=300;;
      7) Width=640 ;Height=480;;
      8) Width=800 ;Height=600;;
      9) Width=1024;Height=768;;
      *) uso
   esac
}

quality(){
   case $1 in
   1) ;;
   2) ;;
   3) ;;
   4) ;;
   5) ;;
   6) ;;
   7) ;;
   8) ;;
   9) ;;
   10) ;;
   11) ;;
       *) uso
   esac
   export Quality=$1
}

#############################################################
Single(){ 
Cat <<-FIN  ${PREFIX}.ini
   Output_File_Name=${PREFIX}.tga
   Post_Scene_Command=xv ${PREFIX}.tga
FIN
}

#############################################################
SubSet(){
Cat <<-FIN  ${PREFIX}.ini
   Subset_Start_Frame=$Subset_Start_Frame
   Subset_End_Frame=$Subset_End_Frame
FIN
}

#############################################################
Animation(){
Cat <<-FIN  ${PREFIX}.ini
   Output_File_Name=${PREFIX}.tga
   Initial_Frame=$Initial_Frame
   Final_Frame=$Final_Frame
   Initial_Clock=$Initial_Clock
   Final_Clock=$Final_Clock
FIN
if [ $NumParm == 9 ]
   then 
      SubSet
Fi
Cat <<-FIN  ${PREFIX}.ini
   Pre_Scene_Command=rm -f \`ls --color=none
${PREFIX}*.tga.gif\`   
   Pre_Frame_Command=rm -f \`ls --color=none
${PREFIX}*.tga\`   
   Post_Frame_Command=convert %o %o.gif
   Post_Scene_Command=animate -delay $DELAY  \`ls -tr
--color=none ${PREFIX}*.tga.gif\` 
FIN
}

####################### main ##############################
export HOMEPOV=${HOME}/dat/pov
export PROYECT=$1
export PREFIX=${HOMEPOV}/${PROYECT}/${PROYECT}
if [ $# != 3 ] && [ $# != 7 ] && [ $# != 9 ]
   then uso
fi
NumParm=$#
if [ $NumParm -le 3 ] && [ grep Clock ${PREFIX}.pov  /dev/null
2&1 ]
   then 
      echo "No econtrado identificador Clock en el
fuente"
      uso
fi
export POVRAY=/usr/local/apli/povray/povray3
size $2
quality $3
Initial_Frame=$4
Final_Frame=$5
Initial_Clock=$6
Final_Clock=$7
Subset_Start_Frame=$8
Subset_End_Frame=$9

NumClocks=`expr $Final_Clock - $Initial_Clock`
if [ $NumClocks -gt 0 ]
   then if [ $NumClocks -le 40 ]
           then export
DELAY=`expr 4000 / $NumClocks`
           else export
DELAY=100
        fi
   else export DELAY=4000
fi

if [ $SAVE == "yes" ]
   then newversion
fi
cat <<-FIN  ${PREFIX}.ini
   Width=$Width
   Height=$Height
   Quality=$Quality
   Library_Path=${POVRAY}/include
   Library_Path=${HOMEPOV}/include
   Input_File_Name=${PREFIX}.pov
   Output_to_File=on
   Output_File_Type=t
   verbose=on
FIN
if [ $NumParm == 3 ]
   then ## Single image
       Single
   else ## Animation
      Animation
Fi
#montage ${PREFIX}.tga.* ; animate ${PREFIX}.

#   Output_File_Type=t
## Others hight performace options ##
#   Antialias_Depth=3
#   Antialias=On
#   Antialias_Threshold=0.1
#   Jitter_Amount=0.5
#   Jitter=On

# Low nice value just in case you want to run other processes
nice -20 x-povray ${PREFIX}.ini 

if [ $SAVE != "yes" ]
    then echo "!! Dikkat  !! Kopya(backup?) dosya üretilmedi. "
fi

---------------------------8<-----------------------------------
 
  Bazen Povray dışında harici yararlı sistemler kullandık. Örneğin; animasyonları görselleştirmek için imagemagic'den yararlı "animate" ve "convert" 'ü kullandık. 

Enrique Zanardi'ye bir keresinde Povray için bir modellemenin olup olmadığını sorduğum zaman,Debian için Povray paketinin bakıcısı ve devamlılaştırıcısı , şunu yazdı: 

ScEd kullandım.(üstelik Debian'da kullanışlı). Bir kere kullandığınız zaman çok basit.Kullanıcıılar kendi "token"(belirti,iz, gösterge)'lerini tanımlayabilmeleri nedeniyle, nasıl karmaşık olduğu sorun değil, bir Scheme yorumlayıcısı kullanılarak derlenebilir. İnsanlar üstelik Ac3D'yi önerdiler, fakat özgür olmadığına inanıyorum.

Animasyonları üretebilmek için bir diğer yöntem vardır. Bu yöntemler Povray'in ilk sürümüyle beraber çok tanıdık oldu, fakat hala geçerli bir seçenektir. Povray'i birkaç kere launch eden bir dögüyü üreten harici bir programdan oluşur.Döngünün herbir tekrar yapışında, program ana kaynakta '#include' ifadesine ekelenen bir dosya üretir, bu dosyalardan herbirisi o anki durumla ilgili bilgi içerir. 

İkinci yöntemi gösteren C kodu parçası şudur: 

 
----------------------8<--------------------------------------------- - 
for(Frame=1; Frame < UltimoFrame; Frame++){
   fi=fopen("pajaro.inc", "w");
   fprintf(fi, "#declare PosX_pajaro1 = %d\n",
FuncionPosX_pajaro1(Frame));
   fprintf(fi, "#declare PosY_pajaro1 = %d\n",
FuncionPosY_pajaro1(Frame));
   fprintf(fi, "#declare AnguloAlas_p1 = %d\n",
FuncionAngAlas_p1(Frame));
   fclose(fi);
   sprintf(comando, "povray -ipajaro.pov -opajaro%04d.tga", Frame);
   system(comando);
}
----------------------8<----------------------------------------------&nb sp;
 

Bir sonraki bölümde dönmelerin ve yer değiştirmelerin ayrıntalarını gösteren animasyonların bir örneğini test edeceğiz. 

3 Boyutlu Dönüşümler

Birkaç 3 boyutlu dönüşüm bir cisim üzerine uygulanabilir. Üstelik cisimler bir topluluk olabilir ve aynı 3 boyutlu dönüşümler topluluğa bir bütün olarak uygulayacak, örneğim, yer değiştirmelerö dönmeler, ölçüleme 

Konum

Bir cismin konumu <x,y,z> koordinatlarıyla belirlenir. Koordinat baslangıcında merkezlenmiş cisimleri tanımlamak genel bir uygulamadır. 

Her cisim bir translation komutu kullanarak ilk konumundan tanımlanabilir <x,y,z> bölgesine taşınabilir. Yer değişimlerinin datasını en iyi şekilde gösterebilmenin yolu için vektörler vasıtasıyladır. Vektörler POVRAY'da çok sık kullanılır. Bir vektör için x, y, z bileşenleri ile genel, kısa bir rakam ve işaret sistemi <x,y,z>' dir; eğer tüm bileşenler aynı ise, <24, 24, 24 =<24. olur. POVRAY 3 vektörü önceden tanımlar: x=<1,0,0 y=<0,1,0 ve z=<0,0,1. Sonra 3*y = <0,3,0  ve -2*x = <-2,0,0. 

Ekranda cisimleri nereye yerleştireceğimizi planlamak için kalem ve silgiyle bereber çaılşmamız sık sık gereklidir. Deneme ve yanılmayla cisimler için en iyi bölgeyi belirleyebilelim diye, bir başlangıç tahmininden başlamk için ve düşük çözünürlükte ve düşük kalitede cisimleri üretmek için POVRAY'i kullanmamıza yardım eder. 

POVRAY'da işe yarar 3 boyutlu dönüşümler şunlardır: 

  Rotate <VECTOR 
  scale <VECTOR 
  translate <VECTOR 

Yer değiştirmesel ve dönmesel dönüşümler hem cisimleri karmaşık bir ekrnada kurmak(yerleştirmek manasında olabilir) hem de animasyonlar için çok kullanışlıdır. 

Yer Değiştirmeler

Her cisim son konumundaki koordinatan ilk konumundaki koordinati çıkartarak hesaplanan bir vektörü eklemekle farklı bir bölgeye taşınabilir. Geometrik olarak yer değişim vektörü bir ilk konumundan son konumuna giden bir vektör olarak gösterilebilir.Bir örnek: 

Sphere { <2, 2, 2, 10 
    pigment { White } 
    translate <-3           &nb sp;      //  Remember <-3 = <-3, -3, -3 
  } 

Sonuç <-1, -1 -1>'de merkezlenmiş yarıçapı 10 olan bir küredir. 

Dönme

Cisimler koordinatların merkezine doğru giden bir eksen boyunca döndürülebilir. Bu dönmeleri açıklayabilmek için genel bir kullanımdır ve bu cismin(başlangıç noktasında merkezlenmiş gösterilmelidir) ilk olarak uygun bir yönlendirmeye döndürlmesinden dolayı sonra en son konumuna yer değiştirilir. Karşıt işlem (ilk yerdeğiştirme ve daha sonra dönme) benzer sonuç vermeyecektir?(yield) 

Bir dönme bir dönm ekseni ve bu eksen üzerinde dönmenin açısı belirtilerek tanımlanmak zorundadır. Dönmenin anlamı sol-el kuralını izler. ( Sol elini paşmarmağın pozitif ekseni gösterecek şekilde kaldır ve sonra yumruğunu kapat. Kapanmış yumruğun hareketinin yönü dönmenin anlamını? verir. 

POVRAY'da bir dönmeyi tanımlamanın iki yolu vardır: "eksen * açı" veya "X, Y ve Z eksenlerindeki 3 dönmeyi gösteren <n, n, n" . Bazı örnekler: 

rotate x * 45 = rotate <45, 0, 0 
rotate <45, -30, 20 = rotate x*45 rotate y*-30 rotate z*20 
rotate 20*z = rotate z*20 
rotate y*90 x*90 = rotate <0, 90, 0 rotate <90, 0, 0 
rotate y*90 x*90 != rotate <90, 90, 0 

En son örnek bir eşitlik değildir ve hataları sık sık başgösteren bir durumdur. Dönmenin usülü çok önemlidir. <n,n,n dönmesini kullandığınız zaman, dönmeler X, Y, Z sırasında yerine getirilir. Ve hernezaman farklı bir dönme usülü gerekirse ? . Eğer istenirse geliştirici "radians" fonksiyonunu kullanarak açıları radyan cinsinde kullanabilir. POVRAY'da matematiksel aritmetiğin değerini kolaylaştıran birçok matematiksel fonksiyon vardır.
 
 
 

Ölçüleme

Cisimlerin ebatları ölçüleme dönüşümleriyle değiştirilebilir. Bir cismin X,Y veZ yönünü ölçülemek için 3 sayı kullanılır. Bu bir cismi yassılaştırmaya, boyutunu artırmaya, azaltmaya izin verir.
 

Burada bir küre kullanaraktan bir elipsoidi inşa etmenin bir yolu verilmiştir.

sphere { <0,0,0, 10 
    pigment { White } 
    scale <1,4,10 
  } 
 

3 Boyutlu Dönüşümler Hakkında Son Notlar.

Dönüşüm ve ölçüleme işlemleri herhangi bir sırada yerine getirilebilir. Bununla beraber, bir tek dönme işlemleri değişikliklerinin yerine getirilmesi işlemlerin bütünlüğünü parçalamak açısından yeterlidir. ve bu nedenden dolayı sıra çok önemli olmuştur.Burada 3 boyutlu değişimle sıranın öenmeini göstermek için basir bir örnek vardır. Kürenin merkezinde dönmenin ekseni ufukta azıcık  küçülmüştür.( Bu örnek ?)
 
 
 
 

----------------------------------8<------------------------------&nb sp; 
#include "colors.inc" 
#include "textures.inc" 
//##### To launch animation execute: ###### 
//# pov LF2-PlanetBue 4 9 1 100 1 360 # 
//############################### 
#declare RY1 = clock * 5 
#declare RZ1 = 25 
#declare T1 = <5 ,0 ,0 
#declare RY2 = clock 

camera { 
    location < -5, 5, 15 
    look_at < 0, -2, 0 

light_source { <-15, 15, 15 color White} 

sphere { <0, 0, 0 4 
    texture { Shadow_Clouds } 
    rotate y * RY1 
    rotate z * RZ1 
    translate T1 rotate y * RY2 

----------------------------------8<------------------------------&nb sp;

Animasyonu yerleştirebilmek için 'pov'un yeni sürümünü kullanırızve çalışır:

 





pov LF2-PlanetBue 4 9 1 100 1 360 

Bu parametrelerin ne anlama geldiğidir.

  1. (Kaynak dosyası)Source file $HOME/dat/pov/LF2-PlanetBue/LF2-PlanetBue.pov 
  2. (Ebat)Size 4 = (266x200) 
  3. (Kalite)Quality 9 (en yüksek) 
  4. Initial frame = 1 
  5. Final frame = 100 
  6. Clock's initial value = 1 
  7. Clock's final value = 360 
İleride animasyonun birkaç karesini göstereceğiz. Dünya gezegeninin gerçek bir modeli için çok  yeterli değildir, fakat bir eğretileme olarak yeterlidir.

Example ../../common/May1998/planetblue.jpg 
 
 

Planeta Azul


 







Işık

Işık kaynakları uzayda bir nokta ışık kaynağı olarak tasarlandı. Nokta ışık kaynağı boyutsuzdur ve görünmezdir, kamera ışığın üzerine  merkezlediğinde hiçbirşey görmeyecektir. Bir ışık kaynağı sadece yanındaki cisimler üzerindeki etkileriyle algılanır. Hernekadar benek ışık kaynağını tanımlamak mümkünsede, hatayla bu nokta  tüm yönlerde ışığı parlatır. Otomatik seçilmiç renk beyazdır ve üstelik bu özellik ışık kaynağının yoğunluğu ile birlikte değiştirilebilir.

Bir görüntü uygun ışıklarıve gölgeleri üretebilemk için bir veya daha fazla ışık kaynağı kulanılabilir. Bununla beraber, ışık kaynaklarının sayısının artması, görüntüyü üretmek için kullanılan CPU miktarının artması demektir.

Kamera

POVRAY'da kamera, ekranda bir görünüşü kolaylıkla belirtebilen bir soyuttur. Parametrelerin sayısı kamerayı ve ekranın görüşünü kontrol eder: görüş alanı ve açısı ve kameranın yönü.POVRAY'da kamerayı tanımlamanın birkaç yöntemi vardır, örneklerimizde kullanılan bir tanesi çok esnektir ve kullanımı kolaydır. Yöntemlerin hepsi eşit olarak kullanışlı değildir. Yöntemlerin çoğu çok sezgisel değildir ve sadece eski sürümlerle tamamlayıcılık açısından POVRAY'da hala korunmaktadır.Kameranın görüş alanı ekranın görüüşünü kontrol eder.


Bu yazıdaki düzgü (kod) için kaynaklar (3342 bayt)

İngilizce'ye çeviri: Miguel A Sepulveda & Mark Kuchel

© 1998 Antonio Castro
Bu sanalyörenin bakımı Miguel A Sepulveda tarafından yapılmaktadır..