JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=e0310dfd0fba1770e9292d6d93029314Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

3d modelle

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
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

BeitragVerfasst am: 13.12.2009, 13:40    Titel: 3d modelle Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 13.12.2009, 13:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 13.12.2009, 14:00    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Robin
Junior JLI'ler


Alter: 30
Anmeldedatum: 29.10.2008
Beiträge: 73
Wohnort: Inneringen
Medaillen: Keine

BeitragVerfasst am: 13.12.2009, 14:28    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 13.12.2009, 18:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Robin
Junior JLI'ler


Alter: 30
Anmeldedatum: 29.10.2008
Beiträge: 73
Wohnort: Inneringen
Medaillen: Keine

BeitragVerfasst am: 21.12.2009, 21:06    Titel: Antworten mit Zitat

jo und wie kann ich des jetzt beheben ???

GRuß Robin
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 21.12.2009, 21:39    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 22.12.2009, 09:36    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Robin
Junior JLI'ler


Alter: 30
Anmeldedatum: 29.10.2008
Beiträge: 73
Wohnort: Inneringen
Medaillen: Keine

BeitragVerfasst am: 22.12.2009, 17:47    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Robin
Junior JLI'ler


Alter: 30
Anmeldedatum: 29.10.2008
Beiträge: 73
Wohnort: Inneringen
Medaillen: Keine

BeitragVerfasst am: 30.01.2010, 14:04    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Otscho
Super JLI'ler


Alter: 36
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 31.01.2010, 13:36    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Robin
Junior JLI'ler


Alter: 30
Anmeldedatum: 29.10.2008
Beiträge: 73
Wohnort: Inneringen
Medaillen: Keine

BeitragVerfasst am: 03.02.2010, 19:57    Titel: Antworten mit Zitat

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 Smile

GRuß Robin
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Otscho
Super JLI'ler


Alter: 36
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 05.02.2010, 12:58    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum