You are on page 1of 41

ndeks --------Ders 1 Balang Ders 2: Callbacklerin Kullanm Ders 3: arpma Aacn Kullanma Ders 4: Malzemelere Giri Ders 5: Eklemlerin

kullanm Ders 6: Faydal ilevler Ders 7: Karakter Kontrol Ders 8: arpma Primitif trleri Ders 9: Eklem eitleri

Ders 1: Balang Bu dersde, projelerinize Newtonu entegre etmenin nasl olduu anlatlacak. Eer henz yapmadysanz http://www.newtondynamics.com 'dan NewtonWin-1.53.zip'i bilgisayarnza indirip kurun. Tutorials.dsw dosyasn bulup ift tklayarak Visual c++ 6.0da an. Tutorial 1 Getting Started alt projesini seip.Tutorial.cpp dosyasn editrde an. Kodlarn bana gidip, en stte aadaki satr ekleyin: #include newton.h

Sonra main fonksiyonunu bulun. maindeki ilk ey, grafik motorunun ilklenmesidir. Bunu, tm Opengl ilklemelerini tek fonksiyon arsna kapsattrdmz, InitOpenGl fonksiyonunda yapmaktayz. Bu, sizin grafik motorunun btn major sistem ilklemelerini temsil ediyor. // OpenGLi ilkle InitOpenGl (argc, argv, "Newton Getting Started", DrawScene, NULL, Keyboard); Sonra fizik sahnesini ilklemek iin u ary greceksiniz. // Fizik sahnesini yarat. Bu, fizik motoru sahnenizi ilklemenizi temsil eder InitScene(); Sonda, glut ana dng ars var. Bu, oyun motorunuzun(programnzn) ana dngsn temsil ediyor.

glutMainLoop(); imdi , InitScene fonksiyonunu inceleyelim. Bu, btn fizik motoru ilklemelerinin yapld yerdir. Bu ders iin mmkn olan en basit fizik sahnesi iin sadece bolukta asl ve dnen bir rigid body(kat cisim) yaratacaz. unu greceksin: // newton dnyasn yarat nWorld = NewtonCreate (NULL, NULL); Bu, bir Newton dnyas rnei salar ve onun btn isel yaplarn ilkler. imdilik iki argmann grmezlikten gel, onlar sonraki derslerde aklanacak. Fonksiyonun dn deeri olan Newton dnyas handleyini daha sonraki kullanmlar iin global bir deikende saklarz. Tabi, glut ana dngsnden kmak mmkn olmadndan dolay, Newton dnyas ve btn ayrlan kaynaklar sonlayp serbest brakacak bir fonksiyonu kaydetmeye ihtiya duyarz.Bunu u satrla yaptk: atexit(CleanUp); Sonra rigid bodyi yaratmaya ihtiya duyarz, tabi ilkin collision(arpma) geometrisine sahip olunmal. (rigid bodyler, her zaman collision geometrisine sahip olmal). Grafiksel ekille ayn boyutlu bir collision kutusu(kresi) yaratrz: // collision kresini yarat collision = NewtonCreateBox (nWorld, box.m_x * 2.0f, box.m_y * 2.0f, box.m_z * 2.0f, NULL); Bu ardaki ilk argman, newton dnyas, devamdakiler kutunun boyutlardr. Son argman, rigid body'nin orijininden collision geometrisi ofsetine kullanlan dnm matrisine gstergedir. NULL olduu zaman, kutu, cismin orjinine yerletirilir. imdi rigid body'i yaratrz ve global bir deikende saklarz. // rigid body yarat ribidBodyBox = NewtonCreateBody (nWorld, collision); collision nesnesi kullanm bitince onu serbest brakmalsn. Collision nesneleri, Newton'da referans sayac olarak kullanlan tek nesnelerdir. Dier rigid bodylerce collision geometrisi paylalabilir. rnein ayn boyutlu birka kutu yapabilirsin ve onlarn hepsi ayn collision geometrisine sahip olabilir.

// collisionu serbest brakl NewtonReleaseCollision (nWorld, collision); Newton ,bir rigid body yaratt zaman bodyi statik yapan ktlesi snrsz set ediliktir. Bu bodynin dinamik olmasn istediimizi Newton'u sylemeye ihtiya duyarz. Bunu u aryla yaparz: //body ktle ve ataletini set et NewtonBodySetMassMatrix (ribidBodyBox, 1.0f, 1.0f, 1.0f, 1.0f); Parametreler hakknda endie etme, ilgili derslerde anlatlacak. Ayn zamanda bu body'i dnyaya yerletirmeye ihtiya duyarz // dnm matrisini set et dMatrix matrix (box.GetMatrix()); matrix.m_posit.m_x = 0.0f; matrix.m_posit.m_y = 1.0f; matrix.m_posit.m_z = 0.0f; NewtonBodySetMatrix (ribidBodyBox, &matrix[0][0]); Bu body'e hibir kuvvet veya tork uygulanmyor. Sadece zayf bir hz uygularz. // Zayf hz vererek body'i canlandr dVector omega (1.0f, 1.0f, 1.0f); NewtonBodySetOmega (ribidBodyBox, &omega[0]); Tm ilklemeler bunlar, imdi ana simlasyon dngsne bakalm. OpenGL veya motorunuz, her kare iin ana simlasyon dngsne ar yapacak. Bu ders iin bu DrawScene fonksiyonu. Son gncellemeden beri geen zaman bilmeliyiz. Bu u faydal fonksiyon ile yaplr. timeStep = timer.GetElapsedSeconds(); Sonra bu zaman miktar ile NewtonUpdate'yi arrz. // Newton fizik dnyasn gncelle NewtonUpdate (nWorld, timeStep); Sonra fizik dnyasn gncelleme ars ile konumu deien bodylerin dnm matrislerini elde etmeye ihtiya duyarz. Bu rnek iin, allahtan sadece bir tane bodye sahibiz.

// rigid body'den matrisi al dMatrix matrix; NewtonBodyGetMatrix(ribidBodyBox, &matrix[0][0]); imdi grafiksel cisme dnm uygulamaya ihtiya duyarz. // Grsel cisme matrisi set et box.SetMatrix (matrix); Son olarak sahneleme // nesneyi sahnele glPushMatrix(); box.Render(); glPopMatrix();

Son ey uygulamann sonlandrlmasdr. Bu, esc tuuna basld zaman veya pencerenin close dmesine tklanrsa olur. Her iki durumdada exit(0) fonksiyonu arlr. Bu fonksiyon, sondan baa doru btn sonlama olaylarn aracak. Bizim olaymzda Newton dnyasn yok edecek olan sadece Cleanup fonksiyonuna sahibiz. w, s, a, d, tularyla demoda dolalabilir. Yn deitirmek iin, fare dmesi basl iken fareyi hareket ettir. Ders bitti.

Ders 2: Callbacklerin Kullanm ilk derste, projenize Newton'u tantmann nasl olduunu rendik. Ayn ekilde tek bir rigid body'nin basit similasyonunu gerekletirdik, Eer fiziki varlklarnn binlercesiyle bir sahneye sahipsek ne olacak. Bu tarz sahneler, fizie tutarllyla olabildiince geree yakn olur. Tabi , hareket, oyuncunun etrafndadr ve sahnedeki nesnelerin ou sadece onlar aktif hale getirilmesi iin dier baz olaylar beklemektedir. Bu durumda, fizik gncellemesi sonras neyin deimi olduunu anlamak iin ilk dersin mimarisinin ounu tekrar tanmlamak gerekecek. Cisimler ve eklemlere ksayollar tutmak iin kendi veri yaplarn nitelendirmek zorunda olunacak. Newton, uygulamada mmkn olduunca az kullanszlk iin tasarland. O, birka bin cisimin veri setini ele almak iin retildi, Uygulamaya bu dizilerin bakmnn ar ykn sokmadan. Newton, yine , programlamada, dz kullanm paradigmasn kullanyor. Uygulama bir nesne yaratt zaman, kullanc veri deerleri ve callbackleri kayt seeneine sahiptir. Newton, baz bilgi trleri deitii zaman uygulamayla iletiim kurmak iin bu callbackleri kullanr.

