int WINAPI WinMain(HINSTANCE hInstance,	//Main windows function
	HINSTANCE hPrevInstance, 
	LPSTR lpCmdLine,
	int nShowCmd)
{

	if(!InitializeWindow(hInstance, nShowCmd, Width, Height, true))
	{
		MessageBox(0, L"Window Initialization - Failed",
			L"Error", MB_OK);
		return 0;
	}

	if(!InitializeDirect3d11App(hInstance))	//Initialize Direct3D
	{
		MessageBox(0, L"Direct3D Initialization - Failed",
			L"Error", MB_OK);
		return 0;
	}

	if(!InitScene())	//Initialize our scene
	{
		MessageBox(0, L"Scene Initialization - Failed",
			L"Error", MB_OK);
		return 0;
	}

	messageloop();

	CleanUp();    

	return 0;
}
STDMETHODIMP 
CVWRender2D::Init(HWND hWnd, LPDIRECT2DRM pd2drm)
{
//	if (!(pddsBackBuffer && pd2drm && hWnd))
//		return E_INVALIDOBJECT;
	if (!(pd2drm && hWnd))
		return E_INVALIDOBJECT;
	
	if (m_pfEmptyScene)
		return E_ALREADYINITIALIZED;
	
	HRESULT hr;
	
	pd2drm->AddRef();
	m_pd2drm = pd2drm;
	
	m_hWnd = hWnd;
	
	if (FAILED(hr = InitScene())) {
		return hr;
	}

	// N.B.: wait for first OnSize message to initialize the size-based objects

	return S_OK;
}
示例#3
0
文件: test.cpp 项目: AdrienTD/wkbre
void Test3()
{
	LoadBCP("data.bcp");
	ReadLanguageFile();
	InitWindow();
	//InitRectDrawing();
	//IDirect3DTexture9 *mytex = GetTexture("Interface\\LOADING SCREEN 1.tga");
	//IDirect3DPixelShader9 *psh = LoadPixelShader("test.psh");
	InitScene(); LoadMap("testmap.bcm");
	while(!appexit)
	{
		BeginDrawing();
		//ddev->SetRenderState(D3DRS_ZENABLE, FALSE);
		//ddev->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
		//ddev->SetPixelShader(psh);
		//ddev->SetTexture(0, mytex);
		//DrawRect(0, 0, 640, 480, -1);
		DrawScene();
		EndDrawing();
		HandleWindow();

		if(keyheld[VK_UP]) camerapos += Vector3(0.0f, 0.0f, walkstep);
		if(keyheld[VK_DOWN]) camerapos -= Vector3(0.0f, 0.0f, walkstep);
		if(keyheld[VK_LEFT]) camerapos -= Vector3(walkstep, 0.0f, 0.0f);
		if(keyheld[VK_RIGHT]) camerapos += Vector3(walkstep, 0.0f, 0.0f);
		if(keyheld['E']) camerapos += Vector3(0.0f, walkstep, 0.0f);
		if(keyheld['D']) camerapos -= Vector3(0.0f, walkstep, 0.0f);
	}
}
示例#4
0
文件: MainForm.cpp 项目: dgi09/D3D
void MainForm::Init()
{
	wxPanel * wxDrawPanelHolder = (wxPanel*)wxForm->FindWindowByName(wxString("pnlDraw"));
	//wxSizer * pnlSizer = wxDrawPanelHolder->GetSizer();

	drawPanel = new DrawPanel(wxDrawPanelHolder,wxDefaultPosition,wxDrawPanelHolder->GetSize(),wxDEFAULT_FRAME_STYLE,wxT("drawPnl111"));
	drawPanel->OnMouseEvent(std::bind(&MainForm::DrawPanel_MouseEvent, this, std::placeholders::_1));
	drawPanel->OnKeyboardEvent(std::bind(&MainForm::DrawPanel_KeyboardEvent, this, std::placeholders::_1));

	//pnlSizer->Add(drawPanel->GetWxControl());

	wxPanel * propPanel = (wxPanel*)wxForm->FindWindowByName(wxString("pnlPropBar"));
	wxSizer * propSizer = propPanel->GetSizer();


	PropertiesPanel::SetPanel(propPanel);
	PropertySectionsManager::SetParent(propPanel);

	InitScene();

	wxButton * btnAddStaticEntity = (wxButton*)wxForm->FindWindowByName(wxString("btnCreateStaticEntity"));
	btnAddStaticEntity->Bind(wxEVT_LEFT_DOWN,&MainForm::OnAddStaticEntity_Click,this);

	wxButton * btnAddLight = (wxButton*)wxForm->FindWindowByName(wxString("btnCreatePointLight"));
	btnAddLight->Bind(wxEVT_LEFT_DOWN, &MainForm::OnAddPointLight_Click, this);

	wxButton * btnAddDirLight = (wxButton*)wxForm->FindWindowByName(wxString("btnCreateDirLight"));
	btnAddDirLight->Bind(wxEVT_LEFT_DOWN, &MainForm::OnAddDirLight_Click, this);
}
示例#5
0
文件: main.cpp 项目: ming-hai/CubicVR
int main(int argc, char **argv) 
{
	/* Initialize KOS */
	pvr_init(&params);

	printf("bullet test beginning\n");

	/* Get basic stuff initialized */
	glKosInit();


	glShadeModel(GL_SMOOTH);
	glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
	glClearDepth(1.0f);
	glEnable(GL_DEPTH_TEST);
	glDepthFunc(GL_LEQUAL);
	glEnable(GL_CULL_FACE);
	glCullFace(GL_BACK);


	Logger::log("init..\n");
	InitScene();
	myTimer.start();
	Logger::log("go\n");

	mGamepad = new Gamepad();

	while(1) 
	{
		mGamepad->Update();
		if(mGamepad->Button(GAMEPAD_BTN_START))		break;

		
		/* Begin frame */
		glKosBeginFrame();


		UpdatePhysics();

		if (myTimer.getNumUpdates()%120==0)
		{
		 	printf("fps: %.4f\n",myTimer.getNumUpdates()/myTimer.totalSeconds());
		 	printf("fps (immediate): %.4f\n",1.0/myTimer.lastUpdateSeconds());
		}

		// printf("cam: %f,%f,%f\n",myCamera.position.x,myCamera.position.y,myCamera.position.z);
		// printf("target: %f,%f,%f\n",targetObj.controller().position.x,targetObj.controller().position.y,targetObj.controller().position.z);

		//printf("obj: %f,%f,%f\n",myRigidSceneObj.controller().position.x,myRigidSceneObj.controller().position.y,myRigidSceneObj.controller().position.z);

		/* Draw the "scene" */
		draw_gl();

		/* Finish the frame */
		glKosFinishFrame();
	}

	return 0;
}
示例#6
0
bool InitEverything(SDL_GLContext& g_Context, SDL_Window*& g_Window, std::unique_ptr<Scene>& pScene) {
	if (InitSDL())
		if (InitGL(g_Context, g_Window))
			if (InitSound())
				if (InitPython())
					if (InitScene(pScene))
						return true;
	return false;
}
示例#7
0
BOOL C3dMazeEffect::Initialize(HDC hDC, BOOL)
{
	if(! m_pMaze->InitRandomMaze())
		return FALSE;
	if(! m_pAI->InitAI(m_pMaze))
		return FALSE;
	if(!InitScene(hDC))
		return FALSE;
	return TRUE;
}
int main(int argc, char** argv)
{
	glutInit(&argc,argv);
	glutInitDisplayMode (GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB);
	glutInitWindowSize(windowSize, windowSize);
	glutInitWindowPosition(0,0);
	glutCreateWindow("Multisample Corruption (v2)");
    glutReshapeFunc(Resize);
    glutDisplayFunc(Render);

	InitScene();
	glutMainLoop();
}
示例#9
0
//********************************************************************
// 
//	Newton Tutorial 2 Using Callbacks
//
//********************************************************************
int main(int argc, char **argv)
{
	// initilize opengl	
	InitOpenGl (argc, argv, "Newton Tutotial 2: Using Callbacks", DrawScene);

	// create the physics scene
	InitScene();
	
	// Execute opengl main loop for ever
	glutMainLoop();   

	return 0;
} 
示例#10
0
bool GameScene_17::init()
{
	if (!CCLayer::init())
	{
		return false;
	}
	visibleSize = CCDirector::sharedDirector()->getVisibleSize();
	visibleOrigin = CCDirector::sharedDirector()->getVisibleOrigin();

	InitScene();

	return true;
}
示例#11
0
void __cdecl main()
{
    // Initialize Direct3D
    if( FAILED( InitD3D() ) )
        return;

    // Initialize the vertex buffer
    if( FAILED( InitScene() ) )
        return;

    InitTime();

	GameService::Initialize(
		FALSE,	// require online
		2,		// achievement count
		0,		// version id
		0,		// trial version
		TRUE	// dump log
#if defined(_PS3)
		, 5000	// free space available in KB for PS3
#endif
		);

    for(;;) // loop forever
    {
        // What time is it?
        UpdateTime();
        // Update the world
        Update();   

		GameService::Update();

#if defined(TRACKING_TEST)
		static int s_send = 0;
		static int s_level_id = 0;
		if (!s_send) // only send GAME_START tag once
		{
			s_send = 1;
			char tracking_attr[128];
			//char ls_reason[10];
			sprintf_s(tracking_attr, 128, "VERSION=%d&LICENSETYPE=%d&LANGUAGE=li", 13, 0);
			GameService::TrackingSendTag("GAME_START", tracking_attr);
		}
#endif

        // Render the scene
        Render();
    }

	GameService::Destroy();
}
示例#12
0
	void CTestScene::runThisScene( )
	{
		//show some effect

		InitScene();

		if (!Director::getInstance()->getRunningScene())
		{
			Director::getInstance()->runWithScene(this);
		}
		else
		{
			Director::getInstance()->replaceScene(this);
		}
	}
