2010-03-18 5 views
6

5 년 전 DirectSound와 Direct3D로 게임을하고 있었고 C++로 좋은 결과를 얻는데 많은 시간이 걸렸지 만 정말 흥미로 웠습니다. 나는 대학생이었습니다. 이제는 C# 및 PHP로 대부분 엔터프라이즈 개발 경험을 쌓았습니다. 우리나라에서 심각한 게임 개발로 돈을 벌 수있는 기회는 없습니다. 매일 내가 뭔가를 놓친다는 것을 알게된다. 그래서 저는 재미있게 프로그래밍을하기 위해 매일 한 시간 정도를 보내기로했습니다.네트워크 월드 시뮬레이션/인공 지능 샌드 박스를위한 3D 게임 엔진

제 아이디어는 세계 시뮬레이션을 작성하는 것입니다. 심즈 3처럼 단순하고 기본적인 요구, 기본 애니메이션, 최소한의 그래픽 자산과 같이 단순한 것으로 시작하고 싶습니다. 도시가 아닌 단순한 큰 집을 시작합니다. 아이디어는 MySQL 데이터베이스에 세계 데이터를 저장하는 일종의 서버 응용 프로그램과 일부 클라이언트 응용 프로그램 (움직임을 시뮬레이트하고 세계와 상호 작용하는 약간의 AI 봇)을 갖는 것입니다. 3D가 없으면 재미 있지 않을 것입니다. 그래서 3D 클라이언트도 있습니다. 가상 세계에 들어가서 AI 로봇을 볼 수 있습니다. 봇이 보이는 영역에 들어가면 재질이되어 메쉬와 애니메이션을로드하므로 볼 수 있습니다. 내가 떠날 때, 봇은 3D 메쉬 몸체를 다시 잃어 버렸지 만 가상 현실은 여전히 ​​계속됩니다.

시간이 지남에 따라 다양한 인공 지능 알고리즘을 실험하기 위해 확장 가능한 스크립트 가능 샌드 박스를 만들고 싶습니다. 나는 내가 (무료 및 오픈 소스)해야 가능한 많은 것들을 보았다 D

