Java'da kütüphane kullanmadan 3 boyutlu nesne oluşturmak

Başlatan blacksnow, 08 Ocak 2015 - 15:44:12

« önceki - sonraki »

0 Üyeler ve 3 Ziyaretçi konuyu incelemekte.

blacksnow

Konu aslında genel ama ben java ile çalıştığım için konuyu buraya açıyorum.Başlıkta da belirttiğim gibi kütüphane kullanmadan 3 boyutlu nesne çizip (örneğin: küp) bu nesneyi döndürmek, kamera açısını ayarlamak, yakınlaştırma uzaklaştırma vb. şeyleri yapmak istiyorum.Yani bu işin temelini öğrenmek istiyorum.

Kaynak olarak çok bilgi bulamadım.Youtube'da videolar var ama nasıl olduğu anlatılmıyor.Anlatılsa bile ingilizce.

Bunları öğrenebilmem için nasıl bir yol izlemeliyim?Neleri öğrenmeliyim?Matematik ve fizik olarak kendimi ne kadar geliştirmeliyim?

Yapmak istediklerimin bir örneği: http://www.youtube.com/watch?v=8HlZpBX5hcI

-DıLgEş-

Javayı bilmem ama C++ ile uğraştığım için kütüphane kullanmadan oluşmaz mı oluşur tabi ama zorlanırsın. Kendin tüm fonksiyonları tanımlamalısın. Mesela bir programlama dil,ine başladığını düşün ve hiç bir şey bilmiyorsun ve sgiriş çıkış fonksiyonlarını da kendin tanımlaman gerekiyor. Bu işte böyle..


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 08 Ocak 2015 - 15:48:32

Alıntı yapılan: Nurullah_RTJavayı bilmem ama C++ ile uğraştığım için kütüphane kullanmadan oluşmaz mı oluşur tabi ama zorlanırsın. Kendin tüm fonksiyonları tanımlamalısın. Mesela bir programlama diline başladığını düşün ve hiç bir şey bilmiyorsun ve giriş çıkış fonksiyonlarını da kendin tanımlaman gerekiyor. Bu işte böyle..
Aşkın; gözü kör, kulağı sağır, dili tutuk, aklı kıttır..! Hayır yani bu halde nasıl herkesi madara ediyor onu çözemedim..

blacksnow

Her şey zor diye vazgeçseydim bu işlere hiç başlamazdım. :) Anlayacağınız zor olduğunun farkındayım ama yinede öğrenmek istiyorum.

Reverser

Alıntı yapılan: blacksnow - 08 Ocak 2015 - 15:59:27
Her şey zor diye vazgeçseydim bu işlere hiç başlamazdım. :) Anlayacağınız zor olduğunun farkındayım ama yinede öğrenmek istiyorum.

Açık kaynak kodlu render projelerini incelemenizi öneririm.
Şöyle bir şey buldum -> http://stackoverflow.com/questions/14072492/programming-3d-shapes-without-any-libraries-in-java
Michael nesterenko'nun paylaştığı eklentiye bir bakın derim.

XFCE ROCKS !
Powered by Thunar & XFWM4



blacksnow

Hazır projeleri inceleyerek anlamam çok zor.Birçok hesaplama yapılıyor.Bana daha çok işin temelini anlatacak kaynaklar gerekli.

Örneğin bunun gibi: http://slideplayer.biz.tr/slide/1915847/

Burada işin temeli biraz anlatılıyor.Ama benim istediklerimi yapabileceğim kadar detaylı bir bilgi yok.

Bir de bu video var ama pek bir şey anlayamıyorum: http://www.youtube.com/watch?v=HcYx2it8gzs

Bu video gibi türkçe kaynak var mıdır? Ya da örneklerle anlatımı olan ingilizce bir kaynakta olabilir.

Sonuç olarak, işin temelini yani matematiksel fiziksel kısmını anlayamadıktan sonra örnek projelerden bir şey çıkarmak zor gibi.

Cevaplarınızı bekliyorum.

Reverser

Alıntı yapılan: blacksnow - 08 Ocak 2015 - 19:56:09
Hazır projeleri inceleyerek anlamam çok zor.Birçok hesaplama yapılıyor.Bana daha çok işin temelini anlatacak kaynaklar gerekli.

Örneğin bunun gibi: http://slideplayer.biz.tr/slide/1915847/

Burada işin temeli biraz anlatılıyor.Ama benim istediklerimi yapabileceğim kadar detaylı bir bilgi yok.

Bir de bu video var ama pek bir şey anlayamıyorum: http://www.youtube.com/watch?v=HcYx2it8gzs

Bu video gibi türkçe kaynak var mıdır? Ya da örneklerle anlatımı olan ingilizce bir kaynakta olabilir.

Sonuç olarak, işin temelini yani matematiksel fiziksel kısmını anlayamadıktan sonra örnek projelerden bir şey çıkarmak zor gibi.

Cevaplarınızı bekliyorum.

Tavsiyem örnek projeleri incelemeniz ve öğrenmeye çalışmanız yönünde zira, araştırdığınız konu fazlasıyla spesifik. Türkçe kaynak bulmanız oldukça zor.

XFCE ROCKS !
Powered by Thunar & XFWM4



ekremsenturk

#6
İki boyutlu çizimler yapabiliyorsan, üç boyutlu çizimlerde yapabilirsin. Çizimler yapabiliyorsan, bunlara hareket'te kazandırabilirsin. Üç boyutlu bir işlemi öncelikle kafanda canlandırabilmen gerekecek. Ardından, yeni satır ekle ve dene şeklinde, kafanda canlandırdığına adım adım ilerleyebilirsin.

İki veya üç adet iki boyutlu dikdörtgen'in, birbirene bağlı olarak ve eşzamanlı hareket etmeleri, üç boyut izlenimi verir. Uzak ve yakın arasındaki boyut farklarını gözünde canlandırabiliyor olmalısın ve bunu hesaplayabilmelisin. Dikdörtgenlerin köşelerinin çizim başlangıcı ve çizginin sonlandığı noktaları döngüler içinde küçültebilir veya büyütebilirsin.

Öncelikle iki boyutlu çizimlere hakim olmalısın'ki, üç boyutlu çizimlerin koordinatlarını kafan karışmadan hesaplayabilmelisin. Prensip olarak, bir den fazla iki boyutlu çisim aynı anda hareket ediyorlar. Tek fark, hareketlerin eşzamanlı, birbirlerine bağlantılı ve uyumlu olması.

Reverser

En basit haliyle ek library kullanmadan c++ ile 3d obje oluşturmak için şöyle bir örnek buldum belki işinize yarar

/*
* ---------------- www.spacesimulator.net --------------
*   ---- Space simulators and 3d engine tutorials ----
*
* Author: Damiano Vitulli
*
* This program is released under the BSD licence
* By using this program you agree to licence terms on spacesimulator.net copyright page
*
* Tutorial 1: 3d engine object definition

*/



#include <windows.h>

#define MAX_VERTICES 2000 // Max number of vertices (for each object)
#define MAX_POLYGONS 2000 // Max number of polygons (for each object)



/**********************************************************
*
* TYPES DECLARATION
*
*********************************************************/

// Our vertex type
typedef struct{
    float x,y,z;
}vertex_type;

// The polygon (triangle), 3 numbers that aim 3 vertices
typedef struct{
    int a,b,c;
}polygon_type;

// The object type
typedef struct {
    vertex_type vertex[MAX_VERTICES];
    polygon_type polygon[MAX_POLYGONS];
} obj_type, *obj_type_ptr;



/**********************************************************
*
* VARIABLES DECLARATION
*
*********************************************************/

// And, finally our first object!
obj_type cube =
{
    {
        -10, -10, 10,   // vertex v0
        10,  -10, 10,   // vertex v1
        10,  -10, -10,  // vertex v2
        -10, -10, -10,  // vertex v3
        -10, 10,  10,   // vertex v4
        10,  10,  10,   // vertex v5
        10,  10,  -10,  // vertex v6
        -10, 10,  -10   // vertex v7
    },
    {
        0, 1, 4,  // polygon v0,v1,v4
        1, 5, 4,  // polygon v1,v5,v4
        1, 2, 5,  // polygon v1,v2,v5
        2, 6, 5,  // polygon v2,v6,v5
        2, 3, 6,  // polygon v2,v3,v6
        3, 7, 6,  // polygon v3,v7,v6
        3, 0, 7,  // polygon v3,v0,v7
        0, 4, 7,  // polygon v0,v4,v7
        4, 5, 7,  // polygon v4,v5,v7
        5, 6, 7,  // polygon v5,v6,v7
        3, 2, 0,  // polygon v3,v2,v0
        2, 1, 0,  // polygon v2,v1,v0
    }
};



/**********************************************************
*
* The main routine
*
*********************************************************/

int main(int argc, char **argv)
{
    return(1);
}





kaynaklar:
1-) http://www.spacesimulator.net/wiki/index.php?title=Tutorials:3d_Engine
2-) http://www.spacesimulator.net/wiki/index.php/3d_Engine_Programming_Tutorials

XFCE ROCKS !
Powered by Thunar & XFWM4



blacksnow

Öncellikle cevaplarınız için teşekkürler ama ben daha çok işin matematiksel fiziksel kısmını merak ediyorum.Galiba bunu tam belirtemedim.Kodları ne kadar yorumlarsam yorumlayayım bunu anlamam zor bence.Yine de örneklere bakıp bir şeyler anlamaya çalışacağım.

-DıLgEş-

Alıntı yapılan: blacksnowÖncellikle cevaplarınız için teşekkürler ama ben daha çok işin matematiksel fiziksel kısmını merak ediyorum.Galiba bunu tam belirtemedim.Kodları ne kadar yorumlarsam yorumlayayım bunu anlamam zor bence.Yine de örneklere bakıp bir şeyler anlamaya çalışacağım.
Matematiksel olarak vektörleri biliyor musun. Şu adreste D dili ile ilgili nesne tanımlama için uygun olur diye düşünüyorum: http://ddili.org/ders/sdl/hareket.html
Aşkın; gözü kör, kulağı sağır, dili tutuk, aklı kıttır..! Hayır yani bu halde nasıl herkesi madara ediyor onu çözemedim..

blacksnow

Vektörleri bilmiyorum.2 boyutlumu yoksa 3 boyutlu vektörleri mi öğrenmeliyim?Yoksa sırayla ikisini mi?Verdiğiniz kaynakta 2 boyutlu vektörler anlatılıyor galiba.

travego0403

Şimdi sen çizgi çizme komutunu, fonksiyonunu da kendim tanımlıcam onları kullanacağım dersen işin içinden çıkamazsın. İsteğin 2 boyutlu bir düzleme çizimler yapmak mı? 2 boyutlu düzleme(düzlem zaten 2 boyutludur :) ) sanki üç boyutlu görünüşler mi çizmek? Yoksa 3 boyutta çizimler yapmak mı?

Bu işlerin programlama mantığı değilde matematiksel mantığını öğrenmek istiyorsan, sana başlangıç yolunu göstermişler. Vektörler. Bu tabiki yeterli değil. Analitik Geometriyi iyi bilmen gerekiyor. Doğru denklemi nedir? ( y=mx+n ) Çember denklemi nedir? (x2 +y2 = r2 )
Bunları öğrenmen bilmen gerekiyor. Bunları öğrendikten sonra hesaplamaları öğrenmen gerekiyor. Hesaplamalar kolay olsun diye matris kullanacaksındır. Matris işlemlerini bilmen gerekiyor.
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

blacksnow

Amacım 2 boyutlu düzleme sanki 3 boyutluymuş gibi şekiller yapıp bunları hareket ettirmek, kamera açısını değiştirmek.Bir de ben şimdi vektörleri, analitik geometriyi çok iyi bildiğimde az önce yazdıklarımı bir kaynağa ihtiyaç olmadan yapabilir miyim?Şuan da 1mm bile ilerleyemedim.Bahsettiğiniz hesaplamalar nasıl yapılıyor?Eğer biliyorsanız anlatabilir misiniz?

Amenofis

Kodlama kısmı sorun değil. Matematiksel altyapın yoksa kapat bilgisayarı 2d/3d mat çalış yoksa işin içinden çıkamazsın.

travego0403

Eğitim durumunuz nedir? Lise öğrencisi mi , Lisans öğrencisi mi? Bölümünüz sayısal ağırlıklı mı sözel mi? Bütün bunların size çok etkisi olacaktır.

Basit bir örnek verecek olursak (0,0) noktasından geçen 45 derecelik bir doğru çizmek istediğimizi varsayalım. y=mx+n denkleminde m değeri doğrunun eğimini gösterir. yani bizim m değerimiz m=tan (45) olmalı sonuç m=1 dir. (0,0) noktasından geçecekse denklemi sağlamalı. 0=1*0 +n  denklemi çözülürse n=0 bulunur. Senin denklemin y=x halini alır. Bu denklemi kullanarak çizgini çizebilirsin.

"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

blacksnow

Yazılım Mühendisliği hazırlık öğrencisiyim.Şuan yazılım ile ilgili bir ders görmedik.Eğim denklemi ile 3 boyutlu cisimler nasıl çizeceğim bir ilişki kuramadım.Analitik geometriye ve vektörlere hakim değilim(öğrenmeye çalışıyorum).Aslında ben somut bir şeyler bekliyorum.Yani iki vektörü toplayarak görüntüyü şu hale getirebilirsin tarzında ipucu(belki saçma gelebilir ama).Herkes bunu öğren bunu öğren demekte.Kimse somut bir şeyler vermiyor.3 boyutlu vektörlere gözattım ve nasıl yapacağım ile ilgili kafamda bir şey oluşmuyor(kesin gözatmakla oluşmaz diyeceksiniz).Açıkcası somut bir şeyler bekliyorum.Bir çizim, bir hesaplama örneği vs.

freeman

#16
Matematik ve fizik bilgisi şart.
Sonra bir kitap almak gerek.
http://www.amazon.com/Introduction-Computer-Graphics-Undergraduate-Science/dp/1447127323/ref=sr_1_1?s=books&ie=UTF8&qid=1421578461&sr=1-1&keywords=java+graphics

Küçük bir not düşeyim,
Alt seviyede grafik işlemleri için C/C++ arayüzleri kullanılıp, Java 'dan bunlarda çağrılıyor olabilir.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 18 Ocak 2015 - 13:02:19


Alıntı yapılan: blacksnowYazılım Mühendisliği hazırlık öğrencisiyim.Şuan yazılım ile ilgili bir ders görmedik.Eğim denklemi ile 3 boyutlu cisimler nasıl çizeceğim bir ilişki kuramadım.Analitik geometriye ve vektörlere hakim değilim(öğrenmeye çalışıyorum).Aslında ben somut bir şeyler bekliyorum.Yani iki vektörü toplayarak görüntüyü şu hale getirebilirsin tarzında ipucu(belki saçma gelebilir ama).Herkes bunu öğren bunu öğren demekte.Kimse somut bir şeyler vermiyor.3 boyutlu vektörlere gözattım ve nasıl yapacağım ile ilgili kafamda bir şey oluşmuyor(kesin gözatmakla oluşmaz diyeceksiniz).Açıkcası somut bir şeyler bekliyorum.Bir çizim, bir hesaplama örneği vs.
Hocam dediğinizi anladım aslında. Yapmak istediğiniz işlemleri görsel bir hale getirip, sağdan soldan bakıp, incelemek istiyorsunuz sanırım. Yani bu yapılan Vector işlemlerini somut bir şekilde görmek istiyorsunuz. Bunun için MATLAB gibi simülasyon programlarını kullanabilirsiniz.

http://www.youtube.com/watch?v=1Q8jxWD5utA
Good morning and welcome to the Black Mesa Transit System. This automated train is provided for the security and convenience of the Black Mesa Research Facility personnel.

travego0403

@blacksnow

Belki direk bu şekilde kullanmayacaksınız ama Analitik Geometri bilmek için bunlar şart.

Hareket ettirme sağa ve sola ise x değerlerini arttırıp azaltma, yukarı aşağı hareket ise y değerlerini azaltıp arttırmaktır. Örneğin bir noktayı hareket ettirmeyi ele alalım. Noktamızın koordinatları (1,1) olsun. Sen bunu sağa doğru kaydırmak istiyorsun. Döngü içerisinde noktanın x değerini( (2,1), (3,1), (4,1) gibi)  sürekli arttıracak ve ekrana tekrar çizeceksin. Nokta sanki sağa hareket ediyormuş gibi görünecektir.

Döndürme işlemini en basit şekilde şöyle anlatabilirim. Bir cismimiz olsun ve kenar noktalarının koordinatları  şöyle bir matrisle ifade edilsin,
    | 1  1 0 |
A=| 0  0 0 |

İlk noktanın koordinatı (1,1,0) ikinci noktanın koordinatı (0,0,0)
Dönüşüm matrisini şöyledir
    | cos a  sin a  0  |
R=| -sin a  cos a 0  |
    |  0       0       1 |

işte sen A*R matris çarpımı yaparsan sana cisminin orijin noktası etrafında a açısı kadar döndürülmüş halinin koordinatlarını verecektir.
Basitçe a=90 için işlemi yaparsak
      | -1   1  0  |
A' = | 0    0  0  |

Sonucu çıkar. Basitçe kağıt üzerine bu iki noktayı işaretle ve aralarını birleştir. Daha sonra da sonuç matrisindeki noktaları çizip birleştir bakalım birşeyler görebilecekmisin.


Kağıt kalem olmadan bu konuları anlatmak oldukça zormuş. :)
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

-DıLgEş-

Şahsen ben de lise 1'e gidiyorum. Ben de senin gibi vektörleri bilmiyorum, anlamıyorum ama bu işler için de gerçekten vektör konusunu bilmek şart. Eğer vektörleri bilseydim C++'ta ben de kütüphane kullanmazdım...
Aşkın; gözü kör, kulağı sağır, dili tutuk, aklı kıttır..! Hayır yani bu halde nasıl herkesi madara ediyor onu çözemedim..

blacksnow

@travego0403 anlatımınız için teşekkürler.Bu aslında somut bir örnek fakat bunlar arka planda olan şeyler yani bunu ekranda 3 boyutlu olarak nasıl göreceğim?Asıl mesele bu.Şuanda analitik geometri ve vektörleri öğrenmeye başladım.Dediğiniz gibi analitik geometriyi öğrenmek şart farkındayım.

@Nurullah_RT aslında ben de herhangi bir 3D kütüphane öğrenip bir şeyler yapabilirdim fakat bu işin temelini öğrenmek istedim.Hiçbirşey bilmeden hazır metodlarla bir şeyler yapmak hoşuma gitmiyor.Yalnız sizin için daha çok erken o derslerin değerini bilmelisiniz. :)

-DıLgEş-

Alıntı yapılan: blacksnow@Nurullah_RT aslında ben de herhangi bir 3D kütüphane öğrenip bir şeyler yapabilirdim fakat bu işin temelini öğrenmek istedim.Hiçbirşey bilmeden hazır metodlarla bir şeyler yapmak hoşuma gitmiyor.Yalnız sizin için daha çok erken o derslerin değerini bilmelisiniz.
Evet farkındayım ben programlama 2014'ün başında başladım. Şahsen ben de üniversite kazanmadan bu konulara eğilmem diye düşünüyorum...:)  Aslında ben bundan birkaç ay önce sizin gibi yapmak istedim ama vektörler falan işin içine girince vazgeçtim. Şu arayüz kısmına da gelince bildiğim kadarıyla da arayüzü de kendin tanımlanması gerekiyor.
Aşkın; gözü kör, kulağı sağır, dili tutuk, aklı kıttır..! Hayır yani bu halde nasıl herkesi madara ediyor onu çözemedim..