libgdx provides a bullet engine wrapper by default. If checked at initial setting, bullet library is added. Otherwise, it is added to build.gradle.
libgdx에서는 기본적으로 bullet engine wrapper를 제공합니다. 초기 설정시 체크를 해두면 bullet 라이브러리를 가지고, 아닐경우는 build.gradle에 추가합니다.
Or add the following to your build.gradle
아니면 build.gradle에 다음을 추가합니다.
There are some good documentation on using the libgdx bullet engine.
libgdx bullet engine 이용에 관해서는 좋은 도큐먼트가 존재합니다.
https://xoppa.github.io/blog/using-the-libgdx-3d-physics-bullet-wrapper-part1/
The documentation is in the order of collision world-> dynamic world-> motion state. The implementation in this post will even use motion states. The functionality is almost identical to the implementation in three.js on the blog. Since the description is so detailed in the xoppa blog above, the details are reduced, and the description in my blog is more detailed in three.js. please note.
문서의 내용은 collision world -> dynamic world -> motion state의 이용순으로 되어있습니다. 이 포스트에서의 구현은 motion state를 쓰는것까지 하겠습니다. 기능이 거의 블로그의 three.js에서의 구현과 동일합니다. 위의 xoppa 블로그에서 설명이 워낙 자세하기 때문에, 세세한 내용은 줄였고, 제 블로그에서의 설명은 three.js 쪽이 좀더 상세합니다. 참고해주세요.
https://cyjses.tistory.com/33?category=833857
That's how I'm going to implement it this way.
1. Visually identify the collision object.
2. Basically you can add mixed objects.
즉 이런식으로 구현할 생각입니다.
1. 충돌 물체를 시각적으로 확인할수 있다.
2. 기본적으로 혼합개체를 추가할수 있다.
========================================================================
Let's add a CollisionElement that returns the most basic shapes like boxes, spheres, triangular pyramids and cylinders. The implementation is the same as three.js on the blog.
Implemented as Factory Class.
박스, 구형, 삼각뿔, 원통 등의 가장 기본적인 모양을 요기서 return 해주는 CollisionElement를 추가해보도록 하겠습니다. 구현은 동블로그의 three.js와 동일합니다.
Factory Class로 구현되었습니다.
1. bounding is a visual frame created by lines. Collision puts the shape of a bullet that represents the actual collision object.
2. boudingBuiler-I explained ModelBuilder in the previous post. There is a way to create a single basic shape and a combination of multiple shapes with the meshPartBuilder.
3. build_count increments as each conflict shape is added to each instance. As we saw in 4, at zero, the first time we declare boundingbuilder.begin () to declare that we are creating a mesh part.
1. bounding 은 line으로 만든 시각틀입니다. collision은 실제 충돌 물체를 나타내는 bullet의 shape를 넣어줍니다.
2. boudingBuiler - 앞의 포스트에서 ModelBuilder에 대해 설명했습니다. 하나의 기본 모양을 만드는 방법과 meshPartBuilder로 복수의 모양을 합쳐서 만드는 방법이 있는데, 여기서는 후자를 택하겠습니다.
3. build_count 는 각 instance에 충돌shape가 하나 추가될때마다 증가합니다. 4번에서 보듯이 0일때, 즉 처음 시작할때는 boundingbuilder.begin()을 호출하여 mesh part를 만든다고 선언합니다.
5. Call node () before adding one mesh part.
Steps 3 through 5 are common when using meshPartBuilder.
5. 하나의 mesh part가 추가되기 전에 node()를 호출합니다.
3~5번 과정은 meshPartBuilder를 사용할때의 일반적인 과정입니다.
6,7-We are creating a model for bounding and a shape for collision, respectively.
6,7 - 각각 bounding을 위한 모델, collision을 위한 shape를 만들고 있습니다.
In the case of a collation shape, you need to add it to the compoundShape every time it is created. The bounding line model doesn't have to do that, add nodes one by one with the meshPartBuilder, and call end () when you're done. The end () method executes that process.
collsion shape의 경우는 생성될때마다 compoundShape에 추가를 시키면되고, bounding line model은 그렇게 할 필요가 없고, meshPartBuilder로 node를 하나씩 추가시키고, 작업이 마무리될때 end()를 호출하면 하나의 model로 만들어집니다. 그 과정을 실행시키는 end() 메서드입니다.
=============================================
Next, we will create a PrimitiveModel class that will return a model instance and a rigid body.
다음 정해진 모델을 부르면 model instance와 rigid body를 리턴해주는 PrimitiveModel 클래스를 만들도록 하겠습니다.
1. An inner class that extends motionState.
2. You can see that we have two fileds: bounding_line and collision_body.
3. shapes is an array that stores a link to each shape you create in the CollsionElement. So use it to dispose when you're done.
1. motionState를 확장한 이너 클래스입니다.
2. bounding_line, collision_body 두개의 filed를 가지고 있는것을 볼수 있습니다.
3. shapes는 CollsionElement에서 만드는 각각의 shape의 링크를 저장하는 배열입니다. 그래서 사용이 끝날때 dispose에 사용합니다.
1. The original model you want to show.
2. Create a collision shape from the CollisionElement you created earlier.
3. Change the position value of the returned CollisionElement. There is no change here.
4. Add it to the CompoundShape.
5. Save the link of the collision shape for dispose.
1. 보여주려는 원래 모델입니다.
2. 앞에서 만들어둔 CollisionElement에서 충돌모양을 만듭니다.
3. 리턴된 CollisionElement의 위치값을 변경합니다. 여기서는 변경이 없습니다.
4. CompoundShape에 추가시킵니다.
5. dispose를 위해서 collision shape의 링크를 저장합니다.
Steps 2 through 5 can be added and repeated several times to create complex shapes.
2~5까지 과정은 여러번 추가/반복해서 복잡한 모양을 만들수 있습니다.
1. In this way, model the bounding line that has been composited.
2. This is the part to set the inertia force.
3. Create a rigidbody.
4. Create a motion state.
1. 이런식으로 그동안 합성생성한 bounding line을 모델로 만듭니다.
2. 관성력을 설정하는 부분입니다.
3. rigidbody를 생성합니다.
4. motion state를 생성합니다.
==================================================================
We have not yet set the method of moving the object due to the motion state. And no dynamic world. But basic visual tools and rigid bodies have been created. Let's check the execution result first.
Now let's create a main page for the output.
아직 motion state로 인한 물체의 이동 방법은 설정하지 않았습니다. 그리고 dynamic world도 설정안했구요. 그러나 기본적인 시각툴과 rigid body는 생성되었습니다. 이대로 우선 실행 결과를 확인하겠습니다.
이제 출력을 위한 메인페이지를 만들겠습니다.
In the example in the previous post, change the following: Rather than using modelInstances one by one, we use an array to collect them according to their characteristics. This allows you to send an array when rendering.
이전 포스트의 예제에서 다음을 변경합니다. modelInstance를 하나씩 쓰는게 아니라 특징에 따라 배열을 써서 모읍니다. 이러면 랜더링시에 배열을 보낼수 있겠지요.
1. Now let's render the grid and axe to others.
2. You need to run Bullet.init () first to start the bullet engine.
3. The previous example is shown as a PrimitiveModel. Add the actual modelInstance and bouding lines to instances and others respectively.
4. Changed the rendering method like this.
1. 이제 grid와 axe를 others로 랜더링 시키겠습니다.
2. 불릿 엔진을 시작하려면 Bullet.init()을 먼저 실행시켜야합니다.
3. 이전 예제를 PrimitiveModel로 나타내었습니다. 각각 실제 modelInstance와 bouding line을 instances와 others에 추가시킵니다.
4. 랜더링 방법을 이런식으로 변경하였습니다.
============== leads to the next post =============
============== 다음 포스트로 이어집니다 =============
'LibGdx' 카테고리의 다른 글
libgdx-collision handling 3 (collision, bullet engine) (0) | 2019.11.18 |
---|---|
libgdx-collision handling 2 (collision, bullet engine) (0) | 2019.11.18 |
libgdx-loading page implementation 5 (0) | 2019.11.17 |
libgdx-loading page implementation 4 (basic 3d scene configuration) (0) | 2019.11.16 |
libgdx-loading page implementation 3 (skin, font) (0) | 2019.11.16 |
댓글