Пример #1
0
void GLWidget::stopPhysics()
{
#if DRGDRW
    disconnect(internalTimer(), SIGNAL(timeout()), this, SLOT(simulate()));
#else
    disconnect(internalTimer(), SIGNAL(timeout()), m_thread, SLOT(simulate()));
    disconnect(m_thread, SIGNAL(doneStep()), this, SLOT(update()));
#endif
    connect(internalTimer(), SIGNAL(timeout()), this, SLOT(update()));
    m_isPhysicsRunning = false;
}
Пример #2
0
void GLWidget::clientInit()
{
	CudaBase::SetDevice();
	
	m_solver->initOnDevice();

#if SIMULATE_INLINE	
	connect(internalTimer(), SIGNAL(timeout()), this, SLOT(update()));
#else
	connect(internalTimer(), SIGNAL(timeout()), m_solver, SLOT(simulate()));
	connect(m_solver, SIGNAL(doneStep()), this, SLOT(update()));
	disconnect(internalTimer(), SIGNAL(timeout()), this, SLOT(update()));
#endif
}
Пример #3
0
void GLWidget::clientDraw()
{ 
#if SIMULATE_INLINE
    if(internalTimer()->isActive()) m_solver->stepPhysics(1.f / 60.f);
#endif    
    // m_dbgDraw->printTOI(m_solver->narrowphase(), m_solver->hostPairs());
	// m_dbgDraw->printContactPairHash(m_contactSolver, m_narrowphase->numContacts());
	m_solver->tetra()->sendXToHost();
	m_solver->tetra()->sendVToHost();
	m_dbgDraw->drawTetra((TetrahedronSystem *)m_solver->tetra());
	// m_dbgDraw->drawTetraAtFrameEnd((TetrahedronSystem *)m_solver->tetra());
	m_dbgDraw->drawSeparateAxis(m_solver->narrowphase(), m_solver->hostPairs(), (TetrahedronSystem *)m_solver->tetra());
	bool chk = m_dbgDraw->checkConstraint(m_solver->contactSolver(), m_solver->narrowphase(), (TetrahedronSystem *)m_solver->tetra());
	
	if(!chk) internalTimer()->stop();
    //else internalTimer()->start(100);
}
Пример #4
0
void GLWidget::startPhysics()
{
#if DRGDRW
    connect(internalTimer(), SIGNAL(timeout()), this, SLOT(simulate()));
#else
    connect(this, SIGNAL(updatePhysics()), m_thread, SLOT(simulate()));
    connect(m_thread, SIGNAL(doneStep()), this, SLOT(update()));
#endif
    m_isPhysicsRunning = true;
}
Пример #5
0
GLWidget::GLWidget(QWidget *parent) : Base3DView(parent)
{
	perspCamera()->setFarClipPlane(10000.f);
	perspCamera()->setNearClipPlane(1.f);
	orthoCamera()->setFarClipPlane(10000.f);
	orthoCamera()->setNearClipPlane(1.f);
    connect(internalTimer(), SIGNAL(timeout()), this, SLOT(update()));
    m_world = new AdeniumWorld;
    AdeniumInterface adei;
    adei.create(m_world);
}
Пример #6
0
void GLWidget::keyPressEvent(QKeyEvent *event)
{
	switch (event->key()) {
		case Qt::Key_A:
			break;
		case Qt::Key_D:
			break;
		case Qt::Key_W:
#if SIMULATE_INLINE
            internalTimer()->stop();
#else
			disconnect(internalTimer(), SIGNAL(timeout()), m_solver, SLOT(simulate()));
			connect(internalTimer(), SIGNAL(timeout()), this, SLOT(update()));
#endif
			break;
		case Qt::Key_S:
#if SIMULATE_INLINE
            internalTimer()->start();
#else
			disconnect(internalTimer(), SIGNAL(timeout()), this, SLOT(update()));
			connect(internalTimer(), SIGNAL(timeout()), m_solver, SLOT(simulate()));
#endif
			break;
		default:
			break;
	}
	
	Base3DView::keyPressEvent(event);
}
Пример #7
0
void GLWidget::keyPressEvent(QKeyEvent *event)
{
	switch (event->key()) {
		case Qt::Key_A:
			m_displayLevel++;
			m_drawBvh->addDispalyLevel();
			break;
		case Qt::Key_D:
			m_displayLevel--;
			m_drawBvh->minusDispalyLevel();
			break;
		case Qt::Key_W:
			internalTimer()->stop();
			break;
		case Qt::Key_S:
			internalTimer()->start();
			break;
		default:
			break;
	}
	
	Base3DView::keyPressEvent(event);
}
Пример #8
0
void GLWidget::clientInit()
{
	CudaBase::SetDevice();
	m_mesh->initOnDevice();
	m_particles->initOnDevice();
	m_solver->setMesh(m_mesh);
	m_ray->createRays(IRAYDIM, IRAYDIM);
	m_solver->setRay(m_ray);
	m_solver->setParticleSystem(m_particles);
	
#ifdef BVHSOLVER_DBG_DRAW	
	CudaLinearBvh * bvh = m_mesh->bvh();
	qDebug()<<" bvh used memory "<<bvh->usedMemory()<<" bytes";
	m_displayLeafAabbs = new BaseBuffer;
	m_displayLeafAabbs->create(bvh->numLeafNodes() * sizeof(Aabb));
	m_displayInternalAabbs = new BaseBuffer;
	m_displayInternalAabbs->create(bvh->numInternalNodes() * sizeof(Aabb));
	m_displayLeafHash = new BaseBuffer;
	m_displayLeafHash->create(bvh->numLeafNodes() * sizeof(KeyValuePair));
	m_displayInternalDistance = new BaseBuffer;
	m_displayInternalDistance->create(bvh->numInternalNodes() * sizeof(int));
	m_internalChildIndices = new BaseBuffer;
	m_internalChildIndices->create(bvh->numInternalNodes() * sizeof(int2));
	m_rootNodeInd = new int[1];
	m_solver->setHostPtrs(m_displayLeafAabbs,
                m_displayInternalAabbs,
                m_displayInternalDistance,
                m_displayLeafHash,
                m_internalChildIndices,
                m_rootNodeInd);
#endif

    m_tetra->initOnDevice();
	m_tetra->update();
	m_broadphase->initOnDevice();
	
	m_broadphase->computeOverlappingPairs();
	m_drawBvh->printPairCounts();
	
	// connect(internalTimer(), SIGNAL(timeout()), m_solver, SLOT(simulate()));
	// connect(m_solver, SIGNAL(doneStep()), this, SLOT(update()));
	connect(internalTimer(), SIGNAL(timeout()), this, SLOT(update()));
}
Пример #9
0
void GLWidget::clientInit()
{
	connect(internalTimer(), SIGNAL(timeout()), this, SLOT(update()));
}