ich meine du sollst deine waffe nicht im worldspace positionieren (also immer zur kameraposition hinschieben usw.), sondern im viewspace. die weltmatrix gibt ja nur an, wie sich dein modell zur welt verhält. nachdem die vertices mit der weltmatrix transformiert wurden, befinden sie sich im sog. worldspace, zuvor im object space.
stells dir so vor: object space ist das was du hast, wenn du das modell erstellst (z.b. in einem modellierprogramm). der nullpunkt dort ist der nullpunkt der modellkoordinaten (=objectspace).
nun platzierst du das modell in deiner spielwelt. wie und wo bestimmt die worldmatrix.
gut jetzt hast du deine kamera. die hat ihr eigenes koordinatensystem (der betrachter liegt hier im ursprung und schaut in richtung der z achse). die viewmatrix rechnet weltkoordinaten in viewkoordinaten um. nachdem dein model mit der world und view matrix transformiert wurde, befinden sich die koordinaten im sog viewspace. hier sind die vertices nichtmehr in der welt platziert, sondern relativ zur kamera (<-- das klingt doch interessant oder?
)
verzichten wir also auf die weltkoordinaten und platzieren wir unser modell doch gleich relativ zur kamera. wie geht das? naja wir platzieren es einfach nicht in der welt. da fallen mir 2 wege ein:
1) du platzierst in deinem modellierprogramm die waffe so wie du die gerne haben möchstest (relativ zur kamera), also z.b. etwas weiter rechts unten vom mittelpunkt. dann setzt du im spiel einfach die weltmatrix und viewmatrix auf die identitiy matrix.
2) du lässt deine waffe wie sie ist und platzierst sie relativ zur kamera. z.b. indem du die viewmatrix auf identity setzt und die weltmatrix so einstellst, dass die waffe eben entsprechend nach rechts unten verschoben wird.