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.
Lütfen
perdenin özelliklerinin bazilarinin eksik oldugunu farkýna varin:
-
Yüzügün merkezinde yogun tek bir isik kaynagi var ve hernekadar biz bu
noktaya dogruca baksakta isik kaynagi görünmez durumdadir.
-
Ý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.
-
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.
-
Yakin bir düzlem üzerinde 3 tane küp vardir.Orta boylu küp gölge birakmaz.
-
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.
-
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.
-
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; |
|