Bu tip sahneler iin, ayn zamanda, sahnedeki grafiksel nesnelerin saysna dikkat edecek bir sisteme ihtiya duyacaz. Basit bir bal liste kullanacaz, listenin sonuna yeni nesneleri ekleyip ve bandan nesneleri karacaz. Tutorial 2 Using Callbacks Projesini ap tutorial.cpp dosyasna tklayn. InitScene fonksiyonunu bulun. fark edeceiniz ilk ey, NewtonCreate fonksiyonuna iki argman getiimizdir. Bunlar, hafza tahsisi ve iadesi fonksiyonlarna gstergelerdir. // newton dnyas yarat nWorld = NewtonCreate (PhysicsAlloc, PhysicsFree); Newton, her ne zaman hafzaya ihtiya duyar veya her ne zaman baz hafza ksmn serbest brakmaya ihtiya duyarsa bu fonksiyonlar arr. Uygulamanzn, hafza organizasyonundan endie duymasna gerek yoktur; Newton, isel olarak bunu ynetir. Tahsis fonksiyonlar, bir argman olarak hafza boyutunu geer. Uygulama, fizik motorunun ne kadar hafza kullandn izlemek iin bu deeri kullanabilir. Uygulama sonland zaman btn hafzann iade edilecei garantidir. imdi, Kat cisim kutusuna gstergenin yerel bir deiken olduunu farkna varacaksnz. Aslnda, dnya hari herhangi bir Newton nesnesine herhangi bir gsterge yoktur. Uygulama tarafndan verinin depolanmamasna almak yeni balayan programclar iin zor, Ama zamanla bu rahatl hissedeceksin. sahne ynetimi iin Newton'un yeteneini ktye kullanacaz. grafiksel nesneyi kat cisim kullanc verisi olarak kaydedeceiz. Ve ayn zamanda, kat cisim ile bir ykc callback ekleyeceiz. // Kat cisim ile grafiksel nesneyi depola. NewtonBodySetUserData (floorBody, floor); // bu kat cisim iin ykc set et NewtonBodySetDestructorCallback (floorBody, PhysicsBodyDestructor); Takip eden satrlar, ders bire benzerdir, ok katl bir sr kutu eklemek hari. Not: Eer yksek-son sisteme sahip deilseniz, sisteminizi daha kullanl olmas iin dng tekrarlama indekslerinin herhangi birini azaltabilirsin. farkl dier bir ey de hem dnm callback fonksiyonu hemde kuvvet ve tork callback'i atamamzdr. // dnm callback fonksiyonunu set et

NewtonBodySetTransformCallback (boxBody, PhysicsSetTransform); // Kuvvet ve tork callback fonksiyonunu set et NewtonBodySetForceAndTorqueCallback (boxBody, PhysicsApplyForceAndTorque); Kodun kalan, ilk derstekiyle ayn. body yok edildildii zaman, ayn ekilde, grafik bileenide yok edilir. Ayn callback mekanizmasn kullanan newton'da ok nesne vardr: Malzemeler, eklemler, baz zel arpma geometrileri, newton dnyas ve iterator fonksiyonlar. Bu basit derslerde hepsini anlatmadk. bu nesnelerden herhangi birine herhangi bir derste ilk karlatmzda ilgili gndermeler yaplacaktr. Bu derste bu kadar. Ders 3: arpma Aacn Kullanma Ikinci derste, byk bir arka plan kutusunun zerine den birok nesneyle kk bir sahneyi yaratmay baardk. bu demodaki problem, her eyi arpma primitiflerini kullanarak yapmakt. arpma primitifleriyle dnyay modellemek, ne pratik ne de verimli deildir. Bunun iin Newton, arpma primitiflerinin iki zel eidini salar: Kullanc tanml arpma ve arpma aalar. Bu tip arpma geometrileri, kutular ve kreler gibi, esnek deil ; nk Kuvvet ve hz onlar etkileyemez, tabi onlar direkt olarak cisim dnm matrisi maniple edilerek uygulama tarafndan hareket ettirilebilir. Bu primitifler, kat cisme tayin edildii zaman, onlar, ktle zelliini geersiz klar. Bu arpma geometrilerinin uygulamaya salad fayda, onlarn herhangi biri keyfi ekle sahip olabilir veya oluturabilir. Onlar, snrsz poligon miktaryla oluturulabilir, bu , statik arka plan arpma geometrisini temsil etmek iin onlar ideal yapar. Kullanc tanml arpma, ileri arpma dersinde anlatlacak. imdilik , bu arpma geometrisi , irtifal alan(heightmap) veya prosedrel geometriler gibi bilinen eriim kalplar ile meshler iin faydaldr diyeceiz. ou geometri iin, arpma aac en iyi seenektir. Tutorial 3 Using Collision Tree A projesini an. InitScene() fonksiyonunu bul nceki dersten tek fark gr, bu, statik arka plan geometrisi iin nceden yaplm bir level geometri yklyoruz. Bu, u kod paras ile yaplyor: // level geometriyi ykle ve display liste onu ekle level = new LevelPrimitive ("data\\level.dat", nWorld); Bu dosyann kalan, aynen nceki gibi kalyor.

LevelPrimitive.cpp dosyasn a; Bu dosya, arka plan geometrisini yklemek ve yaratmak iin btn ilevsellii yerine getirir. Bu snfn yapcsnda yaplan ilk ey // arpma aa geometrisini yarat collision = NewtonCreateTreeCollision(nWorld, LevelCollisionCallback); Bu arda ikinci argman, baka bir Newton callback olay fonksiyonudur, bu, arpma geometrisinin her yz ile kullanc id'sinde depolu bilgiyi karmak ve deitirmek iin uygulamaya izin verir . Bu callback iin genel kullanm, cisimlerin evresinde arpma geometrisinin grntleyerek debuglamaya yardm iindir. Tabi, bu fonksiyon iin daha ileri maksat zel efekt simlasyonlarndadr mesela: level geometride yzey malzeme zellikleri bana, darbe sonras krlr arplabilir olan yzeyler gibi bal arpmalar (cam krlmas), hatta baz olaydan sonra slatlan kuru yzey gibi deitirilebilir yzey malzemesi, Veya hatta tama bant gibi zel efekt yzeyleri. Olaslklar sadece kullancnn yaratcl ve ustal ile snrl. Not: Eer uygulamanz alma zaman okgen bana nitelii deitirmeyecekse. debug amal callbacki kullanabilirsin, tabi nihai exeniz iin level arpma callbackine (2.parametre) NULL geerek performans bir para arttrrsn. Sonraki ar // Collsion geometrisini yaratmaya hazrlama NewtonTreeCollisionBeginBuild(collision); Bu, yzleri kabul etmeye balamak zere arpma aacn hazrlar. Sadece bir arpma aac, bir zamanda ina edilebilir, Byle yaplmazsa tahmin edilemeyen sonular yaratacak. sonra Veri dosyas alr ve hzl sahneleme iin displaylist yaratlr. Fonksiyon, arpma aacna ve display liste datas eklenen level geometrisinin her yz iin tekrarlanr. // level datasn a file = fopen (name, "rb"); m_list = glGenLists(1); glNewList (m_list, GL_COMPILE); for (fscanf (file, "%d", &count); count; fscanf (file, "%d", &count)) { // yz oku for (i = 0; i < count; i ++) { fscanf (file, "%(%f %f %f%)", &point[i].m_x, &point[i].m_y, &point[i].m_z); }

// arpma aacna bu yz ekle NewtonTreeCollisionAddFace(collision, count, &point[0].m_x, sizeof (dVector), 1); // displayliste bu yz ekle glBegin(GL_POLYGON); // normali hesapla dVector normal ((point[1] - point[0]) * (point[2] - point[0])); normal = normal.Scale (1.0f / sqrtf (normal % normal)); glNormal3f(normal.m_x, normal.m_y, normal.m_z); // yz sun for (i = 0; i < count; i ++) { glVertex3f(point[i].m_x, point[i].m_y, point[i].m_z); } //display list sonu glEnd(); } glEndList ();

u satr, // arpma aacna bu yz ekle NewtonTreeCollisionAddFace(collision, count, &point[0].m_x, sizeof (dVector), 1); arpma aacna her bir yz ekler. Bu fonksiyona son parametresinin, 1 set edildiine dikkat. Bu, aataki yzle depolanacak olan kullanc verisidir. Bu parametre, veri dosyasndan okunmal ve O, level geometrinin yzey tipiyle ilikilendirilmeli. Genellikle bir yazm arac bunu belirtir, Ama bu, basit bir ders olduundan dolay deeri biz set edeceiz.

Btn yzler arpmaya eklendikten sonraki fonksiyon ars // arpma aacn ina etmeyi sonulandr NewtonTreeCollisionEndBuild(collision, 1); Bu, arpma geometrisinin derlenmesini Newton'a syler. Son parametreye sfr koyulduu zaman, Aa derleyicisi, arpma aacn ayn geometriden yapacak. Bu, hzldr ve test maksat in kullanlabilir. Bununla birlikte nihai exeniz iin bu parametre Her zaman 1 set edilmeli. Bellek kazanc 200% -1200%, alma zaman performans 5 kattan daha yksek hzda artabilir, tabi bu orijinal veride ne kadar lzumsuzluk bilginin

olduuna baldr. Optimizasyon, meshin topolojisini deitirmez, sadece lzumsuz bilgiyi karr. Kodun kalan, daha nce yaptmz gibi sadece kat cismi yaratr // arpma aacn serbest brak NewtonReleaseCollision (nWorld, collision); // Bu cismin global konumunu set et NewtonBodySetMatrix (level, &m_matrix[0][0]);

dVector boxP0; dVector boxP1; // Bu geometrinin aabb konumunu al NewtonCollisionCalculateAABB (collision, &m_matrix[0][0], &boxP0.m_x, &boxP1.m_x); // dnya boyutuna Biraz ekstra takviye ekle boxP0.m_x -= 10.0f; boxP0.m_y -= 10.0f; boxP0.m_z -= 10.0f; boxP1.m_x += 10.0f; boxP1.m_y += 10.0f; boxP1.m_z += 10.0f; // Dnya boyutunu set et NewtonSetWorldSize (nWorld, &boxP0.m_x, &boxP1.m_x);

Buradaki ilgin tek ey ; Newton dnyasnn tarafn set etmek iin level geometrisinin tarafn kullanyoruz. Not: mmkn olduunca ok arpma geometrisini basitletirmek iyi bir fikirdir . Arka plan geometrisi iin fazla mozaik arpma geometrisi iyi grnebilir ama onlar arpma kararlln ok gelitirmez, motora ar yk bindirir. Newton, geometri ve temas(kontak) optimizasyonunda ok iyidir, Ama eer fazla karmak eri yzey eklersen o zaman performans ve dorulukta problemlere sahip olacaksn. Bu ders iin hepsi bu.

Ders 4: Malzemelere Giri imdiye kadar n tanml zelliklere sahip kat cisimler kullandk, Ama bu, kat cisimler iin gerek dnyadaki davran eklini vermez. Gerek zamanl bir fizik motoru sadece

kaba bir tahmindir buna ramen gerek dnyadaki tm fiziksel davranlar grmek istiyoruz: elastikiyet, srtnme, ses efektleri, partikler etkiler ve hatta gereki olmayan efektler. Kat cisim zel fizik davran iin Newton'un cevab, malzeme grafiidir. Malzeme grafii, ynlendirilmemi bir grafiktir, dmler(node) malzeme ID'si ve kenarlar(edge) malzeme etkileimleridir. malzeme id'leri benzersiz tanmlayclardr. Newton, malzemeler olarak una benzer gerek temsiller kullanyor: Tahta, beton, metal(wood, concrete, metal) ve benzerleri. Malzeme etkileimleri, temasa kuran herhangi iki malzeme id'sinin davran tanmlamalarn depolayan nesnelerdir. Bu derste, kk bir top karakterini kontrol etmekte yardm olacak farkl basit malzeme Ve bir zel malzeme ieren bir malzeme grafii yaratacaz tutorial4_IntroductionToMaterials projesini an. Tutorial.cpp dosyasn ap InitScene()fonksiyonuna gidin. Tm sahne iin malzeme grafii yaratmak iin ilkin Newton dnyas yaratlm olmas gerek. Malzeme ii masrafldr , ayr ayr yok edilemez . Uygulama, projede ka malzemenin kullanlacak olduunu nceden kararlatrmal. // Btn malzemeleri ve malzeme etkileimlerini tertiple SetupMaterials (nWorld); Sonra, ilk kontrol edilebilir karakterimizi yaratrz. // oyuncu tarafndan kontrol edilebilir bir top yarat AddBallCharacter (); Materials.cpp Dosyasn a malzeme id'leri olarak kullanlan drt global deikeni greceksin int woodID; int metalID; int levelID; int characterID; Sonra, iki kat cisim temas ettiinde geri besleme iin gerekli kaynaklar depolamada uygulamann kullanabildii bir veri yaps vardr. // oyunun zel efektlerini tutmada kullanlan yap struct SpecialEffectStruct { void *soundHandle; void *particleHandle;

// burada, bu Malzemelerin efektleri iin kaynaklar yaratlr void Init (char* effectName) { } // Burada bu malzeme etkileimi iin btn kaynaklar yok edilir void Detroy () { } // Darbe sesini al void PlayImpactSound (float volume) { } // srtnme sesini al void PlayScratchSound (float volume) { } NewtonBody* m_body0; NewtonBody* m_body1; dVector m_position; float m_contactMaxNormalSpeed; float m_contactMaxTangentSpeed; };

Uygulamann tanmlamay istedii her farkl zel efekt iin bu yapnn bir rnei vardr. // farkl malzeme etkileimleri tutmada kullanlan yap SpecialEffectStruct wood_wood; SpecialEffectStruct wood_metal; SpecialEffectStruct wood_level; SpecialEffectStruct metal_metal; SpecialEffectStruct metal_level;

SetupMaterials Fonksiyonunu bul. lkin tm SpecialEffect rnekleri ilklenir // Burada malzeme etkileimi ilklenir wood_wood.Init ("wood_wood"); wood_metal.Init ("wood_metal");

wood_level.Init ("wood_level"); metal_metal.Init ("metal_metal"); metal_level.Init ("metal_level"); Sonra uygulama, varsaylan id'i alr ve varsaylan ID- Varsaylan ID ifti iin varsaylan fizik davrann set eder // varsaylan malzeme IDsini al defaultID = NewtonMaterialGetDefaultGroupID (nWorld); // varsaylan malzeme zelliklerini Set et NewtonMaterialSetDefaultSoftness (nWorld, defaultID, defaultID, 0.05f); NewtonMaterialSetDefaultElasticity (nWorld, defaultID, defaultID, 0.4f); NewtonMaterialSetDefaultCollidable (nWorld, defaultID, defaultID, 1); NewtonMaterialSetDefaultFriction (nWorld, defaultID, defaultID, 1.0f, 0.5f); NewtonMaterialSetCollisionCallback (nWorld, woodID, woodID, &wood_wood, GenericContactBegin, GenericContactProcess, GenericContactEnd); Uygulamann, varsaylan-varsaylan malzeme etkileimleri iin zellikler set etmesi nemlidir. nk yeni malzemeler yaratld zaman, mevcut olanlarla yeni idlerin tm mmkn permtasyonlar varsaylan-varsaylan iftten zellikleri alr. imdi uygulama, bu level ile kullanlacak olan btn malzeme id'lerini yaratr. // Btn malzeme id'lerini yarat woodID = NewtonMaterialCreateGroupID(nWorld); metalID = NewtonMaterialCreateGroupID(nWorld); levelID = NewtonMaterialCreateGroupID(nWorld); characterID = NewtonMaterialCreateGroupID(nWorld);

