#1 08.02.2005 19:36:43

rabbitRUN
Newbie
Registriert: 08.02.2005
Beiträge: 3

X-Dateien und einfache geom. Körper

Hi, bin auf nen kleines Problem in Zusammenhang mit geladenen Modellen und selbst gezeichneten Körpern gestossen. Und zwar werden die geladenen immer vom selbst erstellten verdeckt, egal wie rum ich das versuche zu drehen. 

Ok hier mal bisschen Code:

Code:

procedure Render; 
begin 
  timegap   := gettickcount - timestart; 
  timestart := gettickcount; 
  ImmediateData; 

  d3ddev9.BeginScene; 
  d3ddev9.Clear(0,nil,d3dclear_TARGET or D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,0),1.0,0); 
  SetupNormalTransformation; 
  //SkyBox Rendern 
  SetupViewAndProjection(0,1,1); 
  SkyBox.render; 

  //Figur - Laufen 
  SetupViewAndProjection(0+XGes,100+YGes,-150); 
  SetupNoNameTransformation; 
  NoName_LaufAnimation[LaufAni_Geschw].render; 


  //Raum 
  SetupViewAndProjection(0+XGes,10+YGes,-10); 
  SetupRaumTransformation; 
  d3ddev9.SetStreamSource(0, vertexbuffer, 0, SizeOf( TD3DLVertex ) ); 
  d3ddev9.SetFVF(D3DFVF_TD3DLVertex); 
  d3ddev9.DrawPrimitive( D3DPT_TriangleStrip, 0, 2 ); 
  d3ddev9.EndScene; 
  d3ddev9.Present(nil,nil,0,nil); 
end;



Also als erstes wird die Skybox geladen, womit es auch keine Probleme gibt. Danach das Modell und zu guter letzt der Raum, welcher im mom nur ein einfachs Viereck ist smile.
Habe natürlich schon versucht erst den Raum rendern zu lassen und danach das Modell, Ausgabe blieb aber gleich -> Modell wird immer vom Viereck verdeckt.

Z-Buffer hab ich selbstverständlich auch eingeschaltet smile

mfg

Offline

 

#2 08.02.2005 19:50:06

Coolcat
ProGuru
Ort: Aachen, NRW
Registriert: 24.01.2005
Beiträge: 2780
Web-Seite

Re: X-Dateien und einfache geom. Körper

Äh....theoretisch sollte das gehen...

ich würde sagen, die Koords sind falsch (also dein Viereck ist tatsächlich vor dem Modell)
Ohne zu wissen was SetupViewAndProjection bzw. SetupRaumTransformation macht kann ich dazu nicht mehr sagen...

Coolcat


My software never has bugs. It just develops random features.

Offline

 

#3 08.02.2005 19:53:50

DerPeer
GodlikeMember
Ort: Berlin
Registriert: 04.02.2005
Beiträge: 1291

Re: X-Dateien und einfache geom. Körper

Hm. Ich würde vermuten, daß der Z-Buffer doch nicht eingeschaltet ist. Bei der Skybox wird er ja bestimmt ausgemacht, und danach vielleicht nicht wieder ein? Nur so ne Idee.

Die zweite Möglichkeit ist die, daß sich der Raum tatsächlich vor dem Modell befindet, aber das sollte ja leicht auszuschließen sein. Ansonsten hab ich mit den geladenen Modellen keine Erfahrung.
Ich weiß, daß Sprites immer vor allem erscheinen, weil die ja keine Tiefen-Info mitbringen, hat hiermit aber sicher nix zu tun.

Offline

 

#4 08.02.2005 20:13:48

rabbitRUN
Newbie
Registriert: 08.02.2005
Beiträge: 3

Re: X-Dateien und einfache geom. Körper

Ok dann noch mehr Code smile

Code:

procedure SetupNoNameTransformation;
var
  matPos, matRotY : TD3DXMatrix;
begin
  D3DXMatrixTranslation( matPos, NN_posx , NN_PosY, NN_PosZ);
  D3DXMatrixRotationY( matRotY, NN_rotation );
  D3DXMatrixMultiply( matPos, matRotY, matPos );
  d3ddev9.SetTransform( D3DTS_WORLDMATRIX(0), matPos  );
end;

procedure SetupRaumTransformation;
var
  matRotY,matPos : TD3DXMatrix;
begin
  D3DXMatrixTranslation( matPos, 1 , 0, 0);
  D3DXMatrixRotationX(matRotY, 11);
  D3DXMatrixMultiply( matPos, matRotY, matPos );
  d3ddev9.SetTransform( D3DTS_WORLDMATRIX(0), matPos );
end;

procedure SetupViewAndProjection(_x,_y,_z: Single);
var
  pos,dir,up      : TD3DXVector3;
  matView,matProj,
  mat             : TD3DXMatrix;
begin

  pos := D3DXVector3 (_x, _y, _z);
  dir := D3DXVector3 (0, 0, 0);
  up := D3DXVector3 (0, 1, 0);


  D3DXMatrixLookAtLH( matView,pos,dir,up);
  d3ddev9.SetTransform (D3DTS_VIEW,MatView);
  D3DXMatrixPerspectiveFovLH(matProj, D3DX_PI / 5, 1.0, 0.1, 10000.0);
  d3ddev9.SetTransform( D3DTS_PROJECTION, matProj);

  //Transformationsmatrix für die Skybox
  D3DXMatrixTranslation(mat,pos);
  skybox.SetMatrix(mat);
end;



Habe diese stellen auch nochmal überprüft mit dem deinem Post im Hinterkopf, aber den Fehler finde ich nich wirklich, ok hab auch noch nicht so die übung in DirectX smile

@DerPeer: ZBuffer wird nach dem rendern der Skybox wieder eingeschaltet.

Offline

 

#5 09.02.2005 08:41:22

Holly
Member
Ort: Leipzig
Registriert: 24.01.2005
Beiträge: 76
Web-Seite

Re: X-Dateien und einfache geom. Körper

ich frage micht, warum du 3 mal die view-und projectionmatrix setzt......du musst die einmal für die skybox setzen und danach wieder auf "sandard" und damit dann ALLE restlichen objekte rendern.......is doch auch ganz logisch: wenn man jetzt mal die skybox weglässt, dann braucht man die view-und projectionmatrix nur 1 mal zu setzen. man hat ja in echt auch nur eine kamera, durch die man die scene betrachtet.....


HOLLY


Enjoy the 3 dimensions of livin'....

Offline

 

#6 09.02.2005 11:42:14

rabbitRUN
Newbie
Registriert: 08.02.2005
Beiträge: 3

Re: X-Dateien und einfache geom. Körper

Ok so scheints zu funzen. Da das 3D Modell wesentlich grösser als meine per code erstellten Objekte war wollte ich mir nen bisschen Arbeit sparen indem ich einfach nur die Kamera vor dem Rendern weiter nach hinten versetze. Naja war dann wohl nix.

Danke smile

Offline

 

#7 09.02.2005 11:50:59

Chris
ExtremeMember
Ort: Erlangen, Bay
Registriert: 24.01.2005
Beiträge: 694
Web-Seite

Re: X-Dateien und einfache geom. Körper

du kanns dein objekt einfach mit ner matrix skalieren und so kleiner machen....
da brauchst du gar nichts mit der kamera rumfummeln  big_smile

Code:

D3DXMatrixScaling(matScale,0.5,0.5,0.5);



und schon hat dein Objekt nurnoch die halbe größe wenn du die matrix noch in deine WorldMatrix des Objekts mit einbeziehst...

mfg Chris


Nimm meinen Rat an - ich brauch ihn sowieso nicht

Offline

 

Brett Fußzeile

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson