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