示例#1
0
void CGLWidget::resizeGL(int width, int height)
{
	cx = width;
	cy = height;

	glViewport( 0, 0, cx, cy); 

	//3d camera
	OGL3DCamera* camera = &(APPMNGR.GetState()->GetCamera());
	OVector4 persp = camera->GetPerspective();
	persp[3] = (cx + 0.0f) / (cy + 0.0f);
	camera->SetPerspective(persp);

	 //
	camera->SwitchToOrthoProjection(OVector4(-cx / 2, cx / 2, -cy / 2, cy / 2));
}
示例#2
0
OQuaternion OQuaternion::Transpose()
{
    OQuaternion qr(OVector4((-1.0f) * V3(), w_));
	return qr;
}
示例#3
0
OQuaternion OQuaternion::Invert()
{
    OQuaternion qr(OVector4((-1.0f) * V3(), w_));
	qr = OVector4(qr) * (1.0f / OVector4(*this).Dot(OVector4(*this)));
	return qr;
}
示例#4
0
void DemoApplication::init()
{
	/* set camera movement keys */
	_camCtrl.setMoveEventKey(OKeyboardPressEvent::OKey_a, OCameraController::MoveLeft);
	_camCtrl.setMoveEventKey(OKeyboardPressEvent::OKey_s, OCameraController::MoveBack);
	_camCtrl.setMoveEventKey(OKeyboardPressEvent::OKey_d, OCameraController::MoveRight);
	_camCtrl.setMoveEventKey(OKeyboardPressEvent::OKey_w, OCameraController::MoveForward);
	_camCtrl.setMoveEventKey(OKeyboardPressEvent::OKey_q, OCameraController::MoveUp);
	_camCtrl.setMoveEventKey(OKeyboardPressEvent::OKey_e, OCameraController::MoveDown);
	
	/* subscribe to keyboard event */
	addEventRecipient(OEvent::KeyboardPressEvent, this);

	/* text */
	_fontCourier = new OFont("cour.ttf");
	_title = new OText2D(_fontCourier, 12, -1.0f, -0.95f, OVector4(0.0f, 1.0f, 0.0f, 1.0f));
	_title->setContent("Osiris Framework");
	_fpsText = new OText2D(_fontCourier, 12, 0.55f, -0.95f, OVector4(0.0f, 1.0f, 0.0f, 1.0f));
	_perfText = new OText2D(_fontCourier, 12, 0.55f, -0.90f, OVector4(0.0f, 1.0f, 0.0f, 1.0f));
	_idleText = new OText2D(_fontCourier, 12, 0.55f, -0.85f, OVector4(0.0f, 1.0f, 0.0f, 1.0f));
	_renderText = new OText2D(_fontCourier, 12, 0.55f, -0.80f, OVector4(0.0f, 1.0f, 0.0f, 1.0f));
	_cameraText = new OText2D(_fontCourier, 12, -1.0f, 0.90f, OVector4(0.0f, 1.0f, 0.0f, 1.0f));

	/* setting up the cube */
	OVertexColorMesh *cube = new OVertexColorMesh();
	cube->addVertexData(-0.5f, -0.5f, -0.5f);
	cube->addVertexData(-0.5f, -0.5f, 0.5f);
	cube->addVertexData(-0.5f, 0.5f, -0.5f);
	cube->addVertexData(-0.5f, 0.5f, 0.5f);
	cube->addVertexData(0.5f, -0.5f, -0.5f);
	cube->addVertexData(0.5f, -0.5f, 0.5f);
	cube->addVertexData(0.5f, 0.5f, -0.5f);
	cube->addVertexData(0.5f, 0.5f, 0.5f);

	cube->addVertexColorData(1.0f, 0.0f, 0.0f, 1.0f);
	cube->addVertexColorData(0.0f, 1.0f, 0.0f, 1.0f);
	cube->addVertexColorData(0.0f, 0.0f, 1.0f, 1.0f);
	cube->addVertexColorData(1.0f, 0.0f, 0.0f, 1.0f);
	cube->addVertexColorData(0.0f, 1.0f, 0.0f, 1.0f);
	cube->addVertexColorData(0.0f, 0.0f, 1.0f, 1.0f);
	cube->addVertexColorData(1.0f, 0.0f, 0.0f, 1.0f);
	cube->addVertexColorData(0.0f, 1.0f, 0.0f, 1.0f);

	cube->addIndexData(0, 4, 1);
	cube->addIndexData(1, 2, 0);
	cube->addIndexData(1, 4, 5);
	cube->addIndexData(1, 7, 3);
	cube->addIndexData(2, 4, 0);
	cube->addIndexData(2, 7, 6);
	cube->addIndexData(3, 2, 1);
	cube->addIndexData(3, 7, 2);
	cube->addIndexData(4, 7, 5);
	cube->addIndexData(5, 7, 1);
	cube->addIndexData(6, 4, 2);
	cube->addIndexData(6, 7, 4);

	cube->setFaceCulling(true, OMesh::CullFace_Front, OMesh::CullFront_CW);

	cube->init();
	_cube = cube;


	/* setting up Torus */
	OVertexColorMesh* torus = new OVertexColorMesh();
	OWavefrontObjectFile torusFile("Meshes/TestTorus.mesh.obj");
	int objectCount=0;
	const char **objectList = torusFile.objectList(&objectCount);
	if (objectCount > 0) torusFile.loadMesh(objectList[0], torus);

	for (int i = 0; i < torus->vertexCount(); i++) {
		OVector3 v = torus->vertexData(i);
		torus->addVertexColorData(fabs(v.x()), fabs(v.y()), fabs(v.z()), 1);
	}
	torus->init();
	_torus = torus;

	/* camera */
	camera()->setCameraLimits(1.0f, 10.0f);
	camera()->setPosition(OVector3(0.0f, 0.0f, 3.0f));
	camera()->setOrientation(OVector3(0.0f, 0.0f, 0.0f));

	_movRadiusA = 1.0f;
	_movRadiusB = 1.0f;
	_thetaA = 0;
	_thetaB = PI;
	_periodA = 6.0f;
	_periodB = 6.0f;

	_pauseFlag = false;
	_last_timeIndex = OTimeIndex::current();
}