================= Following =======================
Let's implement mainPage, which is visible when we jump from the loading page.
First of all, I recommend you to get a basic knowledge with the xoppa blog on basic implementation.
================= 이어집니다 =======================
로딩 페이지에서 넘어가면 보이는 mainPage를 구현해봅니다.
먼저 기본 구현에 대한 xoppa 블로그로 기초 지식을 쌓으시길 추천드립니다.
https://xoppa.github.io/blog/basic-3d-using-libgdx/
I'll implement it similar to the implementation page for three.js in my blog. I'll add a light, add a camera control, a sphere, a cube, and a line to determine its size.
Below is the screen configuration.
저의 블로그 내의 three.js 의 구현 페이지와 비슷하게 구현해보겠습니다. 빛을 추가하고 카메라 컨트롤 추가, 하나의 sphere와 하나의 큐브, 그리고 크기를 알수 있는 라인을 깔겠습니다.
아래의 이런식의 화면 구성입니다.
https://cyjses.tistory.com/33?category=833857
libgdx, unlike threejs, does not have some helpers. And the basic model implementation may seem a bit difficult. Please take a look at the source and create a new class to organize your own implementation rhythm.
libgdx는 threejs와는 다르게, 몇몇 helper 가 없습니다. 그리고 기본 모델 구현도 약간 어렵게 느껴지기도 합니다. 소스를 보시고, 본인의 구현 리듬에 맞게 새로 클래스를 만들어서 정리하시기를 추천드립니다.
I'll only explain what's added in the basic document.
1. Help class to operate camera with mouse.
2. I added a light, and added two ambient light, ambient light and two directional light. Add it to the environment, and specify this environment when rendering to render the lighted screen.
3. modelBuilder-libgdx creates a basic model first and then creates an instance based on it.
modelBuilder is a class that creates basic shapes. There are two ways to create it.
The first method is to create a cube or sphere consistently as in the case below. This method only generates the shape in the specified way.
The second way is to create a model by combining several shapes with the meshPartBuilder as an intermediate, as in step 4. To do this, start with modelBuilder.begin (), add several shapes in the middle with meshPartBuilder, and then do modelBuilder.end (). The model is returned as the return value.
Number 4 is creating a grid to help you measure size. This part should be automated by the programmer.
기본 도큐먼트에서 추가되는 부분만 설명하겠습니다.
1. 카메라를 마우스로 조작하는 헬프 클래스입니다.
2. 빛을 추가했는데, 전체 환경 광원인 ambientLight와 직선광원 directionalLight 2개를 추가했습니다. 추가는 environment에 하고, 랜더링시 이 environment를 지정하면 빛이 설정된 화면이 랜더링됩니다.
3. modelBuilder - libgdx는 기본 형태의 model을 먼저 만들고, 그에 기반을 둔 인스턴스를 생성합니다.
modelBuilder는 기본모양의 shape를 만드는 클래스입니다. 그리고 생성 방법은 크게 두가지가 있습니다.
첫번째 방법은 아랫쪽에 6번의 경우처럼 cube나 sphere를 일정하게 생성하는 방법입니다. 이 방법은 지정된 방식의 모양만 생성합니다.
두번째 방법은 4번처럼 meshPartBuilder은 중간 매개로 두어서 여러가지 형태를 결합시켜 하나의 모델을 생성하는 방법입니다. 이렇게 할때는 modelBuilder.begin()으로 시작을 알리고, 중간에 meshPartBuilder로 여러 모양을 추가한 후, modelBuilder.end()를 합니다. 이때 리턴값으로 모델이 반환됩니다.
4번은 크기 측정을 도와주는 grid를 만들고 있습니다. 이부분은 프로그래머가 자동화하는것이 좋겠죠.
Step 5 adds three lines that tell the axis that modelBuilder is not finished.
Then call modelBuilder.end () to get the work done.
As mentioned above, 6 creates a model using the specified format, such as createBox and createSphere.
Material 7 and attribute 7 specify the rendering texture, color, and format. This part also has a lot of content, so I will not discuss it here. Find the libgdx document separately. You can see the color assignment.
8, 9-> Rendering.
The resulting screen looks like this:
5번은 아직 modelBuilder가 끝이 나지 않은 상태에서 축을 알려주는 세가지 선을 추가하고 있습니다.
그리고 modelBuilder.end()를 호출해서 그동안의 작업물을 리턴받습니다.
6번은 위에서 언급했듯이 createBox, createSphere같은 지정된 형식을 이용해서 하나의 모델을 만듭니다.
7번의 머테리얼과 어트리뷰트는 랜더링 질감,색상,형식을 지정하는 내용입니다. 이 부분도 내용이 많기 때문에 여기서 논의를 하지않고 일단 어떤 것이라는것만 알고 설명은 넘기도록 하겠습니다. 따로 libgdx 도큐먼트를 찾아주세요. 색상 지정하는것은 알수 있을 겁니다.
8, 9 -> 랜더링을 하고 있습니다.
결과 화면은 다음과 같습니다.
Finally, let's look at dispose.
dispose is to free memory. As you know java automatically runs the garbage collector. However, such game engines use too large data and force them to be released manually. In other words, some resources have to dispose directly.
마지막으로 dispose에 대해서 알아보겠습니다.
dispose는 메모리를 해제하는 것입니다. 아시다시피 java는 garbage collector 를 자동 실행합니다. 그러나, 이런 게임 엔진과 같은 경우는 너무 큰 자료를 쓰기때문에 직접 해제를 하게 강제하고 있습니다. 즉 어떤 자원은 직접 dispose를 해야된다는 말이죠.
Dispose here is modelbatch and model. You can understand that this class has a lot of resources. Knowing what resources to dispose is to test whether you have a dispose as a method. The libgdx documentation teaches you the overall kind. And as I'll mention later, scene2d, which handles fonts and images, should also dispose most elements. This is covered in that section. Here is the libgdx document:
여기서 dispose하는 것은 modelbatch와 model 입니다. 이 class가 자원을 많이 가진다고 이해할수 있겠죠. dispose 해야되는 자원을 아는것은 dispose를 메서드로 가지고 있는가를 테스트 해보는 것입니다. 그리고 그에 관한 전반적인 종류를 libgdx 도큐먼트에서 가르쳐주고 있습니다. 그리고 뒤에서 언급하겠지만, 폰트나 이미지를 다루는 scene2d도 대부분의 요소를 dispose 해야됩니다. 이는 해당 부분에서 다루겠습니다. 다음의 libgdx document입니다.
https://github.com/libgdx/libgdx/wiki/Memory-management
Now let's finish the loading page, write the part that goes to the main page, and complete the project.
Attach source code containing only the following resources and sources.
True, and change GLOBAL.where to mainPage to run the above page.
이제 로딩페이지를 완성하고 메인페이지로 넘어가는 부분을 작성하고 프로젝트를 완성해보겠습니다.
다음의 리소스와 소스만을 담은 소스코드를 첨부합니다.
참, 그리고 위 페이지를 실행시키기 위해서 GLOBAL.where 을 mainPage로 변경하길 바랍니다.
Will continue in the next post.
다음 포스트에서 이어집니다.
=========================================================================
'LibGdx' 카테고리의 다른 글
libgdx-collision handling (collision, bullet engine) (0) | 2019.11.18 |
---|---|
libgdx-loading page implementation 5 (0) | 2019.11.17 |
libgdx-loading page implementation 3 (skin, font) (0) | 2019.11.16 |
libgdx-loading page implementation 2 (0) | 2019.11.12 |
libgdx-loading page implementation, (using skin) (0) | 2019.11.12 |
댓글