Sonra, herhangi iki malzemenin her kombinasyonu iin bireysel malzeme etkileimleri ayarlamalarnn skc sreci balar. // tahtada tahta iin malzeme zelliklerini set et NewtonMaterialSetDefaultElasticity (nWorld, woodID, woodID, 0.3f); NewtonMaterialSetDefaultFriction (nWorld, woodID, woodID, 1.1f, 0.7f); NewtonMaterialSetCollisionCallback (nWorld, woodID, woodID, &wood_wood, GenericContactBegin, GenericContactProcess, GenericContactEnd);

Neredeyse btn malzeme etkileimleri, ayn aa malzeme callback'ini kullanyor tabi farkl kullanc verisiyle. Bu, arka plan kat cisimleri ayarlar iin olanla ok ortaktr. Uygulama ou zaman srtnme veya sekme veya partikler efektler, veya iki cisim arptnda vbde farkl seslerin alnmas gibi ses efektler gibi grsel reaksiyonlarla

ilgilenir. Ancak bazen zelletirmeler istenebilir , iki cismin arpmasnn ilenmesi hakknda hkme varlabilir. Top karakterindeki gibi. // leveldeki karakter iin malzeme zelliklerini set et NewtonMaterialSetDefaultElasticity (nWorld, levelID, characterID, 0.4f); NewtonMaterialSetDefaultFriction (nWorld, levelID, characterID, 0.8f, 0.8f); NewtonMaterialSetCollisionCallback (nWorld, levelID, characterID, &metal_level, GenericContactBegin, CharacterContactProcess, GenericContactEnd); Bu malzeme farkl bir temas callbacki olan CharacterContactProcess kullanr. Dnte bu fonksiyon, ayn varsaylan temas callback'ini arr, tabi dn zerine , topun lineer hz vektr ile temas normalini dzene sokar, Bu dndrme, nemli ekilde arka plan geometrisiyle topun kinetik srtnme davrann gelitirir. Malzemeler sadece, temas fizik davranlarn salamak iin snrl deil; Onlar, oyun mant ve oynama memnuniyetini salamak iin kullanlabilir. Tetikli ynlar yaratmak iin(su havuzu gibi) statik kat cisimlerle (snrsz ktleli cisimler) kombinasyonla malzemeleri kullanabilirsin. Ayn ekilde, kayan yzeyler gibi zel efektler yaratmak veya zel cisimler iin sensr alanlarn yaratmak iin kullanlabilir. Bunlar, ilerki derslerde deinilecek ileri kullanmlardr. Biz sadece malzemelerin gcn vurgulamay istiyoruz burada. imdi Tutorial.cpp dosyasn an ve AddBallCharacter () fonksiyonunu bulun. Bu fonksiyon bir top yaratp , zel kuvvet ve tork callback fonksiyonu atar. Ayn ekilde, bir oyuncu karakteri olacak olduundan dolay, otomatik pasifize ilevsellii kapatlp , cisim, aktif hale getirilir. BallCharacterApplyForceAndTorque fonksiyonu olduka basittir Iki moda sahip: normal modda, yuvarlanmasn salamak iin topa tork uygular, havalanma modunda , topun merkezine bir kuvveti uygular. Kuvvet ve tork, kameray gnceller. Topu kontrol etmek iin: Topu hareket ettirmek iin w, s, a, d tular havalanma moduna gei iin space tuu. Kamera ynn deitirmek iin mouse sol tuu basl tutarak hareket ettirilir. Bu ders iin hepsi bu.

Ders 5: Eklemlerin kullanm Eklemler (Constraint, joint), aralarnda bir veya fazla serbestlik derecesi kesilmi iki kat cisimi balayan nesnelerdir. Bu derste , Newton API'leriyle salanan farkl eklem tiplerini kullanmay greceiz. Newton, eklemlerin ok zengin bir setine sahiptir. Basit bir derste hepsini anlatmak ok fazla olur. Sadece en ok kullanlan 4 eklemi greceiz:

Bilyal mafsal (ball and socket), mentee (hinge), tirbuon (corkscrew) ve kzak(slider). Kendiniz, dierlerini , bunlarla kyaslayarak kullanabilmeniz gerekir. tutorial5_UsingJoints projesini an. Bu proje neredeyse 4. derstekiyle ayn ama baz ekstralar var. Tutorial.cpp dosyasn ap InitScene() fonksiyonuna git. Top karakteri yaratldktan sonra ,farkl eklem tipiyle balanm kat cisimler var. // Baz eklem konfigrasyonlar ekle AddRope (nWorld); AddRollingBeats (nWorld); AddDoubleSwingDoors (nWorld);

JointsTutorial.cpp dosyasn a AddRope fonksiyonunu bul. Bu fonksiyon, bilyal masfal eklemi ile birka ince dikdrtgensel ekili balayarak kaba bir halat vari bir ey yaratacak. Halatn , gereki ekilde davranmas iin doru bir atalet momentine sahip olmal. // Doru bir atalet momentini hesapla mass = 2.0f; Ixx = 0.7f * mass * (size.m_y * size.m_y + size.m_z * size.m_z) / 12.0f; Iyy = 0.7f * mass * (size.m_x * size.m_x + size.m_z * size.m_z) / 12.0f; Izz = 0.7f * mass * (size.m_x * size.m_x + size.m_y * size.m_y) / 12.0f;

Sonra, global uzayda ilk paras iin konumu buluruz // Global uzayda bu kk iin konumu set et dMatrix location (GetIdentityMatrix()); Location.m_posit.m_y = 11.5f; Location.m_posit.m_z = -5.0f; Sonra, halatn her parasnca paylalacak ortak bir arpma geometrisini yaratrz // Btn balantlarca paylalacak bir arpma primitifi yarat collision = NewtonCreateBox (nWorld, size.m_x, size.m_y, size.m_z, NULL);

