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..