示例#13
0
 	void TEngine::LaunchRendering(const TGraphicsSettings& parContext)
 	{
 		ASSERT_MSG_NO_RELEASE(!FRenderingRunning, "Rendering already launched, it is just paused.");
 		TPipeline* pipeline = GenerateGraphicPipeline(m_scene, parContext.width, parContext.lenght, TPipelineConfig::MINIMAL );
 		FRenderer->CreateRenderWindow(parContext);
 		FRenderer->SetPipeline(pipeline);
 		InitScene();
#if __posix__
 		FThreadData = CREATE_THREAD(FTRenderingThread,CreateRenderingThread,FRenderer);
#elif WIN32
 		CREATE_THREAD(FTRenderingThread,CreateRenderingThread,FRenderer);
#endif
 		ENGINE_INFO("Redering thread created");
 		FRenderingRunning = true;
 		
 	}
示例#14
0
void SceneManager::CreateDevice(HWND hwnd,RECT rect)
{
   srand((unsigned)time(NULL));//初始化随机数生成器
   
   // Window initialization

   hdc = GetDC(hwnd);

   SetBestPixelFormat(hdc);
   
   hglrc = wglCreateContext(hdc);
   
   wglMakeCurrent(hdc, hglrc);
 
   InitScene(hwnd);//初始化场景

   soundengine = new SoundEngine(float(150) * 0.01f);
}
示例#15
0
void InitFramework (int *argc, char *argv[])
{
    glutInit (argc, argv);
    glutInitWindowPosition (0, 0);
    glutInitWindowSize (200, 200);
    glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow (argv[0]);
    glewInit();

    printf ("VENDOR: %s\n", glGetString (GL_VENDOR));
    printf ("RENDERER: %s\n", glGetString (GL_RENDERER));

    InitScene ();

    glutDisplayFunc (Display);
    glutIdleFunc (Idle);
    glutMainLoop ();
}
示例#16
0
int UpdateScreen(Screen *screen){
    SceneControl(screen);//デバッグ用
    if(screen->update_screen == NO_UPDATE_SCENE){
        return NOT_UPDATED;
    }
    if(IsChange(screen) == CHANGE_SCENE){//画面切り替えトリガ
        //画面遷移行う場合
        //>> screen->next_state = NEXT_SCENE_CODE
        if(ChangeState(screen) == INVALID_SCENE_STATUS){
            return SWITCH_FALED;
        }
        InitScene(screen);
        TransitionStart(screen);//遷移間フレーム未実装
        return SWITCH_SUCCESS;
    }
    Draw(screen);//描画
    return UPDATE_SUCCESS;
}
示例#17
0
int CArMaXCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (COleControl::OnCreate(lpCreateStruct) == -1)
		return -1;

	// Set pixel format
	m_hDC = ::GetDC(m_hWnd);
  if(SetWindowPixelFormat(m_hDC))
  {
    m_hRC = wglCreateContext(m_hDC);
    if(m_hRC)
      wglMakeCurrent (m_hDC, m_hRC);
    else
      return 0;
  }
  
  InitScene();
 
	return 0;
}
示例#18
0
//---------------------------------------
bool Mesh::Load( const char* filename )
{
	mName = filename;

	mScene = mImporter.ReadFile( filename,
		aiProcess_Triangulate | aiProcess_GenSmoothNormals | aiProcess_FlipUVs );

	if ( mScene )
	{
		if ( mScene->HasAnimations() )
		{
			mScene->mRootNode->mTransformation;
		}

		return InitScene( mScene, filename );
	}

	DebugPrintf( "Error loading Mesh: '%s': '%s'\n", filename, mImporter.GetErrorString() );
	return false;
}
bool EngineSystem::Init()
{
	do
	{
		// 是否显示帧率
		bool bShowFPS = false;
		VARIABLESYSTEM->GetVariable(VariableSystem::_TYPED_CONFIG_SYSTEM_, "SYS", "ShowFPS", bShowFPS);
		bool bResourceEncryptioned = true;
		VARIABLESYSTEM->GetVariable(VariableSystem::_TYPED_CONFIG_SYSTEM_, "SYS", "ResourceEncryptioned", bResourceEncryptioned);

		// 创建游戏导演类,并进行参数设计
		// 初始化全局的字体,字体大小等信息
		cocos2d::CCDirector* pDirector = cocos2d::CCDirector::sharedDirector();
		pDirector->setResEncryptioned(bResourceEncryptioned);
		pDirector->setResEncryptionedKey("com.cyou.mrd.yaojiimage87564");
		pDirector->setDefaultFontName("Heiti SC");
		pDirector->setDefaultMenuItemFontName("Heiti SC");
		pDirector->setDisplayStats(bShowFPS);
		pDirector->setAnimationInterval(1.0f/NinjiaTribeApp::get_instance2()->GetFPS());
		pDirector->setDefaultFontSize(20);
		pDirector->setDefaultMenuItemFontSize(22);
		pDirector->setProjection(cocos2d::kCCDirectorProjection2D);
		pDirector->registerMenuItemEventCallback(OnEngineMenuItemCallbackEventHandler);

		// 初始化场景对象
		InitScene();
		LoadSysResource();

		// 设置所有动画Sprite播放间隔
		float interval = 0.3f;
		VARIABLESYSTEM->GetVariable(VariableSystem::_TYPED_CONFIG_SYSTEM_, "SYS", "AnimationSpritePlayInterval", interval);
		pDirector->setAnimationSpritePlayInterval(interval);

		LOGGERSYSTEM->LogInfo("Init EngineSystem Success\n");
		return true;
	}
	while (false);

	LOGGERSYSTEM->LogFatal("Init EngineSystem Failed!!!\n");
	return false;
}
示例#20
0
文件: LAB7.cpp 项目: ntlone/Lab7
int main(int argc, char** argv)
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
	glutInitWindowSize(800, 600);
	glutCreateWindow("LAB 7");

	InitScene();

	glutDisplayFunc(Display);
	glutIdleFunc(Idle);
	glutReshapeFunc(Resize);
	glutMotionFunc(MouseMotion);
	glutMouseFunc(MouseButton);
	glutKeyboardFunc(Keyboard);



	glutMainLoop();

	return 0;
}
示例#21
0
		int WINAPI WinMain(HINSTANCE hInstance,
			HINSTANCE hPrevInstance,
			LPSTR lpCmdLine,
			int nShowCmd)
		{
			// Initialisiere und Registriere das Fenster.
			if (!InitializeWindow(hInstance, nShowCmd, Width, Height, true))
			{
				MessageBox(0, L"Window Initialization - Failed",
					L"Error", MB_OK);
				return 0;
			}
		
			//Initialisiere Direct3D
			if (!InitializeDirect3d11App(hInstance))
			{
				MessageBox(0, L"Direct3D Initialization - Failed",
					L"Error", MB_OK);
				return 0;
			}
		
			//Initialisiere die Szene
			if (!InitScene())
			{
				MessageBox(0, L"Scene Initialization - Failed",
					L"Error", MB_OK);
				return 0;
			}
		
			// im der messageloop() Schleife läuft das eigentliche Programm ab.
			messageloop();
		
			//Räume auf
			ReleaseObjects();
		
			return 0;
		
		}
示例#22
0
bool wd::Application::Initialize(
	const HINSTANCE& hInstance,
	const int& nCmdShow)
{
	// Init config file - get global settings.
	InitConfig();

	// Create OS window.
	if (!InitWindow(hInstance, nCmdShow))
		return false;

	// Create video device and context.
	if (!InitVideoDevice())
		return false;

	InitInput();
	// Show window. By now we should be able to show some sort of loading screen.
	m_pWindow->Show();
	// Create scene.
	InitScene();

	return true;
}
示例#23
0
int main(int argc, char **argv)
{
	if (argc != 2) {
		cout << "How to use: HTRViewer htrfile.htr\n";
		return 0;
	}

	string htrfile = argv[1];

	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
	glutInitWindowPosition(100,100);
	glutInitWindowSize(500,500);
	string windowName = "HTR Viewer " + htrfile;
	glutCreateWindow(windowName.c_str());

	// register all callbacks
	InitWindow();
	InitScene(htrfile.c_str());

	glutMainLoop();

	return(0);
}
示例#24
0
文件: main.cpp 项目: NickABoen/Awe
void CALLBACK OnD3D11FrameRender(ID3D11Device* d3dDevice, ID3D11DeviceContext* d3dDeviceContext, double time,
                                 float elapsedTime, void* userContext)
{
	D3DXVECTOR3 cubePos;

    if (gZeroNextFrameTime) {
        elapsedTime = 0.0f;
    }
    gZeroNextFrameTime = false;

    if (gD3DSettingsDlg.IsActive()) {
        gD3DSettingsDlg.OnRender(elapsedTime);
        return;
    }

    // Lazily create the application if need be
    if (!gApp) {
        InitApp(d3dDevice);
    }

    // Lazily load scene
	/*!gMeshOpaque.IsLoaded() && !gMeshAlpha.IsLoaded() &&!gMeshOpaque2.IsLoaded()*/
    if (!sceneGraph.IsLoaded()) {
        InitScene(d3dDevice);
    }
	if(PXEngine)
	{
		for(int i = 0; i < cubeList->size(); i++)
		PXEngine->StepPhysX();
		if(cubeList)
		{
			for(int i = 0; i < cubeList->size(); i++)
			{
				if((*cubeList)[i]->id<0)
				{
					sceneGraph.SetInstancePosition(1,(*cubeList)[i]->id, (*cubeList)[i]->x, (*cubeList)[i]->y, (*cubeList)[i]->z);
				}
				else
				{
					sceneGraph.SetMeshPosition(0,(*cubeList)[i]->id, (*cubeList)[i]->x, (*cubeList)[i]->y, (*cubeList)[i]->z);
				}
			}
		}
	}

	//crosshair
	D3DRECT rec2 = {screenCenterX-20, screenCenterY, screenCenterX + 20, screenCenterY + 2};
	D3DRECT rec3 = {screenCenterX, screenCenterY - 20, screenCenterX + 2, screenCenterY + 20};

    ID3D11RenderTargetView* pRTV = DXUTGetD3D11RenderTargetView();
	
    
    D3D11_VIEWPORT viewport;
    viewport.Width    = static_cast<float>(DXUTGetDXGIBackBufferSurfaceDesc()->Width);
    viewport.Height   = static_cast<float>(DXUTGetDXGIBackBufferSurfaceDesc()->Height);
    viewport.MinDepth = 0.0f;
    viewport.MaxDepth = 1.0f;
    viewport.TopLeftX = 0.0f;
    viewport.TopLeftY = 0.0f;
	screenCenterX = viewport.Width / 2;
	screenCenterY = viewport.Height / 2;

	gViewPort.Width = viewport.Width;
	gViewPort.Height = viewport.Height;
	gViewPort.MaxZ = viewport.MaxDepth;
	gViewPort.MinZ = viewport.MinDepth;
	gViewPort.X = viewport.TopLeftX;
	gViewPort.Y = viewport.TopLeftY;


		 gApp->Render(d3dDeviceContext, pRTV, sceneGraph, gSkyboxSRV,
        gWorldMatrix, &gViewerCamera, &viewport, &gUIConstants);
	
		 
		 sceneGraph.SetMeshPosition(0,1, 100000, 100000, 100000);
    if (gDisplayUI) {
        d3dDeviceContext->RSSetViewports(1, &viewport);

        // Render HUDs in reverse order
        d3dDeviceContext->OMSetRenderTargets(1, &pRTV, 0);
        for (int i = HUD_NUM - 1; i >= 0; --i) {
            gHUD[i].OnRender(elapsedTime);
        }

        // Render text
        gTextHelper->Begin();

        gTextHelper->SetInsertionPos(2, 0);
        gTextHelper->SetForegroundColor(D3DXCOLOR(1.0f, 1.0f, 0.0f, 1.0f));
        gTextHelper->DrawTextLine(DXUTGetFrameStats(DXUTIsVsyncEnabled()));
        //gTextHelper->DrawTextLine(DXUTGetDeviceStats());

        // Output frame time
        {
            std::wostringstream oss;
            oss << 1000.0f / DXUTGetFPS() << " ms / frame";
            gTextHelper->DrawTextLine(oss.str().c_str());
        }

        // Output light info
        {
            std::wostringstream oss;
            oss << "Lights: " << gApp->GetActiveLights();
            gTextHelper->DrawTextLine(oss.str().c_str());
        }
        
        gTextHelper->End();
    }
	
}
int App::Run()
{
    int r(0);

    // somebody must attach a worker
    BOOST_ASSERT( m_Worker);

    int width(640);
    int height(480);
    SDL_Surface *screen;
    screen = SDL_SetVideoMode(width, height, 32, SDL_OPENGL|SDL_RESIZABLE);
    if (screen == NULL)
    {
        THROW("Unable to set %dx%d video! SDL Error: %s\n", width, height, SDL_GetError());
    }

    Renderer* renderer = dynamic_cast<Renderer*>(m_Worker.get());
    BOOST_ASSERT(renderer);
    renderer->Init();

    InitScene( renderer, width, height );

    // Run our worker thread
    boost::thread worker(boost::bind(&Worker::Run, m_Worker));

    bool running(true);
    SDL_Event event;
    do
    {
        int eventsPending(0);
        SDL_WaitEvent(&event);
        do
        {
            bool processed( renderer->HandleEvent( event ) );
            for ( auto entity = m_EventHandlerList.begin();
                       entity != m_EventHandlerList.end() && !processed; )
            {
                processed |= (*entity)->HandleEvent(event);
                if (processed)
                {
                    break;
                }
                // Remove from event handler as well if marked for deletion
                if ( (*entity)->AreFlagsSet( Entity::F_DELETE ) ) {
                    entity = m_EventHandlerList.erase( entity );
                    continue;
                }
                ++entity;
            }
            if (!processed)
            {

                switch (event.type)
                {
                case SDL_KEYDOWN:
                    switch (event.key.keysym.sym)
                    {
                    case SDLK_ESCAPE:
                        running = false;
                        break;
                    default:
                        break;
                    }
                    printf("The %s key was pressed!\n",
                            SDL_GetKeyName(event.key.keysym.sym));
                    break;
                case SDL_QUIT:
                    running = false;
                    break;
                }
            }
            if (running)
            {
                eventsPending = SDL_PollEvent(&event);
            }
        } while (eventsPending > 0 && running);
    } while (running);

    // Remove all instances to Entities in the event handler list
    m_EventHandlerList.clear();

    // terminate worker
    m_Worker->Terminate();
    worker.join();

    return r;
}
示例#26
0
LRESULT CGameApp::InitGame()
{
	if(S_OK!=InitDInput())	return E_FAIL;
	if(S_OK!=InitD3D())		return E_FAIL;

	HFONT hOldFont, hNewFont;
	// 创建逻辑字体hLeftFont,用于显示加载界面
	hNewFont = CreateFont(32, 0, 0, 0, FW_BOLD, 0, 0, 0, ANSI_CHARSET, 0, 0, 0, 0, "Comic Sans MS");;
	HDC hwndDC=GetDC(m_hwnd);
	hOldFont=(HFONT)SelectObject(hwndDC,hNewFont);
	SetTextColor(hwndDC, RGB(255, 255, 0));
	RECT rectRange;
	GetClientRect(m_hwnd,&rectRange); 
	HDC dcMem=CreateCompatibleDC(hwndDC);
	HBITMAP bmpMem=(HBITMAP)LoadImage(NULL,"logo.bmp",IMAGE_BITMAP,
									  rectRange.right-rectRange.left ,
									  rectRange.bottom-rectRange.top,
									  LR_LOADFROMFILE);
	SelectObject(dcMem,bmpMem);
	BitBlt(hwndDC,rectRange.left,rectRange.top,rectRange.right,rectRange.bottom,dcMem,0,0,SRCCOPY);  
	SetBkMode(hwndDC,TRANSPARENT); 
	int x = (rectRange.left + rectRange.right)/2 - 150;
	int y = 5;
	TextOut(hwndDC,x,y,"正在加载文件,请稍候...\n",23);

	TCHAR szDriver[5];
	TCHAR szDir[_MAX_PATH];
	::GetModuleFileName(NULL, m_szWorkDir, sizeof(m_szWorkDir)/sizeof(TCHAR));
	_tsplitpath(m_szWorkDir, szDriver, szDir, NULL, NULL);
	_tcscpy(m_szWorkDir, szDriver);
	_tcscat(m_szWorkDir, szDir);

	m_Reader.SetWorkDir(m_szWorkDir);
	m_Reader.SetMapFile("config\\map.cfg");
	m_Reader.SetPosFile("config\\position.cfg");
	m_Reader.SetTourFile("config\\tour.cfg");
	m_Reader.SetRoadFile("config\\road.cfg");
	m_Reader.LoadAll();

	if(S_OK!=InitScene())	return E_FAIL; 

	//释放临时的GDI对象
	SelectObject(hwndDC,hOldFont);
	DeleteObject(hNewFont);
	DeleteObject(bmpMem);
	DeleteObject(dcMem);
	DeleteObject(hwndDC);
	
	RECT rt;
	::GetClientRect(m_hwnd, &rt);
	rt.left += 40;
	rt.right = rt.left + 140;
	rt.top += 10;
	rt.bottom = rt.top + 40;
	m_pStopWatch = new CStopWatch(m_pD3DDevice, FALSE);
	m_pStopWatch->SetPosition(rt);
	_tcscpy(szDir, m_szWorkDir);
	_tcscat(szDir, m_Reader.m_szStopWatch);
	m_pStopWatch->SetTexture(szDir);
	m_pStopWatch->Start(game_time);

	::SendMessage(m_hwnd, MSG_GAME_NEW, 0, 0);
	return D3D_OK;
} 
示例#27
0
NAMESPACE_BEGIN