Takip eden dng, her bir halat parasn yaratp, balang koulu ve parametrelerini set edecek for (i = 0; i < 6; i ++) {

// grafiksel karakteri yarat (cismimiz iin kutu kullanld) box = new BoxPrimitive (location, size); //kat cismi yarat link1 = NewtonCreateBody (nWorld, collision); // bu nesne iin malzeme idsi Set et NewtonBodySetMaterialGroupID (link1, woodID); // cisim ile grafiksel nesneye gsterge kaydet. NewtonBodySetUserData (link1, box); // Bu kat cisim iin yok edici set et NewtonBodySetDestructorCallback (link1, PhysicsBodyDestructor); // dnm callback fonksiyonunu set et NewtonBodySetTransformCallback (link1, PhysicsSetTransform); // kuvvet ve tork callback fonksiyonunu set et NewtonBodySetForceAndTorqueCallback (link1, hysicsApplyForceAndTorque); // ktle matrisini set et NewtonBodySetMassMatrix (link1, mass, Ixx, Iyy, Izz); // kat cisim ve grafiksel nesne ikilisi iin matris set et NewtonBodySetMatrix (link1, &location [0][0]); PhysicsSetTransform (link1, &location [0][0]);

Sonra her iki halat paras, bilyal mafsal eklemi ile balanr. lk para hari, o dnyaya bal. dVector pivot (location.m_posit); pivot.m_y += size.m_y * 0.5f; // bilyal mafsal eklemi ile bu iki cisim balanr joint = NewtonConstraintCreateBall (nWorld, &pivot.m_x, link1, link0);

Halatn her paras, ekseni etrafnda sadece 10 derece dnmeye izin verilir. Bu halat daha gereki yapacak.

// balantlar , gereki olmayan dnmesini nleyecek bir bklme as set et dVector pin (location.m_up.Scale (-1.0f)); NewtonBallSetConeLimits (joint, &pin.m_x, 0.0f, 10.0f * 3.1416f / 180.0f); Kalan kodlar, sonraki halat parasn yaratmak iin dngye dnktr link0 = link1; Location.m_posit.m_y -= size.m_y; } Halat tamamlandktan sonra , arpma geometrisini serbest brakrz. Bu halat tertibini tamamlar // ihtiya kalmad zaman arpma geometrisi serbest braklr NewtonReleaseCollision (nWorld, collision); imdi DoubleDoorUserCallback fonksiyonunu bul. Bu fonksiyon, iki dikdrtgensel ekille ve mentee eklemiyle ift kanatl bir kap yaratr. Ilgili kurgu, nceki fonksiyon ile neredeyse ayndr; Bu yzden tekrar aklanmayacak. Kod paras: dVector pivot (location.m_posit); dVector pin (location.m_up); pivot.m_x += size.m_x * 0.5f; // mentee eklemi ile bu iki cisimi bala joint = NewtonConstraintCreateHinge (nWorld, &pivot.m_x, &pin.m_x, link1, NULL); // Kapya limit set et NewtonHingeSetUserCallback (joint, DoubleDoorUserCallback);

Yukarda, mentee eklemi yaratlp, mentee ivmesini gncelletirecek bir callback fonksiyonu set edilir. DoubleDoorUserCallback fonksiyonu her gncellemede arlr. nc fonksiyon, AddRollingBeats, DoubleDoorUserCallback gibi ayn prosedr izler tabi kzak ve tirbuon eklemleri eklemek hari. Burada deerli olan farkl tek ey, bu eklemlerdir, kendi gncelleme callbacklerine sahipler, ayn ekilde, kendi zel verisine ve yok edici fonksiyonuna sahipler. tirbuon eklemde , iki serbestlik derecesi kontrol eder, biri dn ve biri dorusal limit. Bu dersin sonu.

Ders 6: Faydal ilevler

Ray Casting(In Frlatma): In frlatma, bahsedeceklerimden en nemlisi. Motorun fizik tarafyla hibir ilgiye sahip deil; Tabi, genel amal n frlatma arayz ve etkinliini uygulamaya salamak iin motorun isel veri yaplarn kullanyor. Bir projedeki n frlatma uygulamalar epey fazla. Onlarn arasnda bahsedebileceklerimiz: Nesne seimi, plasman, hedef vurmak iin gr hatt, eitli yapay zeka algoritmalarna yardm, ve nicesi. Derste, n frlatma iin iki kullanm greceiz: Nesne seimi ve plasman. tutorial7_UtilityFuntionality\totorial7.cpp dosyasn an InitScene fonksiyonunu bulun. Bu fonksiyonun ilk satr, bu ders iin zemin olarak hizmet edecek byk dz bir kutu yaratr. Zemini yaratan satrdan sonra // Zemine greli olarak kamera konumlanr cameraEyepoint.m_y = FindFloor (cameraEyepoint.m_x, cameraEyepoint.m_z) + 10.0f; Yukardaki satda, zeminin 10 metre yukarsna kamera yerletirilmitir. Ayn dosyada FindFloor fonksiyonunu bul. Bu, ilk ve n frlatma ilevinin en basit kullanmndan biri. Uzaydaki herhangi st noktadan daha alttaki herhangi noktaya dikey bir n frlatp , Sahnedeki en yakn statik cismin ykselmesini salamak amalanmakta. Bunun iin 1000 metre alt ve 1000 metre st nokta iin bir n frlatacaz, n frlatma arlr ve sahnedeki en yakn statik cisim ile nn kesiimi deerlendirilir. In frlatma , alan paralar veya nesneler listesi veya buna benzer herhangi ey tabanl n tanml herhangi filtreleme teknii uygulamaz. Onun yerine, Motor, batan sona nn sahne dolamn taradnda , kat cisimlerin nasl szleceini kararlatrmay uygulamaya brakr. Uygulama, zel bir callback fonksiyonunu yazarak bunu yapar ki, motor, yolu zerinde bir kat cisimle karlat her defasnda o arlr. Bu fonksiyon, RayCastPlacement. Ar derecede basittir, each time it is called kat cisim statik mi diye kontrol eder, eer yleyse, o zaman, parametrik kesime ncekine kyasla daha kk m diye kontrol eder, Ve yleyse, o zaman, Kesime parametresini kaydeder

ve returns that parameter to let Newton know that it should not check bodies beyond that point. Dn zerine zemin, st ve alt noktalar arasnda interpole edilik deerdedir. After this the function InitScene continues to populate the scene with some objects. Bu ders iin we will place two building structures by calling two similar functions.

CreateBuildingStruture_1 (); CreateBuildingStruture_2 (); Her iki fonksiyon ok benzer bu yzden birini tanyacaz. Ayn dosyada CreateBuildingStruture_1 fonksiyonunu bulun; Bu fonksiyonda , we will place a parking lot type of structure in the scene. For that it is very important the initial position of the components touch each other starting from the ground and continuing building up. yine, yapy inaya balamak iin zeminin tam yksekliini bilmeye ihtiya duyarz. Sonra fonksiyon 1kg ve 200kg iki farkl ktle deeri set eder (yksek ktle oranlar sonular sonra aklanacak) ve what follows is a loop building a 10 story high structure by placing 4 lightweight support columns and a heavy platform of top in each iteration. In frlatma iin ikinci uygulama, nesne seimidir. lkin, seilir nesneler neler hem de yapacan tanmlamaya ihtiya duyarz. Object picking is the act of pointing to a body on the screen and finding out what rigid body was rendered at that pixel position. This is done by knowing the fact that a pixel on the near clipping plane and a pixel on the far clipping plane with the same screen coordinate maps to a straight line on three the dimensional space. To do this we take the point at the mouse position, and set the near clipping coordinate z to zero. Then we invert transform this point by the view port matrix, the projection matrix, and the view matrix of the graphic API. We do the same for the second point except now we set z value to 1 for the far clipping plane. Once we do that we have the two points defining the line on three d space. We should mention now that this is not an internal part of the physics engine it is just an explanation of how to obtain the point from the screen space and convert it to a line in tree d space. Must graphics engines provide this functionality as a built in feature. Next we collect all of the rigid bodies intersected by the ray going from the origin to the end of the line. Next we store two values, the parametric intersection and the position of the point relative to the hit rigid body.

Next, as long as the mouse button is depressed we want to apply a force to the body at the hit point, that will tend to drive to zero the distance from that point in the body space and the same point on the line at the new mouse position. For that we use a penalty force. To do all this we need to modify the mouse routine function which is found in the keyboard function. The big if-else statement is the part implementing the mouse position collection and doing the data manipulation. nemli ksm , RayCastFilter callback fonksiyonunun uygulanmasdr. Bu fonksiyon, en yakn dinamik cismi deerlendirme ve ayn zaman kat cisme pointer hari , zemini bulmaya benzerdir. The object pick effect is done by implementing a new apply force and torque PhysicsApplyPickForce function callback which is set to the hit body when it is picked and reset back to the standard apply gravity when the body is let loose.

Iteratrler: Newton motoru, olaya dayal kullanc ara yz tabanl tasarland. Bununla birlikte, baz durumlar vardr ki in which an application needs to iterate through all the object is the scene collecting information about each object for many different purposes. Bu durumlar nadirdir ama bununla birlikte kanlmaz. Examples of these cases are setting global state for all objects in the scene at the hit of a button, or displaying debug information for objects in global manner, and other application dependent uses. Newton motoru, iki Iteratrle gelir, biri kati cisimler iin ve ikincisi sahnede arpma geometrisini debuglamaya zeldir. The second iterator comes handy when the behavior of some objects is the scene is odd, or when making complex collision objects. lki, eitli maksatlar iin kullanlabilir. Bu derste we use the Body Set globally the state of auto sleeping for each body, Ve ayn zamanda sahnedeki her cisimin arpma geometrisini grntlemek iin. unu vurgulamak nemli, that teratorler, fizik sahnesini debuglamak ve balanslamak iin uygulamaya yardm iin tasarlanam yardmc fonksiyonlardr. These functions are by not mean efficient and the application should not rely on them for runtime functionality as they will severally degrade the performance of the engine. Keyboard() fonksiyonunu bulun, ve iki yeni ara yz tuunun eklenmi olduunu greceksin. F1 ve F2 F1 tuu, global oto uyku flag geileri iindir ve ToggleAutoSleep callback fonksiyonuna pointer geen NewtonWorldForEachBodyDo Iteratr fonksiyonunu arr .

The function ToggleAutoSleep will be called for each body in the scene changing the state of the body from sleeping to awake, or vise versa depending on the global auto sleep flag, the function also forces the body to wake up state. The second key F2 toggles a global debug flag to indicate the main render loop if it has to render the debug geometry of each collision geometry in the scene. If you look at the end of the function DrawScene, the if statement will call the DebugShowCollision Debug arpma fonksiyonu iki yuvalanm dng uygular, one the outer one iterates through each body on the scene passing the callback DebugShowBodyCollision And the DebugShowBodyCollision iterate through each collision geometry in the scene by calling DebugShowGeometryCollision. It should be pointed out that these functions are not meant to be efficient and they will render all the bodies on the scene, therefore they can degrade performance significantly on large scene. The application should implement more efficient versions of these functions by adding some kind of filtering.

Ders 7: Karakter Kontrol Bu, bizim ilk ileri dersimiz. Kuvvet ve tork ile kontrol edilecek bir karakteri yaratmak iin yardmc birka zellik kullanacaz, ve O ayn zamanda, dik pozisyonda duracak. Kullanacamz eler: ID'leriyle bileim arpma primitifi, zel s vektor eklemi, Ve zel kuvvet ve tork. Bu, teknik bir demodur bundan dolay minimum kod miktaryla, karakterin u zelliklerini gstermeye odaklanacak: zplama, melme ve merdiven rampa inme kma vb, uygulamas uygulamaya braklan. Bu dersin ats, malzemeler ile ilgili dersden alnmadr. Tutorial6_CharaterController projesini an , InitScene() fonksiyonunda top karakterinin u ar ile deitirildiine greceksin // oyuncu tarafndan kontrol edilebilir bir top yarat AddCharacter (nWorld); AddCharacter fonksiyonunu bulun, Bu fonksiyon, bileim arpma geometrisiyle bir kat cisim yaratr. arpma geometrisi, aa kreleri yapar ve karakterin altndaki zemini sezmek iin clz ubuk kullanlr. arpma geometrisinin her paras, arpmay reten cisim parasnn ne olduu tespit iin balant callback ile daha sonra kullanlacak ID e sahip. // Merkeze kreyi yerletir collisionParts[count] = NewtonCreateSphere (nWorld, size.m_x * 0.75f, NULL); // Bu collsion iin bir ID set et

NewtonConvexCollisionSetUserID (collisionParts[count], SPHERE_COLLISION); count ++; // st yarya kreyi yerletir offsetMatrix.m_posit.m_y = size.m_y * 0.25f; collisionParts[count] = NewtonCreateSphere (nWorld, size.m_x * 0.75f, &offsetMatrix[0][0]); // Bu collsion iin bir ID set et NewtonConvexCollisionSetUserID (collisionParts[count], SPHERE_COLLISION); count ++; // aa yarya kreyi yerletir offsetMatrix.m_posit.m_y = -size.m_y * 0.25f; collisionParts[count] = NewtonCreateSphere (nWorld, size.m_x * 0.75f, &offsetMatrix[0][0]); // Bu collsion iin bir ID set et NewtonConvexCollisionSetUserID (collisionParts[count], SPHERE_COLLISION); count ++; // Yer destei iin uzun kutu ubuu kullan offsetMatrix.m_posit.m_y = -size.m_y * 0.25f; collisionParts[count] = NewtonCreateBox (nWorld, 0.05f, size.m_y, 0.05f, &offsetMatrix[0][0]); // Bu collsion iin bir ID set et NewtonConvexCollisionSetUserID (collisionParts[count], BOX_COLLISION); count ++; // Bileik arpma yarat collision = NewtonCreateCompoundCollision (nWorld, count, collisionParts);

Bu fonksiyonun kalan, btn dier kat cisim yaratmadaki ayn modeli izler, u hari; s vektr eklemiyle dnyada snrlanm bir kat cisim bu. Bu eklem, kat cismi, ynde telenebilmesine izin verecek tabi sadece eklemin pin ekseninde dnne izin verir. // cismi dik ekilde tutmakta yardm edecek s vektr limiti ekle NewtonJoint* upVector; dVector upDirection (0.0f, 1.0f, 0.0f); upVector = NewtonConstraintCreateUpVector (nWorld, &upDirection.m_x, chrBody);

CharacterApplyForceAndTorque fonksiyonu, cisme bir tork ve kuvvet uygular. Bu fonksiyon, oyuncu tarafndan istenen yne cismi yneltmek ve tmek iin, kamera ve klavye ile ynetilen bilgiyi kullanyor.

Bu projenin son ilgin paras, materials.cpp dosyasndaki CharacterContactProcess callback fonksiyonudur. Burada, Temas, baz ilem kontak callback'ince ileme tabi tutulduktan sonra, fonksiyon, cismin hangi karaktere ait olduunu bulur. // Varsaylan davran uygula GenericContactProcess (material, contact); // Kresel cismi elde et, O, sfrdan farkl ktleli cisimdir // Bu, oyuncu cismini saptamak iin istifa edilen kirli bir yoldur, tabi gvenilir deil, // O sadece bu olayda alr nk ki cisimden biri snrsz ktleye sahip arazi. // kullanc verisini alarak kullanc verisiyle depolanm nesne ID'lerini bulmak daha iyi bir yol. body = g_currectEffect->m_body0; NewtonBodyGetMassMatrix (g_currectEffect->m_body0, &mass, &Ixx, &Iyy, &Izz); if (mass == 0.0f) { body = g_currectEffect->m_body1; NewtonBodyGetMassMatrix (g_currectEffect->m_body1, &mass, &Ixx, &Iyy, &Izz); } sonra karakter kat cisme sahip olduumuz andan itibaren , bu temas reten cisim parasn Newton'a sorarz. // arpma IDsini elde et collisionID = NewtonMaterialGetBodyCollisionID(material, body); Eer temas, krelerin biri tarafndan retilseydi o zaman onla srtnmeyi kullanmamasn Newton'a syleriz, Bu , bir duvar veya dikey engele vurduu zaman, cisme , yuvarlanmadan kaymasna imkan verecek. if (collisionID == SPHERE_COLLISION) { // Kre arpmas iin srtnme hesabn iptal et NewtonMaterialSetContactFrictionState (material, 0, 0); NewtonMaterialSetContactFrictionState (material, 0, 1); Eer temas clz ubuk tarafndan retilmise o zaman cismin lineer hz vektryle teet yzey ynn hizalarz. Bu ders iin hepsi bu

Ders 8: arpma Primitif trleri arpma primitifleri, nesnelerin eklini tanmlar. Ktlesini veya arlk dalmn tanmlamaz, sadece arpma tespiti iin genel bir ekildir. Ktle ve atalet, body nesnesi ile verilir (NewtonBody). arpma primitifleri, referans addedilmi nesnelerdir. Nesneye referanslar serbest brakmak iin uygulama NewtonReleaseCollision armal. arpma primitiflerine referanslar serbest brakmay ihmal etmek, hafza szntlarna neden olur. arpma primitifleri, birden fazla cisim ile kullanlabilir. Bu, motorun kullanaca hafza miktarn azaltacak, ek olarak baz hesaplamalarn hz artacak.

Trleri Newton, farkl arpma primitiflerinin byk bir eidini destekler ve hatta kendi arpma primitif tiplerini tanmlayabilirsin. Yine de, performans ve bu primitiflerin kalitesini dnerek doru arpma tipini semelisin. Takip eden diyagram bu karar almana yardm edebilir:

Ortak Fonksiyonlar NewtonCollisionCollide NewtonCollisionCollideContinue

NewtonCollisionRayCast NewtonCollisionClosestPoint NewtonCollisionPointDistance NewtonCollisionCalculateAABB NewtonCollisionMakeUnique NewtonReleaseCollision

Kre

Aklama Kre arpmalar, genelletirilmi elipsoitlerdir, uygulama, yarap deeriyle oynayarak birok farkl eidini yaratabilir. Fonksiyonlar NewtonCreateSphere

Kutu

Aklama Klasik bir kutu primitifi. Fonksiyonlar NewtonCreateBox

Kapsl

Aklama

Kapsl ykseklii, kepin apna eit olmal veya kyasla daha byk olmal. Eer olmazsa, o zaman Ykseklik apa gerilir. Kapsl, yaratldktan sonra x ekseniyle hizalanr. Fonksiyonlar NewtonCreateCapsule Silindir

Aklama Verilen yarap ve ykseklikli bir silindir. Yaratldktan sonra x ekseniyle hizalanr. Fonksiyonlar NewtonCreateCylinder

Koni

Aklama Verilen yarap ve ykseklikli bir koni. Yaratldktan sonra x ekseniyle hizalanr. Koni ykseklii, ban apna eit veya kyasla daha byk olmal. eer byle olmazsa, o zaman ykseklik apa gerilecek. Fonksiyonlar NewtonCreateCone Yiv Silindir

Verilen yarap ve ykseklikli bir yiv silindir. Dnme ekseni , yaratldktan sonra x ekseniyle hizalanr.

Fonksiyonlar NewtonCreateChamferCylinder Null primitif

Aklama Bazen uygulama, asla dier cisimlerle arpmayacak yardmc kat cisimleri yaratmaya ihtiya duyar, rnein bir ragdoll boynu veya paral bir yapnn i paras. Bu, malzeme sistemi kullanarak yaplabilir ama ok fazla ura ve gereksiz malzeme saysn artracak ve bu yzden proje karmakl. Null arpma, motor felsefesini deitirmek zorunda olmadan btn bu koullar memnun eden bir arpma nesnesidir. Fonksiyonlar NewtonCreateNull

Bileim

Aklama Dbkey arpma primitiflerinin bir dizisini tutmak iin bir konteynr. Bileim arpma, dbkey ekillerden ina edilen karmak ibkey primitiflerin yaratlmasn destekler. Bileim arpma primitifleri sadece dbkey arpma primitifleriyle yaplabilir ve onlar daha fazla bileim arpmalar kapsayamaz. Fonksiyonlar NewtonCreateCompoundCollision Konveks kabuk (Convex Hull)

Aklama

convex hulllar, kapal cisimlerle kolay temsil edilemeyen arpma geometrilerine zmdr. kapali cisim primitifleri (Kreler, kpler, silindirler, kapsller, koniler, vb.), temas hesaplamalarinda zaman - hafza - verimde iyidir. tabi eklin fazla zor olduu olaylarda convex hull son zm olmalidir. konveks hull yaratmak icin Newton'a ka noktanin geilebilecegi hakkinda bir st snr yoktur, yine de performans ve hafza iin, mmkn oldugunca minimum olmali. Minimum nokta says, 4' ve ustu olmal. tum noktalar dogrudas ve duzlemdes olusa tahmin edilemeyen sonular dogacaktr. Fonksiyonlar NewtonCreateConvexHull NewtonCreateConvexHullModifier NewtonConvexHullModifierGetMatrix NewtonConvexHullModifierSetMatrix NewtonConvexCollisionSetUserID NewtonConvexCollisionGetUserID NewtonConvexCollisionCalculateVolume NewtonConvexCollisionCalculateInertialMatrix Kullanc Mesh (User mesh) Aklama UserMeshCollision, uygulamaya, arka plan nesneleri iin yerlesik arpma sistemini asiri ykleme imkani salar. UserMeshCollision, rtfal hartalar , BSP ile arpma ve uygulamann destekledii ve korumay diledii herhangi dier arpma yaps ile uyarlama carpismalari icin kullanilabilir . Yine de, UserMeshCollision, verimli ve ileri algoritmalardan ve yerlesik TreeCollision'un veri yaplarn faydalanamaz. Bir UserMeshCollision, bir cisme tayin edildii zaman, cismin ktlesi, btn dinamik hesaplamalarnda grmezlikten gelir. Bu, statik cisim olarak davranan cisim yapar.

Fonksiyonlar NewtonCreateUserMeshCollision

arpma Aac(Tree collision) Aklama TreeCollision, kompleks polygonel meshlerle carpisma iin Newton'da tercih edilen metottur. mesh, dz kesimeyen poligonlardan olusmal, tabi, genlerle olmas zorunlu deil. TreeCollision, uygulamaca serializasyonu yaplmali. TreeCollision, bir cisme tayin edildii zaman cismin ktlesi btn dinamik hesaplamalarnda grmezlikten gelir. Bu, statik cisim olarak davranan cismi yapar. Fonksiyonlar NewtonCreateTreeCollision NewtonTreeCollisionBeginBuild NewtonTreeCollisionAddFace NewtonTreeCollisionEndBuild NewtonTreeCollisionSerialize NewtonCreateTreeCollisionFromSerialization NewtonTreeCollisionGetFaceAtribute NewtonTreeCollisionSetFaceAtribute

rtifal alan arpma(Height field collision)

Aklama HeightFieldCollision, rtfal alanlarda kullanlacak arpma icin Newton'da tercih edilen metottur. irtifali alanlari temsil etmek iin ayn ekilde TreeCollision'u kullanabilirsin, tabi HeightFieldCollision bu maksat iin daha fazla verimli deildir, ama irtifali alandaki baz yapay yaplar elimine eder. HeightFieldCollision, bir cisme tayin edildii zaman cismin ktlesi btn dinamik hesaplamalarnda grmezlikten gelir. Bu, statik cisim olarak davranan cisim yapar. Fonksiyonlar NewtonCreateHeightFieldCollision

Sahne arpma(Scene collision)

Aklama SceneCollision, sahnenin statik evresini temsil etmek iin Newton'da tercih edilen metottur. O aslnda, bu arpmalar iin cisimleri yaratmak ihtiyaci olmadan dier arpma primitifleri iin bir kap olarak grev yapar. SceneCollision statik evreniz iin iyi bir mimari salamayabilir, ama daha verimlidir ve daha az hafza kullanir. SceneCollision, bir cisme tayin edildii zaman cismin ktlesi btn dinamik hesaplamalarnda grmezlikten gelir. Bu, statik cisim olarak davranana cisim yapar. Fonksiyonlar NewtonCreateSceneCollision NewtonSceneCollisionCreateProxy NewtonSceneCollisionDestroyProxy NewtonSceneProxySetMatrix NewtonSceneProxyGetMatrix NewtonSceneCollisionOptimize

Ders 9: Eklem(Joint) eitleri Newton, iki (Veya daha ok) nesneyi birbirine dikmek ve / veya belirli zgrlk derecesi belirlemek iin kullanlan birka farkl eklem tipi sunar . Bu blm , farkl eklem tiplerinin neye benzedii ve nasl, ne iin kullanlabilecei hakknda bir fikir vermek iindir. Bu konu hakknda yukarda bir dersimiz vard zaten. Ortak Fonksiyonlar Bu fonksiyonlar, btn eklem tipleri iin ortaktr:

NewtonJointGetUserData NewtonJointSetUserData NewtonJointGetCollisionState NewtonJointSetCollisionState NewtonJointGetStiffness NewtonJointSetStiffness NewtonDestroyJoint NewtonJointSetDestructor

Bilyal masfal(Ball and socket)

Aklama Bu eklem tipinde, bir yuva (Mavi krenin ucu-socket) ve bu yuvaya "geen" (Yeil krenin ba-ball) hareket edebilir bir cisim vardr. Bu cismin hareketi,

btn ynlere serbesttir, ama belirli bir dereceyle (alarda belirtilen) snrlanr. Byle bir eklem iin iyi bir rnek, insanlarn bilek veya kala eklemleridir. Fonksiyonlar

NewtonConstraintCreateBall NewtonBallSetUserCallback NewtonBallGetJointAngle NewtonBallGetJointOmega NewtonBallGetJointForce NewtonBallSetConeLimits

Mentee(Hinge)

Aklama Mentee ekleminde, balanan nesne sadece bal olduu eksende bir boyutlu dikine dnebilir. Gerek hayatta olan yi bir rnek, arpan kap veya bir pervane. Fonksiyonlar

NewtonConstraintCreateHinge NewtonHingeSetUserCallback NewtonHingeGetJointAngle NewtonHingeGetJointOmega NewtonHingeGetJointForce NewtonHingeCalculateStopAlpha

Kzak(Slider )

Aklama Bu ok ak olmal. Kzak eklem ile geirilmi cisim sadece geirildii eksende yukar aa kayabilir. Gerek hayatta olan bir rnek, mesela bir arabann amortisr aft. Fonksiyonlar

NewtonConstraintCreateSlider NewtonSliderSetUserCallback NewtonSliderGetJointPosit NewtonSliderGetJointVeloc NewtonSliderGetJointForce NewtonSliderCalculateStopAccel

Tirbuon(Corkscrew )

Aklama Bu eklem tipi, geirilmi alt cismin sadece eksen boyunca kaymasna izin verildii bir kizak eklem tipi uyarlamasdr, ama bu tipte eksen etrafnda da dnebilir geirilmi cisim. Bu hareketi sebebiyle tirbuon ismi verilmitir. . Fonksiyonlar

NewtonConstraintCreateCorkscrew NewtonCorkscrewSetUserCallback NewtonCorkscrewGetJointPosit NewtonCorkscrewGetJointAngle NewtonCorkscrewGetJointVeloc NewtonCorkscrewGetJointOmega NewtonCorkscrewGetJointForce NewtonCorkscrewCalculateStopAlpha NewtonCorkscrewCalculateStopAccel

niversal

Aklama niversal eklemde, geirilmi cismin iki eksende de dnmesine izin verilir. Bu tip eklem, zgrlk derecesi eklenmis mentee eklem gibidir. Fonksiyonlar

NewtonConstraintCreateUniversal NewtonUniversalSetUserCallback NewtonUniversalGetJointAngle0 NewtonUniversalGetJointAngle1 NewtonUniversalGetJointOmega0 NewtonUniversalGetJointOmega1 NewtonUniversalGetJointForce NewtonUniversalCalculateStopAlpha0 NewtonUniversalCalculateStopAlpha1

s-Vektr Aklama Bu, zelletirilmi vektr, kati cisimler iin dn zgrln bir eksenle snrlamak iin kullanlabilir. Eer, bir karakter kontrol yaratmak iin bir kre kullanrsanz ama krenin ne yklmasn istemiyorsanz ok yararldr. Mesela eer, masada dik duracak bir yumurta istiyor ama y-ekseninde dndrebilir ve hareket ettirilebilir olmasn istiyorsan. Fonksiyonlar

NewtonConstraintCreateUpVector NewtonUpVectorGetPin NewtonUpVectorSetPin

KullancTanml iki ynl(Userdefined bilateral) Aklama Bu eklem tipi, kullanc tarafndan zelletirilebilir eklem tipidir. 6 dzeyde zgrlk derecesine (3 lineer ve 3 acisal) sahip olabilir tabi kullanc (isterse) snrlarn belirtebilir. Bylece bu eklem tipi, aklna gelebilecek tum eklem eidini uygulamak iin kullanlabilir. Eer Newton'un sunduu eklemler iine gelmiyorsa, bunu kullanarak ihtiyalarn karlayabilirsin. Fonksiyonlar

NewtonConstraintCreateUserJoint NewtonUserJointAddLinearRow NewtonUserJointAddAngularRow NewtonUserJointSetRowMinimumFriction NewtonUserJointSetRowMaximumFriction NewtonUserJointSetRowAcceleration NewtonUserJointSetRowStiffness NewtonUserJointGetRowForce

BezBebek(Ragdoll )

Aklama Bu, aslnda szum ona "Bezbebek" yapmak iin ozellestirilmis bir eklemkonteyniridir. Ragdolllar, ounlukla, lm sahnelerini canlandrmak iin kullanlir ve bilyali masfal eklemleriyle desteklenir. Ama ayn ekilde, hayvan ve insan benzeri canli modelleri canlandrmak iin de kullanlabilir. Fonksiyonlar

NewtonCreateRagDoll NewtonDestroyRagDoll NewtonRagDollBegin NewtonRagDollEnd NewtonRagDollSetForceAndTorqueCallback NewtonRagDollSetTransformCallback NewtonRagDollAddBone NewtonRagDollBoneGetUserData NewtonRagDollBoneGetBody NewtonRagDollBoneSetID NewtonRagDollBoneSetLimits NewtonRagDollBoneGetLocalMatrix NewtonRagDollBoneGetGlobalMatrix

Tat(Vehicle )

Aklama

Bu eklem, gerek hayattaki vastalar taklit etmek iin salanmtr. Onun, eer , tam icabin geregini yapmasini istiyorsan bu vasta eklemi iin farkl parametreleri ayarlamanin zor olabildiine dikkat. Eer , ayn ekilde gerek bir vasta gibi hzlanan bir vasta istiyorsan, bir vites kutusu salamaya ihtiya duyarsn. Byle bir eyi uygulamak fizik motorunun ii deildir, bundan dolay kendi bana onu yapmaya ihtiya duyarsn. Fonksiyonlar

NewtonConstraintCreateVehicle NewtonVehicleReset NewtonVehicleSetTireCallback NewtonVehicleAddTire NewtonVehicleRemoveTire NewtonVehicleBalanceTires NewtonVehicleGetFirstTireID NewtonVehicleGetNextTireID NewtonVehicleTireIsAirBorne NewtonVehicleTireLostSideGrip NewtonVehicleTireLostTraction NewtonVehicleGetTireUserData NewtonVehicleGetTireOmega NewtonVehicleGetTireNormalLoad NewtonVehicleGetTireSteerAngle NewtonVehicleGetTireLateralSpeed NewtonVehicleGetTireLongitudinalSpeed NewtonVehicleGetTireMatrix NewtonVehicleSetTireTorque NewtonVehicleSetTireSteerAngle NewtonVehicleSetTireMaxSideSleepSpeed NewtonVehicleSetTireSideSleepCoeficient NewtonVehicleSetTireMaxLongitudinalSlideSpeed NewtonVehicleSetTireLongitudinalSlideCoeficient NewtonVehicleTireCalculateMaxBrakeAcceleration NewtonVehicleTireSetBrakeAcceleration

You might also like