|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Robin Junior JLI'ler
Alter: 30 Anmeldedatum: 29.10.2008 Beiträge: 73 Wohnort: Inneringen Medaillen: Keine
|
Verfasst am: 13.12.2009, 13:40 Titel: 3d modelle |
|
|
hab jetzt viele schon länger mehrere modelle in meinem game, wie mach ich dass nicht mehr durch sie durch laufen kann.. ?
Gruß Robin |
|
Nach oben |
|
|
Cyianor Super JLI'ler
Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 13.12.2009, 13:44 Titel: |
|
|
Hey Robin!
Gib mal in Google Kollisionskontrolle ein. Da sollte sich einiges dazu finden.
Schönen Gruß
@mods: Ich glaub das gehört in "Entwicklung" anstatt in "Grafik und Sound". |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 13.12.2009, 14:00 Titel: |
|
|
Hi Robin,
du musst dich quasi selber darum kümmern dass man nicht durch die Models laufen kann. Wie Vision schon sagte nennt sich das Kollisionskontrolle oder Collision Detection & Collision Response.
Häufig macht man das so: Du berechnest ein Bounding Volume für dein Model. Das kann zB eine Box sein die dein Model einschließt, oder ein Zylinder, eine Kugel etc. Häufig benutzt man auch ein Bounding Volume Tree (d.h. man verschachtelt mehrere Bouding Volumes) oder macht eine polygongenaue Kontrolle. Dann musst du selber prüfen, ob du, wenn du dich mit der Kamera bewegst, in ein solches Bouding Volume hineinbewegst. Das kannst du zB so prüfen: Wenn die Position der Kamera nach der Bewegung innerhalb des Bouding Volumes ist, dann findet eine Kollision mit dem Model statt und die Bewegung muss rückgängig gemacht werden. _________________ Kochen ist ein NP-schweres Optimierungsproblem. |
|
Nach oben |
|
|
Robin Junior JLI'ler
Alter: 30 Anmeldedatum: 29.10.2008 Beiträge: 73 Wohnort: Inneringen Medaillen: Keine
|
Verfasst am: 13.12.2009, 14:28 Titel: |
|
|
jo ok... und wie mach ich s... z.b. wenn ich in meim game ne waffe aufheb , und die dann genau vor der kamera ist ??, da ist nämlich bei mir dann die waffe so abgeschnitten und ich kann in sie hinein sehen
GRuß Robin |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 13.12.2009, 18:09 Titel: |
|
|
Dann ist die near Clipping Plane zu nahe. Die solltest du jetzt aber keinesfalls minimal machen, da dann die zBuffer Genauigkeit schlechter wird. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Robin Junior JLI'ler
Alter: 30 Anmeldedatum: 29.10.2008 Beiträge: 73 Wohnort: Inneringen Medaillen: Keine
|
Verfasst am: 21.12.2009, 21:06 Titel: |
|
|
jo und wie kann ich des jetzt beheben ???
GRuß Robin |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 21.12.2009, 21:39 Titel: |
|
|
NearCLippingPlane näher machen (z.b. statt 0.1 auf 0.01) oder die Waffe ein Stück weiter nach vorne tun (bis sie komplett dargestellt wird). _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 22.12.2009, 09:36 Titel: |
|
|
oder dafür sorgen (z.B. mit Kollisionserkennung) dass die Kamera in solch einem Fall etwas weiter zurückbleibt.
Ich fand die Kamerasteuerung bei Tomb Raider immer sehr gut, sie war nie direkt an die Spielerposition gefesselt sondern "zog immer etwas nach" (smooth)
Dies sollte nicht so schwer zu realisieren sein und man kann die KameraNachziehSteuerung so basteln, dass sie um Hindernisse (wie z.B. Waffen oder Ecken) herumfährt. Das gleicht geht sicherlich ach für FirstPerson (mit dem Vorteil, dass man so tun könnte, als ob die Spielfigur zu einem Objekt hinschaut - Bestimmt ein interessanter Effect) _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Robin Junior JLI'ler
Alter: 30 Anmeldedatum: 29.10.2008 Beiträge: 73 Wohnort: Inneringen Medaillen: Keine
|
Verfasst am: 22.12.2009, 17:47 Titel: |
|
|
ok, danke has gelößt, hab near clipping plane minimal geändert, so dass ich den teil wo ich durch die waffe guggen kann nich mehr sehn kann
--EDIT: das mit Kamera nachziehen kann ich nicht machen, da es ein first person game ist--
GRuß Robin |
|
Nach oben |
|
|
Robin Junior JLI'ler
Alter: 30 Anmeldedatum: 29.10.2008 Beiträge: 73 Wohnort: Inneringen Medaillen: Keine
|
Verfasst am: 30.01.2010, 14:04 Titel: |
|
|
ich hab noch ein kleines problem und da es zu dem thread passt muss ich keinen neuen aufmachen... also
ich mach x-file gegenstände in mein game...
es kann sich ja
- nach vorne- hinten neigen
- nach rechts- links kippen
- und sich nach links und rechts drehen
... das nach links und rechts drehen funktioniert
aber das nach vorne- hinten neigen geht nicht
SetRotation(... , drehen, ...)
egal was ich bei einem von den "..." rein mach es kippt sich nur nach links- rechts .... ich weiß nicht ob ich in der programmierung en fehler gemacht hab oder ob das eine kombination aus beiden "..." sein muss..
wenn ich bei beidem timeGetTime()/1000.0f reinn mach macht es eine kombination aus neigen und kippen...
weiß jemand was ich für ein fehler mach. ? wenn ich code schreiben soll, dann bitte sagen.
Gruß Robin |
|
Nach oben |
|
|
Otscho Super JLI'ler
Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 31.01.2010, 13:36 Titel: |
|
|
Schreib Code !
Bei Drehungen ist die Implementierung im Allgemeinen nicht so trivial wie bei Zerrungen oder Verschiebungen, weil hier die Reihenfolge der einzellnen Drehungen für das Gesamtergebnis eine entscheidende Rolle spielt. |
|
Nach oben |
|
|
Robin Junior JLI'ler
Alter: 30 Anmeldedatum: 29.10.2008 Beiträge: 73 Wohnort: Inneringen Medaillen: Keine
|
Verfasst am: 03.02.2010, 19:57 Titel: |
|
|
also hier der code:
(also hier die 2 dateien mit denen ich die modelle einfüg)
3DObject.cpp
3DObject.h
un das wie ichs in meine scene einbau:
(2 verschiedene codestellen)
Scene.cpp
CPP: | weapon_01.Init(m_lpD3DDevice, m_ResManager);
weapon_02.Init(m_lpD3DDevice, m_ResManager);
weapon_03.Init(m_lpD3DDevice, m_ResManager);
obj_01.Init(m_lpD3DDevice, m_ResManager);
obj_02.Init(m_lpD3DDevice, m_ResManager);
obj_03.Init(m_lpD3DDevice, m_ResManager);
obj_04.Init(m_lpD3DDevice, m_ResManager);
obj_05.Init(m_lpD3DDevice, m_ResManager);
player_01.Init(m_lpD3DDevice, m_ResManager);
weapon_01.Load("./data/obj/weapon_01.x");
weapon_02.Load("./data/obj/weapon_02.x");
weapon_03.Load("./data/obj/weapon_03.x");
obj_01.Load("./data/obj/obj_01.x");
obj_02.Load("./data/obj/obj_02.x");
obj_03.Load("./data/obj/obj_03.x");
obj_04.Load("./data/obj/obj_04.x");
obj_05.Load("./data/obj/obj_05.x");
player_01.Load("./data/obj/player_01.x");
weapon_01.SetPosition(D3DXVECTOR3(210.0f, 2.9f, 230.0f));
weapon_02.SetPosition(D3DXVECTOR3(20.0f, 2.4f, 60.0f));
weapon_03.SetPosition(D3DXVECTOR3(130.0f, 3.4f, 130.0f));
obj_01.SetPosition(D3DXVECTOR3(160.0f, 1.9f,35.0f));
obj_02.SetPosition(D3DXVECTOR3(230.0f, 1.1f,135.0f));
obj_03.SetPosition(D3DXVECTOR3(30.0f, 1.4f,30.0f));
obj_04.SetPosition(D3DXVECTOR3(30.0f, 6.4f,50.0f));
obj_05.SetPosition(D3DXVECTOR3(30.0f, 1.4f,200.0f));
player_01.SetPosition(D3DXVECTOR3(20.0f, 1.4f,20.0f));
|
codeteil 2
CPP: | if(wield_weapon == 1)
{
weapon_01.SetRotation(0.0f, m_fRotationY + 1.8f, 0.0f);
}
else
{
weapon_01.SetRotation(timeGetTime()/1000.0f, timeGetTime()/1000.0f, timeGetTime()/1000.0f);
}
if(wield_weapon == 2)
{
weapon_02.SetRotation(0.0f, m_fRotationY + 1.4f, 0.0f);
}
else
{
weapon_02.SetRotation(timeGetTime()/1000.0f, timeGetTime()/1000.0f, timeGetTime()/1000.0f);
}
if(wield_weapon == 3)
{
weapon_03.SetRotation(0.0f, m_fRotationY + 2.0f, 0.0f);
}
else
{
weapon_03.SetRotation(timeGetTime()/1000.0f, timeGetTime()/1000.0f, timeGetTime()/1000.0f);
}
weapon_01.Render();
weapon_02.Render();
weapon_03.Render();
obj_01.SetPosition(D3DXVECTOR3(160.0f, 1.9f,35.0f));
obj_01.Render();
obj_01.SetPosition(D3DXVECTOR3(30.0f, 1.9f,115.0f));
obj_01.Render();
obj_02.Render();
obj_03.Render();
obj_04.Render();
obj_05.SetPosition(D3DXVECTOR3(30.0f, 1.4f,200.0f));
obj_05.Render();
obj_05.SetPosition(D3DXVECTOR3(130.0f, 1.4f,150.0f));
obj_05.Render();
|
jo ich hoff des hilft euch mir zu helfen
GRuß Robin |
|
Nach oben |
|
|
Otscho Super JLI'ler
Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 05.02.2010, 12:58 Titel: |
|
|
Wenn ich mich recht entsinne dreht Direct3D, zuerst um die X-Achse, dann um die Y-Achse und zum Schluss um die Z-Achse. Dies wäre für dein Problem eher unpraktisch, wenn dein "Vorne-Hinten-Neigen" ein Synonym für die Drehung um die Z-Achse ist. Was du brauchst ist zuerst die "Vorne-Hinten-Neigung" dann die Drehung um die Y-Achse.
Betrachte am Besten jede Drehung einmal seperat indem du die anderen Drehunge auf Null setzt, um herauszufinden welche Achsen bei dir wo liegen. Dann empfehle ich dir eine seperate Matrixmultiplikation damit DU die Reihenfolge der Drehungen festlegen kannst. Ka wie das in DX heißt, kenn im mom nur das OpenGL-Pendant.
mfg Matthias |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|