OpenSiv3D로 3D 게임 만들기(미완성)

3822 단어 OpenSiv3D
개시하다
이 글은 Siv3D Advent Calendar 2021 10일차 글1이다.
OpenSiv3D는 v0입니다.6.0에서 시작하는 기본 3D 드로잉에 해당합니다.그래서 저는 3D 관련 기능을 이용해서 MyNumber의 3D 버전을 만들기로 했습니다.(아직 완성되지 않았습니다.)
이 기사를 쓸 때의 화면은 아래의 느낌이다.WASD 키는 입방체의 집합을 회전시킬 수 있다.또 각 큐브를 클릭하면 폭탄Print이 있으면 게임 오버가 표시되고, 그렇지 않으면 주변 폭탄의 수가 표시됩니다.

이루어지다
전선이 길어서 여기에 놓으면 보기 싫어서 대신 붙인다GiitHub 저장소로 연결.코드의 전체적인 상황을 확인하고 싶으신 분들은 보세요.
힘든 곳
실복에 힘들었던 부분을 몇 개 적으세요.
3D 공간에서 물체 회전
그림으로서 아래 그림과 같이 3차원 공간에서 회전하는 느낌.

이 처리는 회전된 Box가 있는 OrientedBox와Quaternion을 사용하여 간단하게 완성되었다.구체적으로 말하면 회전 중심에서 관찰할 때의 OrientedBox의 좌표를 Vec3 {x, y,z}, 3차원 공간의 원점에서 관찰한 회전 중심의 좌표를 Vec3 {a, b, c}로 설정한다.
Main.cpp
OrientedBox{ Vec3{x, y, z} * quaternion + Vec3{a, b, c}, 1, 1, 1,  
             quaternion }.draw();
이런 형식으로 쓰면 실현할 수 있다.원래 복잡한 처리를 해야 하는 할당량 이구의 곱셈2은 *,Vec3 사이의 덧셈은 +만 있으면 쓸 수 있어 매우 편리하다.
3D 정렬 준비
OpenSiv3D 중 하나는 Grid라는 2차원 배열을 처리하는 것이다.하지만 Siv3D의 저자인 Ryo Suzuki와 상의해 봤는데 Grid의 3차원 버전은 현재(v0.6.3)에 존재하지 않는다.그래서 나는 Array 3D반을 쓰고 그것을 사용했다3.
이번 Aray3D 설치의 주요 기능은 다음과 같습니다.
  • 좌표나 인덱스 기반 요소 읽기(get)
  • 좌표나 색인을 통해 원소 쓰기(set)
  • 폭, 높이 및 깊이 획득
  • 네.시간이 있으면 Operator[]와Vec3 접근 요소를 사용하려고 했지만 시간이 부족해서 미뤘습니다.쓴 코드는 여기.에서 확인할 수 있습니다.
    Arreay3D와 관련해서는 코드가 예쁘지 않을 뿐만 아니라 현재 최소한의 기능만 구현하고 있어 향후 오픈Siv3D 호스트에서 감각적인 3차원 배열이 이뤄질 것으로 기대된다.
    향후 계획
    게임으로 즐길 수 있을 정도로 완성 예정입니다.클릭한 빈칸에는 주변 폭탄의 수를 표시하는 기능이 있지만 집필할 때 오류가 있어 수정이 필요하다.또 게임 종료와 클리어 시 디스플레이도 잘 보여줬으면 좋겠다.4
    끝까지 읽어주셔서 감사합니다.
    너무 늦은 거 아니야? 
    할당 이능의 계산 방법에 관하여 상세한 상황은 drken의 글를 보십시오. 
    썼다지만 라이오 씨가 쓴 대부분의 부분에 조금을 더한 것에 불과하다. 
    말하자면 Siv3D 참조 등 사이트에서 3D 게임의 샘플 프로그램을 소개하고 싶습니다. 

    좋은 웹페이지 즐겨찾기