2011-12-11 2 views
1

우리 프로젝트를위한 지형을 생성하려고합니다. 그릴 수있는 Model 클래스에 포함될 것이지만, 특정 데이터를 내부에서 조사해야 할 수도 있으므로 새로운 클래스를 사용할 수 있습니다. 자주, 그리고 나서 Game 클래스로 작업하기위한 기본 함수가 필요합니다. 어쨌든, 나는 XNA 프레임 워크에 대한 상당한 지식을 가지고 있지만 어떻게 복잡하게 처리 되었기 때문에 모든 것을 처리합니다. 그래서 제 문제는 제가 모델을 만들 수 없으며, 그 클래스 나 다른 것을 인스턴스화 할 수 없습니다. 모델의 기하학을 형성하는 데 필요한 적절한 데이터가 있다고 생각합니다. 지금 당장 필요한 것이고 나중에 텍스처를 가질 수 있습니다. 여기에서 어디로 가야할지 모르겠습니다.처음부터 모델을 생성하는 방법

XNA 보통 Content.Load를 사용하여 내용 파이프 라인을 파일에서 읽고 특별히 구문을 분석하지만 내 지형을 생성하기를 원하므로 피하고 싶습니다. 메쉬를 만들고 싶은 삼각형에 대한 정점 데이터와 인덱스의 배열을 계산할 수는 있지만, 지금까지 내 노력으로 Model과 같은 객체를 인스턴스화하려고했거나 실패했습니다. 빌드 할 때 사용할 수있는 일부 팩토리 클래스가있는 경우 그 모델이 무엇인지 전혀 알 수 없으므로 다른 사람이 나를 올바른 방향으로 가리키고 모델을 작성하는 방법에 대한 대략적인 개요를 제공하면 도움이 될 것입니다. . 그 대답이 아니라면 뭔가 다른 일을해야 할 수도 있습니다. Content.Load를 중심으로하지만 기본적으로 내 지형을 파일에두고 싶지는 않습니다. 실행간에 일관되게, 메쉬를 제어하고 싶습니다. 로드하는 데이터 및 임의 화합니다.

모델을 프로그래밍 방식으로 생성하여 화면에 표시하고 데이터를 노출하려면 어떻게해야합니까?

답변

4

Model 및 관련 클래스 (예 : ModelMesh)는 편의 클래스입니다. 모델을 그리는 유일한 방법은 아닙니다. 때때로 "특별한"것을 할 때, Model이 사용하는 것과 같은 저수준의 방법을 사용하여 그것들을 완전히 다시 구현해야 할 때가 종종 있습니다.

이 여기에 당신이해야 할 일의 빠른 버전입니다 : 모든

첫째,로드시하는 VertexBufferIndexBuffer을 생성하고 해당하는 데이터로 각을 채우기 위해 각 SetData를 사용합니다. , 하나 개의 솔루션이 나는 소스에서 볼 수 없기 때문에, 내 처분에 있었는지 몰랐 낮은 수준의 명령을 사용 할 수 있습니다

GraphicsDevice.SetVertexBuffer(myVertexBuffer); 
GraphicsDevice.Indices = myIndexBuffer; 

// Set up your effect. Use a BasicEffect here, if you don't have something else. 
myEffect.CurrentTechnique.Passes[0].Apply(); 

GraphicsDevice.Textures[0] = myTexture; // From Content.Load<Texture2D>("...") 

GraphicsDevice.DrawIndexedPrimitives(...); 
+0

예 :

그런 다음, 드로잉 (Drawing)시에,이 작업을 수행 무엇이든위한 코드. 그게 당신이 언급 한 편의 개체를 남겨주고, 내가 왜 그들이 거기에 있는지에 대해 더 자세히 배우고 싶습니다. 그러면 내가 그들을 사용해야 할 때와 사용하지 말아야 할 때를 결정하는 데 도움이 될 것입니다. 모든 MSDN은 자바 튜토리얼 센터와는 달리 Javadoc과 같은 메소드가 부족하여 훨씬 도움이됩니다. 이제 마지막 명령을 사용하면 되겠습니까? 또한 정상적으로로드 된 다른 모델을 그리기를 원하며 gfx 장치 버퍼 관리가 어려울 것이라고 생각합니다. – Pysis

+0

저수준을 어렵게 혼동하지 마십시오. 실제로 이것을 수행하는 것은 꽤 쉽습니다. 디바이스에서 원하는 것을 설정 한 다음'Draw *'메소드를 호출하십시오. XNA의 MSDN 문서는 약간 부족합니다. 그러나 App Hub의 예제와 샘플은 훌륭합니다. 의심 스러울 때를 보도록 권합니다. 이러한 기본 제공 편의 클래스를 사용하지 않을 때 일반적으로 알려주는 경험입니다. 그러나 public 생성자가없는 객체를 만드는 것이 좋은 지표입니다. –

관련 문제