Renderer::Renderer(const String& basePath, const String& prefPath,
                   Input* inputMgr, const String& windowTitle)
    : mInputMgr(inputMgr),
      mWindow(nullptr),
	  mLogManager(nullptr),
	  mLog(nullptr),
	  mRoot(nullptr),
      mSceneManager(nullptr),
	  mRootNode(nullptr),
      mRenderWindow(nullptr),
      mViewport(nullptr),
      mDefaultCamera(nullptr),
      mRaySceneQuery(nullptr),
	  mRenderSystemPlugin(nullptr),
	  mParticleUniversePlugin(nullptr),
      mRTRoot(nullptr),
      mRTRootPosition(Position::origin)
{
    // Read config file
    Vec2i displayMode = Config::Get<Vec2i>("displaymode", Vec2i(1280, 800));
    bool fullscreen = Config::Get<bool>("fullscreen", false);
    bool vsync = Config::Get<bool>("vsync", true);

    // Set up Ogre's log manager
    mLogManager = new Ogre::LogManager();
    mLog = mLogManager->createLog(prefPath + "ogre.log", true, false, false);

    // Create the Ogre root
    mRoot = new Ogre::Root("", "");
    LOG << "Created Ogre Root";
    LOG << "\tVersion: " << OGRE_VERSION_MAJOR << "." << OGRE_VERSION_MINOR << "."
                << OGRE_VERSION_PATCH << " " << OGRE_VERSION_NAME;

    // PLUGIN STAGE
    LoadPlugins();

    // Set the render system to the first available renderer
    if (mRoot->getAvailableRenderers().empty())
    {
        // TODO: THIS SHOULD NEVER HAPPEN
        assert(0);
    }
    mRoot->setRenderSystem(mRoot->getAvailableRenderers().front());

    // WINDOW CREATION STAGE

    // Window options
    Ogre::NameValuePairList options;
    options["vsync"] = vsync ? "true" : "false";
    options["gamma"] = "true";
    options["title"] = windowTitle;
    CreateSDLWindow(windowTitle, displayMode, fullscreen, options);

    // Initialise Ogre and use the SDL window
    mRoot->initialise(false, "", "");
    mRenderWindow = mRoot->createRenderWindow(windowTitle, displayMode.x, displayMode.y, fullscreen, &options);
    mRenderWindow->setVisible(true);

    // OGRE IS NOW READY, SET UP THE SCENE
	InitResources(basePath);
    InitScene();

    // Set up the raycast query object
    mRaySceneQuery = mSceneManager->createRayQuery(Ogre::Ray(), Ogre::SceneManager::WORLD_GEOMETRY_TYPE_MASK);
    mRaySceneQuery->setSortByDistance(true);
    mRaySceneQuery->setQueryMask(UNIVERSE_OBJECT);

    // Set up the deferred shading system
    mDeferredShadingMgr = new DeferredShadingManager(mViewport, mSceneManager);

    // Set up post processing
    mHDRComp = Ogre::CompositorManager::getSingleton().addCompositor(mViewport, "HDR");
    mBlurComp = Ogre::CompositorManager::getSingleton().addCompositor(mViewport, "GaussianBlur");
    mHDRComp->setEnabled(true);
    //mBlurComp->setEnabled(true);

    // Set up the sprite manager
    mSpriteManager = new SpriteManager(mViewport, mSceneManager);

    // Set up the root scene nodes
    mRootNode = mSceneManager->getRootSceneNode();
    mRTRoot = mRootNode->createChildSceneNode();

    // Add event delegates
    ADD_LISTENER(Renderer, EvtData_KeyDown);
}
示例#28
0
//*************************************************************************************************************
int main(int argc, char* argv[])
{
	LARGE_INTEGER qwTicksPerSec = { 0, 0 };
	LARGE_INTEGER qwTime;
	LONGLONG tickspersec;
	double last, current;
	double delta, accum = 0;

	WNDCLASSEX wc =
	{
		sizeof(WNDCLASSEX),
		CS_CLASSDC,
		(WNDPROC)WndProc,
		0L,
		0L,
		GetModuleHandle(NULL),
		NULL,
		LoadCursor(0, IDC_ARROW),
		NULL, NULL, "TestClass", NULL
	};

	RegisterClassEx(&wc);
	SystemParametersInfo(SPI_GETWORKAREA, 0, &workarea, 0);
	
	RECT rect = { 0, 0, screenwidth, screenheight };
	DWORD style = WS_CLIPCHILDREN|WS_CLIPSIBLINGS;

	memset(&devmode, 0, sizeof(DEVMODE));

	devmode.dmSize			= sizeof(DEVMODE);
	devmode.dmBitsPerPel	= 32;
	devmode.dmPelsWidth		= screenwidth;
	devmode.dmPelsHeight	= screenheight;
	devmode.dmFields		= DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;

	style |= WS_SYSMENU|WS_BORDER|WS_CAPTION|WS_MINIMIZEBOX;
	Adjust(rect, screenwidth, screenheight, style, true);
	
	hwnd = CreateWindowA("TestClass", TITLE, style,
		rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top,
		NULL, NULL, wc.hInstance, NULL);
	
	if( !hwnd )
	{
		MYERROR("Could not create window");
		goto _end;
	}

	if( !InitGL(hwnd) )
	{
		MYERROR("Failed to initialize OpenGL");
		goto _end;
	}
	
	if( !InitScene() )
	{
		MYERROR("Failed to initialize scene");
		goto _end;
	}
	
	ShowWindow(hwnd, SW_SHOWDEFAULT);
	UpdateWindow(hwnd);

	MSG msg;
	ZeroMemory(&msg, sizeof(msg));

	POINT p;
	GetCursorPos(&p);
	ScreenToClient(hwnd, &p);
	
	QueryPerformanceFrequency(&qwTicksPerSec);
	tickspersec = qwTicksPerSec.QuadPart;

	QueryPerformanceCounter(&qwTime);
	last = (double)qwTime.QuadPart / (double)tickspersec;

	while( msg.message != WM_QUIT )
	{
		QueryPerformanceCounter(&qwTime);

		current = (double)qwTime.QuadPart / (double)tickspersec;
		delta = (current - last);

		last = current;
		accum += delta;

		mousedx = mousedy = 0;

		while( accum > 0.1f )
		{
			accum -= 0.1f;

			while( PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE) )
			{
				TranslateMessage(&msg);
				DispatchMessage(&msg);
			}

			Update(0.1f);
		}

		if( msg.message != WM_QUIT )
			Render((float)accum / 0.1f, (float)delta);
	}

_end:
	UninitGL();
	std::cout << "Exiting...\n";

	UnregisterClass("TestClass", wc.hInstance);
	_CrtDumpMemoryLeaks();

#ifdef _DEBUG
	//system("pause");
#endif

	return 0;
}
// Initializes OpenGL rendering context. If succeeds, returns true.
// hInstance - application instance
// a_hWnd - window to init OpenGL into
// a_initScene - pointer to init function
// a_renderScene - pointer to render function
// a_releaseScene - optional parameter of release function
bool COpenGLControl::InitOpenGL(HINSTANCE hInstance, HWND* a_hWnd, void (*a_InitScene)(LPVOID), void (*a_RenderScene)(LPVOID), void(*a_ReleaseScene)(LPVOID), LPVOID lpParam)
{
	if(!InitGLEW(hInstance))return false;

	hWnd = a_hWnd;
	hDC = GetDC(*hWnd);

	bool bError = false;
	PIXELFORMATDESCRIPTOR pfd;

	// if we have access to these functions
	if(WGLEW_ARB_create_context && WGLEW_ARB_pixel_format)
	{
		const int iPixelFormatAttribList[] =
		{
			WGL_DRAW_TO_WINDOW_ARB, GL_TRUE,
			WGL_SUPPORT_OPENGL_ARB, GL_TRUE, // Enable OpenGL support
			WGL_DOUBLE_BUFFER_ARB, GL_TRUE,  // and double buffer
			WGL_PIXEL_TYPE_ARB, WGL_TYPE_RGBA_ARB,
			WGL_COLOR_BITS_ARB, 32,
			WGL_DEPTH_BITS_ARB, 24, // Depth buffer size
			WGL_STENCIL_BITS_ARB, 8,
			0 // End of attributes list
		};
		int iContextAttribs[] =
		{
			WGL_CONTEXT_MAJOR_VERSION_ARB, 3, // OpenGL 
			WGL_CONTEXT_MINOR_VERSION_ARB, 3, // version 3.3
			WGL_CONTEXT_FLAGS_ARB, WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB,
			0 // End of attributes list
		};

		int iPixelFormat, iNumFormats;
		wglChoosePixelFormatARB(hDC, iPixelFormatAttribList, NULL, 1, &iPixelFormat, (UINT*)&iNumFormats);

		// PFD seems to be only redundant parameter now
		if(!SetPixelFormat(hDC, iPixelFormat, &pfd))return false;

		hRC = wglCreateContextAttribsARB(hDC, 0, iContextAttribs);
		// If everything went OK
		if(hRC) wglMakeCurrent(hDC, hRC);
		else bError = true;

	}
	else bError = true;
	
	if(bError)
	{
		// Generate error messages
		char sErrorMessage[255], sErrorTitle[255];
		sprintf(sErrorMessage, "OpenGL 3.3 is not supported! Please download latest GPU drivers!");
		sprintf(sErrorTitle, "OpenGL 3.3 Not Supported");
		MessageBox(*hWnd, sErrorMessage, sErrorTitle, MB_ICONINFORMATION);
		return false;
	}

	RenderScene = a_RenderScene;
	InitScene = a_InitScene;
	ReleaseScene = a_ReleaseScene;

	if(InitScene != NULL)InitScene(lpParam);

	return true;
}
示例#30
0
int main(int argc, char *argv[])
{
  string inputSkeleton;
  string inputMotion;
  SMRMotion motion;

  ParamHandler argh;
  argh.AddLong("motion", 'm').SetString().SetDesc("input motion file" , "<file>");
  argh.AddLong("skeleton", 's').SetString().SetDesc("input skeleton file" , "<file>");
  argh.AddLong("help", 'h').SetBool().SetDesc("Displays quick manual.");

  argh.StartParse(argc, argv);
  for(;;)
  {
    int c = argh.GetParam();
    if(c == -1)break;
    switch(c)
    {
    case 's': inputSkeleton = argh.GetString(); break;//worst = argh.GetBool(); break;
    case 'm': inputMotion = argh.GetString(); break;
    default :
      printf(
        "*** SMR simple viewer demo ***\n"
        "\n Usage: motionPlayer [<option> [<...>]] \n"
        "\n This demo lets you play bvh or asf/amc animations\n");
      argh.ListOptions();
      printf("\nNo warranty whatsoever.\n");
      return 0;
    }
  }

  if (inputMotion.find(".amc",0) !=  string::npos )
  {
    if (inputSkeleton.find(".asf") == string::npos )
    {
      cout << "You shall specify an asf skeleton file with an amc file" << endl;
      return 0;
    }else
    {
      motion = loadMotionFromAcclaim( getFileName(inputSkeleton), getFileName(inputMotion) );
      myMotionPlayer = new SMRMotionPlayer( &motion );
    }
  }else if (inputMotion.find(".bvh",0) !=  string::npos )
  {
    motion = loadMotionFromBVH( getFileName(inputMotion) );
    myMotionPlayer = new SMRMotionPlayer( &motion );
  }else if (inputSkeleton.find(".vsk",0) !=  string::npos )
  {
    motion = loadMotionFromVSK( inputSkeleton, inputMotion);
    myMotionPlayer = new SMRMotionPlayer( &motion );
    //SMRSkeleton mySkeleton = loadSkeletonFromVSK(inputSkeleton);
    //SMRQuaternion identity;
    //identity.identity();
    //for(int i = 0; i< mySkeleton.getNumJoints(); i++)
    //{
    //  mySkeleton.getJoint(i)->setOrientation(identity);
    //}
    //save the file as bvh

    //exportMotionToBVH("shrug.bvh",motion, mySkeleton);
    //
    //exportPoseToBVH("blah.bvh", mySkeleton);
    //mySkeleton.setMode(RELATIVEMODE);
  }
  else
  {
    cout << "unknown file format" << endl;
    return 0;
  }

  // get GLUT to work
  InitializeGlut(&argc, argv);
  // Init the Smr Library
  Smr::initSmr();
  // Init the shaders capability
  InitShaders();
  // Get my scene prepared
  InitScene();
  // Enter the endless loop
  glutMainLoop();
  // Exit properly
  ShutDown();
  //delete(motion);
  return 0;
}