2012-03-19 2 views
1

내 XNA 게임에서 Viewport.Project를 사용하여 태양의 3 차원 좌표의 2 차원 화면 좌표를 가져옵니다 (주로보기에 좋아요). 나는이 일을 얻었지만 태양의 반대 방향을 볼 때 나는 그것들 중 2 개 (기술적으로 하나)를 본다. 여기에 무슨 일이 일어나고 있는지 전혀 모르겠다. ..Viewport.Project problems

아무도 몰라? 어떻게 이것을 막을 수 있습니까? 이 시각화하기

는, 여기의 이미지와 내가 무슨 말 :

 Rectangle clientBounds = Window.ClientBounds; 
     Texture2D sun = Content.Load<Texture2D>(@"Image\Skybox_Sun"); 
     Vector3 coords = new Vector3(1000, 0, 1000); 
     Vector3 coords1 = graphics.GraphicsDevice.Viewport.Project(coords, camera.Projection, camera.View, Matrix.Identity); 
     suncoords = coords1; 
     spriteBatch.Begin(); 
     spriteBatch.Draw(sun, new Vector2(coords1.X, coords1.Y), null, Color.White, 0, new Vector2(cursor.Width/2, cursor.Height/2), q, SpriteEffects.None, 0); 
     spriteBatch.End(); 

답변

2

당신이 coords1.Z을 확인하려고 유무 : Hyperlinked image, don't have 10+ rep

이 코드인가? 뒤에 오는 태양이 음의 Z에 해당하는 경우 상상해보십시오. 다음과 같이 무승부하기 전에 if 조건을 추가 할 수 있습니다.

if(coords1.Z > 0) 
    spriteBatch.Draw(sun, new Vector2(coords1.X, coords1.Y), null, Color.White, 0, new Vector2(cursor.Width/2, cursor.Height/2), q, SpriteEffects.None, 0); 
+0

이미지에서 "Sun Coords"는 태양의 화면 좌표입니다. 이 둘 사이에 유일한 차이점은 Z가 아주 작은 값만큼 감소한다는 것입니다. – Jared

+0

어쨌든, 나는 절두체 절두 컬링을 사용하여 그것을 해결했다. 어쨌든 제안 해 주셔서 감사드립니다. – Jared

+0

아, 네가 화면에 인쇄하는 위치를 보았습니다 ... 0과 1 사이에 있어야합니다 (0보다 작거나 1보다 큰 경우). 다행이 일하게되어 기뻤습니다. – LiquidAsh