D 언어로 DX 라이브러리를 사용하여 D 언어 군을 강림
그래, 예수 그리스도께서 이 세상에 탄생했다고 하는 크리스마스입니다.
그에 따라 크리스마스까지의 카운트다운 캘린더를 Advent(강림) Calendar라고 부르는 풍습이 기독교국에서 할 수 있었습니다.
그리고, 그 풍습이 엔지니어에게 발견되어 버린 결과, 12월은 다양한 것 "1" 「2」 가 강림하는 달이 되었습니다.
이 D 언어 Advent Calendar 도 그 중 하나입니다.
마지막 날인 오늘은 D 언어를 쓰고 D 언어 군을 강림합시다.
D언어군이란?
D 언어의 공식 마스코트입니다.
이런 모양을 하고 있습니다.
덧붙여서 일본어 번역판 사이트라면 트게토게인 거친 화상이 되고 있습니다.
D언어군은 D Ver.0.x 시대부터 존재하고 있기 때문에, 아마 나중에 본가가 고해상도로 바꿨다고 생각합니다.
아래의 D언어군이 일본에서 널리 알려진 분의 D언어군의 모습이군요.
3차원으로 된 D언어군
D언어군의 2차원 화상은 옛날부터 존재했지만,
다각형 모델은 오랫동안 없었습니다.
하지만 지난 주 당돌에 3D 모델이 탄생했습니다.
본을 넣어, 예의 포즈 취해 완성!
#D 언어 피 c. 라고 r. 코 m / 8 A T 카이 MBT — イ五 (@fifth_tea) December 18, 2013
모델도 Metasequoia 포맷(.mqo)과 Miku Miku Dance용 포맷(.pmd)으로 공개되고 있습니다. skydrive
이번에는 이것을 사용하여 D언어군을 강림시킵니다.
사용 라이브러리
첫 과제
Derelict3 에 포함되어 있는 Open Asset Import Library(Assimp3) 과 GLFW3 를 사용해 구현하려고 했지만, 매우 큰 문제가 있었습니다.
D언어군의 2차원 화상은 옛날부터 존재했지만,
다각형 모델은 오랫동안 없었습니다.
하지만 지난 주 당돌에 3D 모델이 탄생했습니다.
본을 넣어, 예의 포즈 취해 완성!
#D 언어 피 c. 라고 r. 코 m / 8 A T 카이 MBT — イ五 (@fifth_tea) December 18, 2013
모델도 Metasequoia 포맷(.mqo)과 Miku Miku Dance용 포맷(.pmd)으로 공개되고 있습니다. skydrive
이번에는 이것을 사용하여 D언어군을 강림시킵니다.
사용 라이브러리
첫 과제
Derelict3 에 포함되어 있는 Open Asset Import Library(Assimp3) 과 GLFW3 를 사용해 구현하려고 했지만, 매우 큰 문제가 있었습니다.
무려 Assimp3는 일본에서 압도적인 아마추어 인기를 자랑하는 Metasequoia와 Miku Miku Dance를 지원하지 않습니다.
Blender 등으로 COLLADA 또는 FBX로 내보내면 사용할 수 있지만 단지 번거로움 (포맷 변환이 만능이라고도하지 않습니다)
Assimp3는 많은 모델 파일을 읽을 수 있습니다만, 읽는 것만으로 OpenGL등으로 표시하기 위해서는 한번 더 뚜껑 수고가 필요합니다.
그렇게 되면 Assimp3와 GLFW3의 코드량이 늘어나 D언어의 기사는 없어지므로 이번은 그만두었습니다.
이 기사를 작성하기로 결정한 것 자체가 5 일 전입니다.
그래서 이번에는
DX 라이브러리 을 사용하여 D 언어 군을 표시합니다.
D언어는 C언어와 바이너리 호환이므로, C언어제의 라이브러리를 제대로 만지면 D언어 프로그램 안에서 함수나 변수나 구조체를 사용할 수도 있습니다.
이번은 羽流布 씨 가 공개하고 있는 D언어판 DX 라이브러리 3.11을 이용합니다. 벡터
코드 작성
처음 DX 라이브러리를 썼기 때문에 잘 모르겠지만 이런 코드로 MMD 모델을 표시할 수 있는 것 같습니다.
PMD 파일과 VMD 파일은 미리 준비한 것을 두어 두면 한 줄로 읽을 수있는 것 같습니다. .
main.dmodule main;
import dx4d;
import string;
import std.file;
void main()
{
int count, x, y;
try
{
int mHandle;
VECTOR Camera;
dx_ChangeWindowMode(TRUE);
if (dx_DxLib_Init() < 0 )
{
throw new Exception("DXライブラリの初期化に失敗");
}
if ((mHandle = dx_MV1LoadModel("data/Mr_D.pmd")) == -1)
{
throw new Exception("モデルの読み込みに失敗");
}
Camera.x = 0.0f;
Camera.y = 10.0f;
Camera.z = -20.0f;
dx_SetBackgroundColor(0, 0, 255);
dx_ClearDrawScreen();
dx_SetCameraNearFar(1.0f, 150.0f);
dx_SetCameraPositionAndTarget_UpVecY(Camera, dx_VGet(0.0f, 10.0f, 0.0f));
if (dx_MV1AttachAnim(mHandle, 0, -1, FALSE) == -1)
{
throw new Exception("アニメーションの再生に失敗");
}
dx_MV1SetAttachAnimTime(mHandle, 0, 0.0f);
if (dx_MV1DrawModel(mHandle) == -1)
{
throw new Exception("モデルの描画に失敗");
}
dx_WaitKey();
}
catch( Exception e )
{
std.file.write( "error.log", e.msg );
}
finally
{
dx_DxLib_End();
}
}
할 수 있었습니다.
쿠 ~ 피곤했습니다 w 이것으로 완결입니다!
요약
DX 라이브러리는 대단하다. 처음으로 그렇게 생각했다.
Reference
이 문제에 관하여(D 언어로 DX 라이브러리를 사용하여 D 언어 군을 강림), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yasei_no_otoko/items/e717ef09dce98330cde5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
module main;
import dx4d;
import string;
import std.file;
void main()
{
int count, x, y;
try
{
int mHandle;
VECTOR Camera;
dx_ChangeWindowMode(TRUE);
if (dx_DxLib_Init() < 0 )
{
throw new Exception("DXライブラリの初期化に失敗");
}
if ((mHandle = dx_MV1LoadModel("data/Mr_D.pmd")) == -1)
{
throw new Exception("モデルの読み込みに失敗");
}
Camera.x = 0.0f;
Camera.y = 10.0f;
Camera.z = -20.0f;
dx_SetBackgroundColor(0, 0, 255);
dx_ClearDrawScreen();
dx_SetCameraNearFar(1.0f, 150.0f);
dx_SetCameraPositionAndTarget_UpVecY(Camera, dx_VGet(0.0f, 10.0f, 0.0f));
if (dx_MV1AttachAnim(mHandle, 0, -1, FALSE) == -1)
{
throw new Exception("アニメーションの再生に失敗");
}
dx_MV1SetAttachAnimTime(mHandle, 0, 0.0f);
if (dx_MV1DrawModel(mHandle) == -1)
{
throw new Exception("モデルの描画に失敗");
}
dx_WaitKey();
}
catch( Exception e )
{
std.file.write( "error.log", e.msg );
}
finally
{
dx_DxLib_End();
}
}
DX 라이브러리는 대단하다. 처음으로 그렇게 생각했다.
Reference
이 문제에 관하여(D 언어로 DX 라이브러리를 사용하여 D 언어 군을 강림), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yasei_no_otoko/items/e717ef09dce98330cde5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)