지금은 선택의 여지 확인해야합니다 : :하지만 본격적인 MMORPG를 만들 목적으로하고 있지 않다

  • 을 OGRE3D + enet (또는 RakNet). 오래된 좋은 C++. 그러나 그것은 내가 더 이상 즐겁게 지내지 않을만큼 많이 나를 늦추지 않을 것인가?

  • 수정 공간. 공식적으로는 게임 엔진이 아니지만 그와 매우 가깝습니다. 다시 C++.

  • MOgre (OGRE3D. NET 용) + lidgren (일부 게임 프로젝트에서 이미 사용되는 네트워킹 라이브러리). 좋은 점은 C#을 좋아하고, 빠른 프로그래밍에 좋으며 스크립팅에도 사용할 수 있습니다.

  • XNA는 프레임 워크가 아닌 엔진, 그래서 정말 심지어 XNA 게임 스튜디오 :(

  • Panda3D를 봐야한다, 의심이 보인다 -. 긍정적 인 피드백 전체 게임 엔진을 생각 가지고 내가 정말 좋아 하나의 패키지에있는 모든 툴셋은 초보자에게 친숙한 엔진으로서 훌륭한 리뷰를 가지고 있습니다 ... 파이썬을 안다면 C + + 측에서 Panda3D는 거의 존재하지 않는 문서를 가지고 있습니다. 파이썬에 대한 경험은 0 번이지만 들었습니다. 배우기 쉽고 즐겁고 도전적이라면 프로그래밍 언어를 한 번 더 경험하면 도움이 될 것입니다.

그 중 어느 것을 제안 하시겠습니까? 고급 기능이나 플랫폼 지원이 아니라 재미 있고 쉬운 워크 플로우 및 확장 성 때문이 아니라 원하는 모든 구성 요소 (데이터베이스가있는 서버, AI 봇 및 서버)를 만들고 통합 할 수 있습니다. 3D 클라이언트 애플리케이션?

답변

1

파이썬이 마음에 들면 오우거 바인딩이 있습니다. python-ogre을 확인하십시오. 나는 그것을 조금 사용했고 사용하기에 충분히 안정적으로 보였다. 그러나 사용자 기반이 그리 크지 않기 때문에 가끔 버그가 발생합니다.

나는 많이 사용하는 C++ 오우거에 대한 더 많은 경험이 있습니다. 나는 그것이 당신을 그렇게 많이 늦추지 않을 것이라고 생각하지 않습니다. 프로젝트가 꽤 큰 수준으로 확장 될 수있는 것처럼 보입니다. 그렇게하려면 많은 성과가 필요합니다. 이 경우 C++은 결코 나쁜 선택이 아닙니다.

어쨌든 엔진이 완료되면 스크립팅에 관한 모든 것입니다. 원한다면 고 수준 언어로 할 수 있습니다.

3

저는 XNA 만 사용 했으므로 다른 사람들과 비교할 수는 없습니다. XNA는 프레임 워크 일 뿐이지 만 TorqueX 3D은 엔진이라고 할 수 있습니다. XNA ($ 100/year)를 위해 개발할 때 TorqueX 2D 및 3D 엔진 바이너리에 액세스 할 수 있습니다.

3D 엔진으로 작업하지는 않았지만 2D 엔진을 사용했습니다.API에 대한 문서는 약간 희소 할 수 있지만 실제로 유용한 자습서와 자습서에서 응답하지 않는 질문에 대한 상당히 유용하고 능동적 인 포럼이 있습니다.

C#을 사용한 경험은 분명히 매우 유용 할 것입니다. Xbox 360에서 네트워크 스택 (또는 데이터베이스)에 액세스 할 수 없으므로 Windows 개발에 전념해야합니다.

자습서를 작성하고 Torque의 스타일에 익숙해지면 함께 일하는 것이 꽤 재미있을 것입니다. 객체/동작을 추가하는 것은 매우 쉽습니다. XNA 프레임 워크의 최신 버전 중 일부를 사용하면 사운드 지원이 향상되고 매우 간단 해졌습니다. 2D 용으로 훌륭한 에디터를 보유하고 있으며, 3D 에디터가 수준을 만들기 시작하는 데 도움이되도록 괜찮은 편이라고 생각합니다. 나는 그것이 네트워크/데이터베이스 부서에 부족한 것 같아요, 당신은 표준. NET 물건을 사용해야하거나 함께 일할 다른 라이브러리를 가져올거야.

어쨌든 그것을 살펴보고 다른 사람들과 비교해 보는 것이 가치 있다고 생각합니다. XNA에 가입하지 않고도 무료 (30 일) 평가판을 다운로드 할 수 있다고 생각합니다. 행운을 빕니다!

2

Panda3D는 런타임에 메쉬를 수정할 수있는 방법을 가지고 있습니다 (이 기능은 많은 3D 엔진에서 사용하기에는 부족하거나 버그가 있거나 사용하기 어려움). 대화 형 클라이언트 측 메쉬 변경 사항에 필요한 것입니다. 공통 서버로 데이터베이스에서 수정시 타임 스탬프를 포함시켜 클라이언트가 업데이트 된 메쉬 정보를 변경하기 위해 패치를 생성 할 수 있도록 적절한 쿼리를 실행할 수 있도록하십시오.

내 SQL가 꺼져 아마도처럼 테이블 뭔가를 만들 수있는 이노를 사용하지만이 아이디어를 제공합니다

create table `vertex` (
    `id` bigint(15) not null auto_increment, 
    `when` timestamp default now() not null, 
    `x` number not null, 
    `y` number not null, 
    `z` number not null, 
    `cR` number default 0.0 not null, 
    `cG` number default 0.0 not null, 
    `cB` number default 0.0 not null, 
    `cA` number default 1.0 not null, 
    `u` number default 0.5 not null, 
    `v` number default 0.5 not null 
) primary key (id) ENGINE=InnoDB; 

create table triangles (
    `p1` bigint(15) not null references (vertex.id) on delete restrict on update cascade, 
    `p2` bigint(15) not null references (vertex.id) on delete restrict on update cascade, 
    `p3` bigint(15) not null references (vertex.id) on delete restrict on update cascade, 
    `when` timestamp default now() not null 
) primary key (p1,p2,p3) ENGINE=InnoDB; 

ID가 타임 스탬프는 x는, y는, Z가 업데이트 패치를 만들 수있게됩니다 정점 아이디입니다 3D 꼭지점 cR, cG, cB, cA는 RGBA 꼭지점 색 u, v는 꼭지점 텍스처 좌표 p1, p2, p3은 외래 키 참조로 표시된 삼각형을 형성하기 위해 꼭짓점 테이블의 꼭지점을 참조합니다. InnoDB는 정의되지 않은 정점 (즉, 일관성) 관련 문제를 방지하여이를 사용할 수 있습니다. 상황에 따라 정점이 삭제 된 모든 삼각형을 제거하면 '제한'을 '계단식'으로 변경합니다 (제한하면 삼각형이있는 정점을 삭제할 때 오류가 발생 함)

봇 메쉬 알고리즘의 경우, 기본적으로 볼 수없는 봇에 대해서는 LOD 컬을 구현합니다. 많은 엔진이 이미이 작업을 수행 할 수 있습니다. 예를 들어, 모든 봇의 스키닝/애니메이션 메쉬는 Panda3D에서 봇의 바깥 쪽 개체에 자식으로 만들 수 있으며 봇의 바깥 개체가 보이는 범위를 벗어나는 경우 자식이 전혀 참조되지 않습니다.

+0

감사합니다. 정말 유용한 아이디어입니다. – JustAMartin