2017-10-03 4 views
0

J'ai une struct non transformée avec la coordination des sommets qui va former un triangle:Pourquoi la modification de la position Z de la «caméra» n'affiche pas la primitive?

struct utVertex ut_Vertex[] = 
{ 
    { 2.5f, -3.0f, 0.0f, D3DCOLOR_XRGB(0, 0, 255), }, //a 
    { 0.0f, 3.0f, 0.0f, D3DCOLOR_XRGB(0, 255, 0), }, //b 
    { -2.5f, -3.0f, 0.0f, D3DCOLOR_XRGB(255, 0, 0), },//c 
}; 

enter image description here

L'image ci-dessus devrait (pas sûr, parce que l'axe z peuvent être inversées, + peut-être devrait être là où - est) soit correct selon mon code:

D3DXMatrixLookAtLH(&matView, 
     &D3DXVECTOR3(0.0f, 0.0f, 10.0f), 
     &D3DXVECTOR3(0.0f, 0.0f, 0.0f), 
     &D3DXVECTOR3(0.0f, 1.0f, 0.0f)); 
    d3dDevice->SetTransform(D3DTS_VIEW, &matView); 

le point bleu sur l'image ci-dessus devrait être la position de la caméra en fonction de ce code. (S'il vous plaît dites-moi si je me trompe).

Ceci dessine un triangle correctement sur l'écran.

enter image description here

Maintenant, si je change la position de la caméra à -10.0f au lieu de 10.0f(je pense) c'est là la caméra doit être:

enter image description here

Mais il le devrait toujours être en regardant 0.0f, 0.0f, 0.0f. Si c'est le cas, alors pourquoi changer la position Z de la 'caméra' ne montrera pas la primitive (triangle)?

Rien ne montre: enter image description here

+0

Je pense que parce que vous essayez de rendre 3D sans tenir compte de la transformation de vue 2D, vous devez calculer une base orthonormée pour faire une représentation 2D "World2Screen". –

+0

Je fais la transformation de projection –

+0

Je suppose que vous êtes sur la voie de la transformation mais vous avez besoin de projection et de traduction si vous voulez l'animer. –

Répondre

1

Les polygones que vous utilisez sont un seul côté, ils ne sont pas visibles vus de derrière. Pour que votre triangle apparaisse lorsque vous inversez la caméra, vous devrez soit ajouter un autre polygone avec les mêmes points mais listé dans la direction opposée - (a, c, b) au lieu de (a, b, c) - ou échanger deux de ces points dans votre tableau ut_Vertex.

+0

Ou vous pouvez désactiver la suppression de la face arrière – Asesh

+0

pouvez-vous expliquer * pourquoi * ils ne sont pas visibles lorsqu'ils sont vus de derrière? –

+0

Oh nvm. 'Une primitive triangle est seulement dessinée lorsque ses sommets sont donnés dans le sens des aiguilles d'une montre. Si vous le retournez, il devient dans le sens inverse des aiguilles d'une montre et n'est donc pas affiché. » –