Пример #1
0
//-----------------------------------------------------------------------------update modelview
void Camera::updateModelView(){
	float mv[16];
	getModelView(mv);
	
	glMatrixMode(GL_MODELVIEW);
	glLoadMatrixf(mv);
}
Пример #2
0
/**
 * drawLives
 * Zeichnen der verlorenen Leben.
 */
void
GameWorld::drawLives() {
	int deaths = 3-gameState->getLives();

	if(deaths <= 3 && deaths > 0) {

		CMatrix * modelview = getModelView();

		modelview->Push();
		modelview->Rotate(-PI/2,1,0,0);
		modelview->Translate(-2.0,4.2,0.0);

		for(int i=0; i < deaths; i++) {
			ModelContainer::getContainer()->drawModel(modelX);
			modelview->Translate(0.15,0.0,0.0);
		}

		modelview->Pop();

		/*
		glPushMatrix();
		glTranslatef(-1.0,2.2,0.0);
		glRotatef(-90,1,0,0);
		for(int i=0; i < deaths; i++) {
			ModelContainer::getContainer()->drawModel(modelX);
			glTranslatef(0.15,0.0,0.0);
		}
		glPopMatrix();
		*/
	}
}
Пример #3
0
/**
 * drawCombo
 * Zeichnen der Anzeige der vom Spieler erzielten Combo.
 */
void GameWorld::drawCombo() {
	if (this->gameMode->hasCombo() > 0) {

		CMatrix * modelview = getModelView();

		for (int i = 0; i < this->gameMode->hasCombo(); ++i) {

			modelview->Push();
			modelview->Rotate(-PI/2,1,0,0);
			modelview->Translate(1.6-0.1*i,4.32,0.0);

			ModelContainer::getContainer()->drawModel(modelChili);

			modelview->Pop();


		/*
			glPushMatrix();
				glTranslatef(0.6-0.1*i,2.32,0.0);
				glRotatef(-90,1,0,0);
				ModelContainer::getContainer()->drawModel(modelChili);
			glPopMatrix();
		*/
		}
	}
}
Пример #4
0
void Renderer::visitRenderQueue(const RenderQueue& queue)
{
    ssize_t size = queue.size();
    
    for (ssize_t index = 0; index < size; ++index)
    {
        auto command = queue[index];
        auto commandType = command->getType();
        if(RenderCommand::Type::QUAD_COMMAND == commandType)
        {
            auto cmd = static_cast<QuadCommand*>(command);
            //Batch quads
            if(_numQuads + cmd->getQuadCount() > VBO_SIZE)
            {
                CCASSERT(cmd->getQuadCount()>= 0 && cmd->getQuadCount() < VBO_SIZE, "VBO is not big enough for quad data, please break the quad data down or use customized render command");
                
                //Draw batched quads if VBO is full
                drawBatchedQuads();
            }
            
            _batchedQuadCommands.push_back(cmd);
            
            memcpy(_quads + _numQuads, cmd->getQuads(), sizeof(V3F_C4B_T2F_Quad) * cmd->getQuadCount());
            convertToWorldCoordinates(_quads + _numQuads, cmd->getQuadCount(), cmd->getModelView());
            
            _numQuads += cmd->getQuadCount();

        }
        else if(RenderCommand::Type::GROUP_COMMAND == commandType)
        {
            flush();
            int renderQueueID = ((GroupCommand*) command)->getRenderQueueID();
            visitRenderQueue(_renderGroups[renderQueueID]);
        }
        else if(RenderCommand::Type::CUSTOM_COMMAND == commandType)
        {
            flush();
            auto cmd = static_cast<CustomCommand*>(command);
            cmd->execute();
        }
        else if(RenderCommand::Type::BATCH_COMMAND == commandType)
        {
            flush();
            auto cmd = static_cast<BatchCommand*>(command);
            cmd->execute();
        }
        else
        {
            CCLOGERROR("Unknown commands in renderQueue");
        }
    }
}
Пример #5
0
/**
 * drawPoints
 * Zeichnen der bis zu dem Zeitpunkt erreichten Punktzahl.
 */
