Sunmoon_BIT/XNA 3.1 2010. 7. 5. 20:29
UPDATE 함수

// 현재 키보드 입력 상태 확인
KeyboardState currentKeyboardState = Keyboard.GetState();

// 그래픽 장치 설정 변경 요청 확인
if (currentKeyboardState.IsKeyDown(Keys.Enter))
{
// 그래픽 장치 설정 변경

// 해상도 설정
graphics.PreferredBackBufferWidth = 400;
graphics.PreferredBackBufferHeight = 300;

// 전체 화면 설정
graphics.IsFullScreen = true;

// 그래픽 장치 설정 적용
graphics.ApplyChanges();
}

'Sunmoon_BIT > XNA 3.1' 카테고리의 다른 글

XNA 객체 투명하게만들기  (0) 2010.06.10
XNA 3D객체 충돌감지 테스트  (0) 2010.06.10
XNA의 DRAW함수를 사용하여 2D객체 회전  (0) 2010.06.02
:
Sunmoon_BIT/XNA 3.1 2010. 6. 10. 22:29

 

코드내에 Draw(GameTime gameTime)

 

//아마도 렌더스테이트에다가 알파값을 사용하겠다고 선언하는 같아요.

GraphicsDevice.RenderState.BlendFunction = BlendFunction.Add;
GraphicsDevice.RenderState.AlphaBlendEnable = true;
GraphicsDevice.RenderState.SourceBlend = Blend.SourceAlpha;
GraphicsDevice.RenderState.DestinationBlend = Blend.InverseSourceAlpha;

//그리고 Model Drawing 부분에서도 알파값을 1.0f 완전 불투명   0.0f 완전 투명이라 했을때 중간 값을 넣으시면

그만큼 충분한 투명값을 얻을 있습니다.

 

Matrix[] transforms = new Matrix[darwin.model.Bones.Count];
darwin.model.CopyAbsoluteBoneTransformsTo(transforms);

foreach (ModelMesh mesh in darwin.model.Meshes)
{
         foreach (BasicEffect effect in mesh.Effects)
         {
                     effect.EnableDefaultLighting();
                     effect.Alpha = alpha;//
부분처럼 써주시면 됩니다. 알파값을 설정해주시면 돼요ㅎ 현재 알파변수는 0.3f입니다
                     effect.World = transforms[mesh.ParentBone.Index] * Matrix.CreateRotationY(darwin.rotation) * Matrix.CreateTranslation(darwin.position);
                     effect.View = arcCamera.View;
                     effect.Projection = arcCamera.Projection;
         }
         mesh.Draw();

}

 

이렇게 하시면 결과물로 투명한 유리인 아래 사진 같은 결과를 얻을 있습니다.

 

 

[출처] XNA에서 오브젝트 투명하게 띄우기(유리) (XNA | Game Studio Express) |작성자 부퍼엉

 


:
Sunmoon_BIT/XNA 3.1 2010. 6. 10. 22:19

XNA 3D객체 충돌감지 테스트

생성된 여러가지 객체의 충돌을 감지하기 위해서 for-each문을 사용한다.

이 방법을 사용하면 생성된 객체(배열로 선언)한 모든객체를 검사하며 충돌을 감지한다

 

Void TestCollision(GameObject obj)

{

BoundingSphere objSphere = obj.model.Meshes[0].BoundingSphere;

//GameObject형태의 obj의 첫번째 매쉬와 똑 같은 구를 선언

objSphere.Center = obj.position;

//생성된 구의 원점은 인자로 받은 객체의 위치

objSphere.Radius *= obj.scale;

//생성된 구의 반지름은 인자로 받은 객체의 크기와 같게

 

//객체의 집합의 모든 객체에 대하여

Foreach(GameObject object in ObjectArr)

{

If(object.alive)//객체가 살아있다면

{
        BoundingSphere objSphere2 =object.model.Meshes[0].BoundingShpere;

    objSphere2.Center = object.position;

    objSphere2.Radius *= object.scale;

 

    if(objSphere2.Intersects(objSpherer) //생성된 2개의 구를 충돌감지 하는 함수

    {

       //충돌시 행동코드 입력

    }

 

}

{

}

}

}

 

이 함수를 Update시 객체를 선택하여 이동시킬때마다 호출




:
Sunmoon_BIT/XNA 3.1 2010. 6. 2. 20:31

 float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds;//0.016.....
 RotationAngle += elapsed;
 float circle = MathHelper.Pi * 2;
 RotationAngle = RotationAngle % circle;

float형태의 변수로 마지막으로 업데이트되고 나서의 시간을 저장한다
(1초에 60프레임으로 설정되어있으므로 0.016...이 나올 것이다)
float형태의 RotationAngle변수에 += 해준다
(1초에 60번씩 0.016...을 더한수가 저장된다)
float형태의 circle형태에 1회전시킬것이므로 파이x2를 한다
(반만 회전하려면 파이) -> 수학적인 부분은 잘 모르겠다..
RotationAngle에 circle값을 나눈 나머지값을 저장한다

spriteBatch.Draw(SpriteTexture, screenpos, null, Color.White, RotationAngle, origin, 1.0f, SpriteEffects.None, 0f);


'Sunmoon_BIT > XNA 3.1' 카테고리의 다른 글

XNA 3.1 실시간 해상도 변경하기  (0) 2010.07.05
XNA 객체 투명하게만들기  (0) 2010.06.10
XNA 3D객체 충돌감지 테스트  (0) 2010.06.10
: