nodejs addon binding osg

3482 단어
웹 페이지 를 osg 창 에 연결 한 적 이 있 습 니 다. osg 디 스 플레이 를 백 엔 드 로 표시 하 는 리 셋 메커니즘 이 필요 합 니 다. 구체 적 인 방법 은 osg 를 상태 기 로 하고 프론트 웹 인터페이스 가 백 엔 드 에 명령, 메 시 지 를 보 내 는 것 입 니 다.
백 스테이지 에서 메 시 지 를 받 고 상 태 를 바 꾸 고 싶 습 니 다. 저 는 soket 에 올 라 가 고 싶 습 니 다. 저 는 네트워크 서비스의 상태 기 가 필요 합 니 다. nodejs 는 마침 짧 고 간결 하 며 상대 적 으로 개발 이 뜨 겁 습 니 다. 그리고 앞 배경 은 개발 언어의 일치 성 을 유지 합 니 다.
피 할 수 있 습 니 다. 개발 자 들 이 서로 다른 언어 에서 전환 합 니 다. v8 엔진 은 전 세계 에서 억 명의 인구 가 테스트 를 하고 있 습 니 다. 생각해 도 걱정 하지 마 세 요.
이상 은 js 를 귀속 시 키 는 목적 입 니 다.
인터넷 에서 js 자 료 를 검색 한 결과 모두 2010 년 의 한 편 이 었 다. 그때 node. js 는 0.02 판 이 었 다. node. js 커 뮤 니 티 는 이 를 수정 하고 node - gyp 라 는 통합 도 구 를 사용 하여 addon 개발 을 진행 했다.
구체 적 으로 node. js addon 을 보십시오.
> node - js 다운로드 vcbuild. bat 일괄 처리 파일 컴 파일 node - js
> addon 의 예 를 다운로드 하고 node - gyp 변이 node. js C + 확장 을 실행 합 니 다.
두 번 째 구체 적 인 집행 은 상황 이 발생 하 는 것 이다. 
> 기본 프로 세 스에 따라 직접 실 행 됩 니 다. 마지막 으로 나타 난 버 전 은 x64 비트 입 니 다. node. js 를 사용 하여 js 스 크 립 트 를 실행 하고 addon 을 시작 하면 이상 이 나타 납 니 다. 아마도 dll 은 x64 비트 이 고 당신 의 dll 은 x64 비트 입 니 다.
node. exe 는 win 32 와 일치 하지 않 습 니 다. 이 문 제 는 저 를 오랫동안 괴 롭 혔 습 니 다. 저 는 node - gyp 구축 도구 의 명령 을 시 도 했 습 니 다. 출력 정 보 를 자세히 관찰 하 였 으 나 요령 이 없 었 습 니 다. google 에서 자 료 를 찾 았 습 니 다.
node - gyp 구축 에 대한 명령 이 적 습 니 다. 공식 문 서 는 기본 configure - > build 에 따라 더욱 간단 합 니 다. 오랫동안 시도 한 msvs 의 공장 옵션 은 x64 버 전 만 표시 되 고 있 습 니 다.
Release 본의 엔지니어 설정 은 완전히 컴 파일 할 수 있 습 니 다. 여러 번 좌절 을 겪 은 상황 에서 저 는 x64 버 전의 node. js 를 다시 컴 파일 하려 고 했 지만 Debug 버 전의 addon 을 얻 을 수 없 었 기 때 문 입 니 다.
그래서 당분간 이런 식 으로 생각 하지 않 았 습 니 다.뒤이어 node - gyp 가 gyp 의 연장 이라는 것 을 알 게 되 었 다.node - gyp 의 명령 은 gyp 의 명령 과 공통점 이 있어 야 합 니 다.그래서 구 글 에서 gyp build win 32 를 찾 아 봤 습 니 다.
정보마지막 으로 한 질의 응답 에서 이런 명령 이 있 는 것 을 보 았 다.
--arch  ia32  
해 봤 어 요.
node-gyp configure -arch ia32  win 32 버 전이 나 오 다 니.그러나 build 에서 출력 한 정보 에 따 르 면 여전히 Release 버 전 입 니 다.node. exe 불 러 오기 예제 addon OK
드디어 오 랜 만 에 헬 로 가 나 타 났 다.
더욱 분발 하여 시도 하 다. --mode debug  안 된다
--Debug  할 수 있다 니.구체 적 인 command
node-gyp configure -arch ia32  --debug
 
항상 이 addon 의 바 인 딩 프로 세 스 는 통 하 는 셈 입 니 다.다음은 osg 의 폭력 바 인 딩 입 니 다.나 는 직접 addjs 에 다음 코드 를 추가 했다. 
Handle<Value> Method(const Arguments& args) {
  HandleScope scope;

  osgViewer::Viewer viewer;

  osg::Group *root = new osg::Group();

  osg::Box *unitCube = new osg::Box( osg::Vec3(0,0,0), 1.0f );
  unitCube->setDataVariance(osg::Object::DYNAMIC);

  osg::ShapeDrawable *unitCubeDrawable = new osg::ShapeDrawable(unitCube);

  osg::Geode *basicShapeGeode = new osg::Geode;

  basicShapeGeode->addDrawable( unitCubeDrawable );

  root->addChild( basicShapeGeode );

  viewer.setSceneData( root );
  viewer.setCameraManipulator( new osgGA::TrackballManipulator() );
  viewer.realize();

  //viewer.setUpViewInWindow( 20, 20, 640, 480 );

  while ( !viewer.done() ) {
	  viewer.frame();
  }

  return scope.Close(String::New("world"));
}

이것 은 osg sample 의 유일한 예 입 니 다. 렌 더 링 인터페이스 전체 화면 에 표 시 됩 니 다. 
osg 창 크기 를 설정 할 때나타나다
Error: [Screen #0] GraphicsWindowWin32::makeCurrentImplementation() -
Window not
realized; cannot do makeCurrent.

오류 
http://comments.gmane.org/gmane.comp.graphics.openscenegraph.user/12009 링크 의 설명 과 일치 합 니 다.
이 문답 에서 말 한 것 은 스 레 드 때 문 이 라 본인 은 모른다 고 표시 했다.그러나 node. js 자체 에 사건 기반 libuv 프레임 워 크 가 있다 는 것 을 어렴풋이 느 꼈 다.
근 데 마크 떨 어 뜨 려 도 아무 도 문제 없어.그 러 니까 말 도 마.
node. js 에 대한 첫 접촉 이 죠?

좋은 웹페이지 즐겨찾기