void
GameWorld::drawPoints() {

	CMatrix * modelview = getModelView();

	modelview->Push();
	modelview->Translate(1.8,4.2,0.0);

	drawNumber(getGameState()->getPoints());

	modelview->Pop();

	/*glPushMatrix();
		glTranslatef(0.8,2.2,0.0);
		drawNumber(getGameState()->getPoints());
	glPopMatrix();*/
}
Пример #6
0
void
World::drawSword() {
	btTransform trans;

	CMatrix * modelviewmatrix = getModelView();

	this->sword->getMotionState()->getWorldTransform(trans);

	btVector3 pos = trans.getOrigin();
	btQuaternion ori = trans.getRotation();

	modelviewmatrix->Push();
	modelviewmatrix->Rotate(ori.getAngle() ,ori.getAxis().getX(),ori.getAxis().getY(),ori.getAxis().getZ());
	modelviewmatrix->Translate(pos.getX(),pos.getY(),pos.getZ());

	ModelContainer::getContainer()->drawModel(modelSword);
	modelviewmatrix->Pop();
}
Пример #7
0
/**
 * drawEndPoints
 * Zeichnen der erreichten Endpunktzahl.
 */
void
GameWorld::drawEndPoints() {

	CMatrix * modelview = getModelView();

	modelview->Push();
	modelview->Translate(-0.1,2.0,0.0);
	modelview->Scale(1.5,1.5,1.5);

	drawNumber(getGameState()->getPoints());

	modelview->Pop();

	/*
	glPushMatrix();
		glTranslatef(-0.1,1.3,0.0);
		glScalef(1.5,1.5,1.5);
		drawNumber(getGameState()->getPoints());
	glPopMatrix();
	*/
}
Пример #8
0
/**
 * drawTime
 * Zeichnen der Zeit.
 */
void
GameWorld::drawTime() {
	int time = getGameState()->getTime();

	if(time >= 0) {

		CMatrix * modelview = getModelView();

		modelview->Push();
		modelview->Translate(-2.0,4.2,0.0);

		drawNumber(time);

		modelview->Pop();

		/*
		glPushMatrix();
			glTranslatef(-1.0,2.2,0.0);
			drawNumber(time);
		glPopMatrix();
		*/
	}
}
Пример #9
0
/**
 * drawNumber
 * Zeichnen der übergebenen Zahl. Aufgeteilt in 1er, 10er, 100er Anteil.
 * @param num Zahl
 */
void
World::drawNumber(int num) {
	CMatrix * modelviewmatrix = getModelView();
	int hundred = num/100;
	int ten = (num-(hundred*100))/10;
	int one = num-(ten*10)-(hundred*100);

	if(hundred > 9) {
		hundred = 9;
		ten = 9;
		one = 9;
	}

	prepareDraw();
	modelviewmatrix->Push();
	modelviewmatrix->Rotate(DEG2RAD*-90,1,0,0);
	modelviewmatrix->Translate(0.3,0.0,0.0);
	drawNumberModel(one);
	modelviewmatrix->Translate(-0.15,0.0,0.0);
	drawNumberModel(ten);
	modelviewmatrix->Translate(-0.15,0.0,0.0);
	drawNumberModel(hundred);
	modelviewmatrix->Pop();
}
Пример #10
0
/* 
* draw
* zeichnet model an bestimmter Position mit bestimmter Orientierung
*/
void GameObjectBomb::draw() {
	btVector3 trans = getPosition();
	btQuaternion ori = getOrientation();
	SQuaternion4d m_ori;
	CMatrix * modelviewmatrix = getModelView();

	m_ori.x = ori.getAxis().getX();
	m_ori.y = ori.getAxis().getY();
	m_ori.z = ori.getAxis().getZ();
	m_ori.w = ori.getAngle();

	modelviewmatrix->Push();

	if (status == statusExplosion) {
		modelviewmatrix->Scale(1.0+animationStep/10.0, 1.0+animationStep/10.0, 1.0+animationStep/10.0);
	}

	modelviewmatrix->Rotate(ori.getAngle() ,ori.getAxis().getX(),ori.getAxis().getY(),ori.getAxis().getZ());
	modelviewmatrix->Translate(trans.getX(),trans.getY(),trans.getZ());

	drawModel();
	modelviewmatrix->Pop();

}
Пример #11
0
void initModelView() {

	CMatrix * cmModelviewMatrix = getModelView();
	cmModelviewMatrix->LoadIdentity();
}
Пример #12
0
void Renderer::render()
{
    //Uncomment this once everything is rendered by new renderer
    //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    //TODO setup camera or MVP

    if (_glViewAssigned)
    {
        // cleanup
        _drawnBatches = _drawnVertices = 0;

        //Process render commands
        //1. Sort render commands based on ID
        for (auto &renderqueue : _renderGroups)
        {
            renderqueue.sort();
        }
        
        while(!_renderStack.empty())
        {
            RenderQueue currRenderQueue = _renderGroups[_renderStack.top().renderQueueID];
            size_t len = currRenderQueue.size();
            
            //Process RenderQueue
            for(size_t i = _renderStack.top().currentIndex; i < len; i++)
            {
                _renderStack.top().currentIndex = i;
                auto command = currRenderQueue[i];

                auto commandType = command->getType();
                
                if(commandType == RenderCommand::Type::QUAD_COMMAND)
                {
                    auto cmd = static_cast<QuadCommand*>(command);
                    CCASSERT(nullptr!= cmd, "Illegal command for RenderCommand Taged as QUAD_COMMAND");
                    
                    //Batch quads
                    if(_numQuads + cmd->getQuadCount() > VBO_SIZE)
                    {
                        CCASSERT(cmd->getQuadCount()>= 0 && cmd->getQuadCount() < VBO_SIZE, "VBO is not big enough for quad data, please break the quad data down or use customized render command");

                        //Draw batched quads if VBO is full
                        drawBatchedQuads();
                    }
                    
                    _batchedQuadCommands.push_back(cmd);
                    
                    memcpy(_quads + _numQuads, cmd->getQuads(), sizeof(V3F_C4B_T2F_Quad) * cmd->getQuadCount());
                    convertToWorldCoordinates(_quads + _numQuads, cmd->getQuadCount(), cmd->getModelView());

                    _numQuads += cmd->getQuadCount();
                }
                else if(commandType == RenderCommand::Type::CUSTOM_COMMAND)
                {
                    flush();
                    auto cmd = static_cast<CustomCommand*>(command);
                    cmd->execute();
                }
                else if(commandType == RenderCommand::Type::BATCH_COMMAND)
                {
                    flush();
                    auto cmd = static_cast<BatchCommand*>(command);
                    cmd->execute();
                }
                else if(commandType == RenderCommand::Type::GROUP_COMMAND)
                {
                    flush();
                    auto cmd = static_cast<GroupCommand*>(command);
                    
                    _renderStack.top().currentIndex = i + 1;
                    
                    //push new renderQueue to renderStack
                    RenderStackElement element = {cmd->getRenderQueueID(), 0};
                    _renderStack.push(element);
                    
                    //Exit current loop
                    break;
                }
                else
                {
                    CCASSERT(true, "Invalid command");
                    flush();
                }
            }
            
            //Draw the batched quads
            drawBatchedQuads();
            
            currRenderQueue = _renderGroups[_renderStack.top().renderQueueID];
            len = currRenderQueue.size();
            //If pop the render stack if we already processed all the commands
            if(_renderStack.top().currentIndex + 1 >= len)
            {
                _renderStack.pop();
            }
        }
    }

    for (size_t j = 0 ; j < _renderGroups.size(); j++)
    {
        //commands are owned by nodes
        // for (const auto &cmd : _renderGroups[j])
        // {
        //     cmd->releaseToCommandPool();
        // }
        _renderGroups[j].clear();
    }
    
    //Clear the stack incase gl view hasn't been initialized yet
    while(!_renderStack.empty())
    {
        _renderStack.pop();
    }
    RenderStackElement element = {DEFAULT_RENDER_QUEUE, 0};
    _renderStack.push(element);
    _lastMaterialID = 0;
}