Aha, dat verklaart een hoop

C#:
1
2
3
4
5
| //eenmalig aanroepen:
device.Transform.View = Matrix.LookAtLH(new Vector3(0, -2f, 0.4f), new Vector3(0, 0, 0), new Vector3(0, 0, 1));
//volgende regel iedere keer aanroepen bij 'drawen' van de wereld
device.Transform.World = Matrix.Translation(-(float)playermeshposition.X, -(float)playermeshposition.Y, -(float)playermeshposition.Z) * Matrix.RotationYawPitchRoll((float)playermeshangles.X, (float)playermeshangles.Y, (float)playermeshangles.Z); |
dat is dus hoe het nu is. de andere manier die mij logisch leek was om steeds bij drawen van de player de camera te verplaatsen. dus de eerste regel met een variabele aan te passen en steeds weer uit te voeren en de translation enzo doen bij het renderen van de player
Mja, zo zou ik het ook niet aanpakken. De view transformation is doorgaans voor world->view, en de world transformation is voor object->world. Op de manier zoals in jouw codevoorbeeld moet je zelf nog de object->world->player transformatie doen, terwijl een object typisch een object->world transformatie in zich heeft. Handiger is dus om die matrix gewoon als Transform.World in te stellen. De View is dan world->view, oftewel de inverse matrix van de orientatie/positie van de camera in de wereld. En die kun je weer makkelijk berekenen adhv de transformatie van de player.
Overigens is nog een nadeel van jouw methode dat de camera nogal erg vast aan de player hangt. In games beweegt hij vloeiend mee, en dit is veel makkelijker te maken door de camerapositie en orientatie in world-coordinates te hebben.
Onzin

.
Alles moet hoe dan ook getransformeerd worden, want de hardware verwacht de coordinaten in device space. En al die matrices kun je met elkaar vermenigvuldigen voordat je de vertices gaat transformeren, dus elke vert in de game wordt sowieso met 1 matrix vermenigvuldig (of meer afhankelijk van wat je verder nog wilt doen vertex shader - zoals bone skinning)