Ejemplo n.º 1
0
void ofApp::draw(){
    fbo_->draw(0,0);

	for (size_t eachPart = 0; eachPart < robotParticles_->numParticles_; 
        ++eachPart)
    {
        drawParticle(robotParticles_->theParticles_[eachPart]->pose_.x_, 
                     robotParticles_->theParticles_[eachPart]->pose_.y_,
                     robotParticles_->theParticles_[eachPart]->pose_.theta_);
    }

   /// OPTIONAL: draw the simulated robot and its laser. 
    drawLaser(*simBot_);
    drawParticle(simBot_->pose_.x_, 
                 simBot_->pose_.y_,
                 simBot_->pose_.theta_);

    /// This function has been moved here such that the first iteration 
    /// is visible in the window.
    if ((MotionModel::rWheelDelta_ != 0.0) || 
        (MotionModel::lWheelDelta_ != 0.0))
    {
        robotParticles_->sampleAndReplace();
    }
    
}
Ejemplo n.º 2
0
	// Disparo, usa el patrón template
	void CShootRaycast::primaryShoot() {
		if(_primaryCanShoot && _currentAmmo > 0){
			_primaryCanShoot = false;
			_primaryCooldownTimer = 0;
				
			drawParticle("shootParticle");

			decrementAmmo();

			for(int i = 0; i < _numberShots; ++i) {
				CEntity* entityHit = fireWeapon();

				if(entityHit != NULL) {
					triggerHitMessages(entityHit);
				}
			}
			//Sonido de disparo
			emitSound(_audioShoot, "audioShoot");

			//Mensaje de dispersion en mira
			/*std::shared_ptr<CMessageHudDispersion> dispersionMsg = std::make_shared<CMessageHudDispersion>();
			_entity->emitMessage(dispersionMsg);*/
		}
		else if(_currentAmmo == 0) {
			// Ejecutar sonidos y animaciones de falta de balas
			emitSound(_noAmmo, "noAmmo", true);
		}
	}// shoot
Ejemplo n.º 3
0
void Star::drawAllParticles()
{
	glEnable(GL_TEXTURE_2D);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	glTexImage2D(
		GL_TEXTURE_2D, 0, 3, 
		this->particleImage.getWidth(), this->particleImage.getHeight(), 0, 
		GL_BGR_EXT, GL_UNSIGNED_BYTE, this->particleImage.getBits()
	);
	glBindTexture(GL_TEXTURE_2D, particleTexture);
	glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

	particles.updateAll();
	for(int i = 0; i < particles.getNumberOfParticles(); i++)
	{
		drawParticle(particles.getNextParticle());
	}
}
Ejemplo n.º 4
0
int displayParticle(pScene sc,pMesh mesh) {
  pParticle   pp;
  pStream     st;
  int         k;

  st = sc->stream;
  if ( sc->par.advtim )
    for (k=1; k<=st->nbstl; k++)
      computeTetraParticle(sc,mesh,k);

  /* redraw particles */
  for (k=1; k<=st->nbstl; k++) {
    pp = &tp[k];
    if ( pp->flag )
      drawParticle(sc,pp);
  }

  return(1);
}
Ejemplo n.º 5
0
void facade::draw()
{
	ofBackground(0, 0, 0);
	ofSetColor(255);

	//Particles
	if(doRender) {
		
		ofEnableAlphaBlending();
		
		// center scene
		glPushMatrix();
		glTranslatef(width/2, 0, -width / 3);
		glRotatef(rotation, 0, 1, 0);
		
		if(forceTimer) {
			float translateMax = forceTimer;
			glTranslatef(ofRandom(-translateMax, translateMax), ofRandom(-translateMax, translateMax), ofRandom(-translateMax, translateMax));
			forceTimer--;
		}

		
		/*
		// enable back-face culling (so we can see through the walls)
		glCullFace(GL_BACK);
		glEnable(GL_CULL_FACE);

		glEnable(GL_DEPTH_TEST);

		ofFill();
		
		glBegin(GL_QUADS);
		// draw right wall
		glColor3f(.1, 0.1, 0.1);		glVertex3f(width/2, height+1, width/2);
		glColor3f(0, 0, 0);				glVertex3f(width/2, -height, width/2);
		glColor3f(0.05, 0.05, 0.05);	glVertex3f(width/2, -height, -width/2);
		glColor3f(.15, 0.15, 0.15);		glVertex3f(width/2, height+1, -width/2);
		
		// back wall
		glColor3f(.1, 0.1, 0.1);		glVertex3f(width/2, height+1, -width/2);
		glColor3f(0, 0, 0);				glVertex3f(width/2, -height, -width/2);
		glColor3f(0.05, 0.05, 0.05);	glVertex3f(-width/2, -height, -width/2);
		glColor3f(.15, 0.15, 0.15);		glVertex3f(-width/2, height+1, -width/2);
		
		// left wall
		glColor3f(.1, 0.1, 0.1);		glVertex3f(-width/2, height+1, -width/2);
		glColor3f(0, 0, 0);				glVertex3f(-width/2, -height, -width/2);
		glColor3f(0.05, 0.05, 0.05);	glVertex3f(-width/2, -height, width/2);
		glColor3f(.15, 0.15, 0.15);		glVertex3f(-width/2, height+1, width/2);
		
		// front wall
		glColor3f(0.05, 0.05, 0.05);	glVertex3f(width/2, -height, width/2);
		glColor3f(.15, 0.15, 0.15);		glVertex3f(width/2, height+1, width/2);
		glColor3f(.1, 0.1, 0.1);		glVertex3f(-width/2, height+1, width/2);
		glColor3f(0, 0, 0);				glVertex3f(-width/2, -height, width/2);
		
		// floor
		glColor3f(.2, 0.2, 0.2);
		glVertex3f(width/2, height+1, width/2);
		glVertex3f(width/2, height+1, -width/2);
		glVertex3f(-width/2, height+1, -width/2);
		glVertex3f(-width/2, height+1, width/2);
		glEnd();
		glDisable(GL_DEPTH_TEST);
		glDisable(GL_CULL_FACE);
		*/

		//canvas
		glRotatef(rotation, 0, -1, 0);
		if(config::useCanvas) {
			canvas.begin();

			ofSetColor(255, canvasFade);
			canvasTrace.draw(0,0);
			glTranslatef(width/2, 0, -width / 3);
		}
		glRotatef(rotation, 0, 1, 0);

		//particles
		//glAlphaFunc(GL_GREATER, 0.5);


		if(currentSkeletonIndex>=0 && false){
			ofPolyline pLine;
			ofPushStyle();
			ofSetColor(255, 0, 0);
			ofNoFill();
			ofSetLineWidth(4);
			// HEAD
			pLine.clear();
			pLine.addVertex(bone[NUI_SKELETON_POSITION_HIP_CENTER]->getPosition().x, bone[NUI_SKELETON_POSITION_HIP_CENTER]->getPosition().y, bone[NUI_SKELETON_POSITION_HIP_CENTER]->getPosition().z);
			pLine.addVertex(bone[NUI_SKELETON_POSITION_SPINE]->getPosition().x, bone[NUI_SKELETON_POSITION_SPINE]->getPosition().y, bone[NUI_SKELETON_POSITION_SPINE]->getPosition().z);
			pLine.addVertex(bone[NUI_SKELETON_POSITION_SHOULDER_CENTER]->getPosition().x, bone[NUI_SKELETON_POSITION_SHOULDER_CENTER]->getPosition().y, bone[NUI_SKELETON_POSITION_SHOULDER_CENTER]->getPosition().z);
			pLine.addVertex(bone[NUI_SKELETON_POSITION_HEAD]->getPosition().x, bone[NUI_SKELETON_POSITION_HEAD]->getPosition().y, bone[NUI_SKELETON_POSITION_HEAD]->getPosition().z);
			pLine.draw();
	
			// BODY_LEFT
			pLine.clear();
			pLine.addVertex(bone[NUI_SKELETON_POSITION_SHOULDER_CENTER]->getPosition().x, bone[NUI_SKELETON_POSITION_SHOULDER_CENTER]->getPosition().y, bone[NUI_SKELETON_POSITION_SHOULDER_CENTER]->getPosition().z);
			pLine.addVertex(bone[NUI_SKELETON_POSITION_SHOULDER_LEFT]->getPosition().x, bone[NUI_SKELETON_POSITION_SHOULDER_LEFT]->getPosition().y, bone[NUI_SKELETON_POSITION_SHOULDER_LEFT]->getPosition().z);
			pLine.addVertex(bone[NUI_SKELETON_POSITION_ELBOW_LEFT]->getPosition().x, bone[NUI_SKELETON_POSITION_ELBOW_LEFT]->getPosition().y, bone[NUI_SKELETON_POSITION_ELBOW_LEFT]->getPosition().z);
			pLine.addVertex(bone[NUI_SKELETON_POSITION_WRIST_LEFT]->getPosition().x, bone[NUI_SKELETON_POSITION_WRIST_LEFT]->getPosition().y, bone[NUI_SKELETON_POSITION_WRIST_LEFT]->getPosition().z);
			pLine.addVertex(bone[NUI_SKELETON_POSITION_HAND_LEFT]->getPosition().x, bone[NUI_SKELETON_POSITION_HAND_LEFT]->getPosition().y, bone[NUI_SKELETON_POSITION_HAND_LEFT]->getPosition().z);
			pLine.draw();

			// BODY_RIGHT
			pLine.clear();
			pLine.addVertex(bone[NUI_SKELETON_POSITION_SHOULDER_CENTER]->getPosition().x, bone[NUI_SKELETON_POSITION_SHOULDER_CENTER]->getPosition().y, bone[NUI_SKELETON_POSITION_SHOULDER_CENTER]->getPosition().z);
			pLine.addVertex(bone[NUI_SKELETON_POSITION_SHOULDER_RIGHT]->getPosition().x, bone[NUI_SKELETON_POSITION_SHOULDER_RIGHT]->getPosition().y, bone[NUI_SKELETON_POSITION_SHOULDER_RIGHT]->getPosition().z);
			pLine.addVertex(bone[NUI_SKELETON_POSITION_ELBOW_RIGHT]->getPosition().x, bone[NUI_SKELETON_POSITION_ELBOW_RIGHT]->getPosition().y, bone[NUI_SKELETON_POSITION_ELBOW_RIGHT]->getPosition().z);
			pLine.addVertex(bone[NUI_SKELETON_POSITION_WRIST_RIGHT]->getPosition().x, bone[NUI_SKELETON_POSITION_WRIST_RIGHT]->getPosition().y, bone[NUI_SKELETON_POSITION_WRIST_RIGHT]->getPosition().z);
			pLine.addVertex(bone[NUI_SKELETON_POSITION_HAND_RIGHT]->getPosition().x, bone[NUI_SKELETON_POSITION_HAND_RIGHT]->getPosition().y, bone[NUI_SKELETON_POSITION_HAND_RIGHT]->getPosition().z);
			pLine.draw();

			// LEG_LEFT
			pLine.clear();
			pLine.addVertex(bone[NUI_SKELETON_POSITION_HIP_CENTER]->getPosition().x, bone[NUI_SKELETON_POSITION_HIP_CENTER]->getPosition().y, bone[NUI_SKELETON_POSITION_HIP_CENTER]->getPosition().z);
			pLine.addVertex(bone[NUI_SKELETON_POSITION_HIP_LEFT]->getPosition().x, bone[NUI_SKELETON_POSITION_HIP_LEFT]->getPosition().y, bone[NUI_SKELETON_POSITION_HIP_LEFT]->getPosition().z);
			pLine.addVertex(bone[NUI_SKELETON_POSITION_KNEE_LEFT]->getPosition().x, bone[NUI_SKELETON_POSITION_KNEE_LEFT]->getPosition().y, bone[NUI_SKELETON_POSITION_KNEE_LEFT]->getPosition().z);
			pLine.addVertex(bone[NUI_SKELETON_POSITION_ANKLE_LEFT]->getPosition().x, bone[NUI_SKELETON_POSITION_ANKLE_LEFT]->getPosition().y, bone[NUI_SKELETON_POSITION_ANKLE_LEFT]->getPosition().z);
			pLine.addVertex(bone[NUI_SKELETON_POSITION_FOOT_LEFT]->getPosition().x, bone[NUI_SKELETON_POSITION_FOOT_LEFT]->getPosition().y, bone[NUI_SKELETON_POSITION_FOOT_LEFT]->getPosition().z);
			pLine.draw();

			// LEG_RIGHT
			pLine.clear();
			pLine.addVertex(bone[NUI_SKELETON_POSITION_HIP_CENTER]->getPosition().x, bone[NUI_SKELETON_POSITION_HIP_CENTER]->getPosition().y, bone[NUI_SKELETON_POSITION_HIP_CENTER]->getPosition().z);
			pLine.addVertex(bone[NUI_SKELETON_POSITION_HIP_RIGHT]->getPosition().x, bone[NUI_SKELETON_POSITION_HIP_RIGHT]->getPosition().y, bone[NUI_SKELETON_POSITION_HIP_RIGHT]->getPosition().z);
			pLine.addVertex(bone[NUI_SKELETON_POSITION_KNEE_RIGHT]->getPosition().x, bone[NUI_SKELETON_POSITION_KNEE_RIGHT]->getPosition().y, bone[NUI_SKELETON_POSITION_KNEE_RIGHT]->getPosition().z);
			pLine.addVertex(bone[NUI_SKELETON_POSITION_ANKLE_RIGHT]->getPosition().x, bone[NUI_SKELETON_POSITION_ANKLE_RIGHT]->getPosition().y, bone[NUI_SKELETON_POSITION_ANKLE_RIGHT]->getPosition().z);
			pLine.addVertex(bone[NUI_SKELETON_POSITION_FOOT_RIGHT]->getPosition().x, bone[NUI_SKELETON_POSITION_FOOT_RIGHT]->getPosition().y, bone[NUI_SKELETON_POSITION_FOOT_RIGHT]->getPosition().z);
			pLine.draw();
			ofPopStyle();
		}

		ofEnableNormalizedTexCoords();
		ballImage.getTextureReference().bind();
		msa::physics::Particle3D *p;
		float alpha;
		int red, green, blue;
		for(int i=0; i<physics.numberOfParticles(); i++) {
			p = physics.getParticle(i);
			if(!p->isFixed()){
				
				red = particleColor.r*colorSpaceVariation + ofMap(p->getPosition().x, -width/2, width/2, 0, 255-(255*colorSpaceVariation));
				green = particleColor.g*colorSpaceVariation + ofMap(p->getPosition().y, -height, height, 0, 255-(255*colorSpaceVariation));
				blue = particleColor.b*colorSpaceVariation + ofMap(p->getPosition().z, -width/2, width/2, 0, 255-(255*colorSpaceVariation));
					
				// draw ball
				glPushMatrix();
					glTranslatef(p->getPosition().x, p->getPosition().y, p->getPosition().z);
					glRotatef(180-rotation, 0, 1, 0);
					ofSetColor(red, green, blue);
					drawParticle(p->getRadius());
				glPopMatrix();
			
				//draw shadow
				alpha = ofMap(p->getPosition().y, -height * 1.5, height, 0, 1);
				if(alpha>0) {
					glPushMatrix();
						glTranslatef(p->getPosition().x, height, p->getPosition().z);
						glRotatef(-90, 1, 0, 0);
						ofSetColor(red, green, blue, alpha * alpha * alpha * alpha * 255);
						drawParticle(p->getRadius() * alpha);
					glPopMatrix();
				}
			}
			
		}
		ballImage.getTextureReference().unbind();
		ofDisableNormalizedTexCoords();

		if(config::useCanvas) {
			canvas.end();
		}
		glPopMatrix();

		
		
		
		if(config::useCanvas) {
			canvasTrace.begin();

				/*glColorMask(FALSE, FALSE, FALSE, TRUE);
				glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
				glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
				glColorMask(TRUE, TRUE, TRUE, TRUE);*/

				ofSetColor(255);
				canvas.draw(0,0);
			canvasTrace.end();
		
			canvasTrace.draw(0,canvasY);
		
			canvas.begin();
				ofClear(0);
			canvas.end();
		}
		
		if(blackout>0){
			ofSetColor(0,0,0,blackout);
			ofRect(0,0,0,width, height);
		}

		ofDisableAlphaBlending();
	}

	


	/*
	// HEAD
	pLine.clear();
	pLine.addVertex(src[NUI_SKELETON_POSITION_HIP_CENTER].x, src[NUI_SKELETON_POSITION_HIP_CENTER].y);
	pLine.addVertex(src[NUI_SKELETON_POSITION_SPINE].x, src[NUI_SKELETON_POSITION_SPINE].y);
	pLine.addVertex(src[NUI_SKELETON_POSITION_SHOULDER_CENTER].x, src[NUI_SKELETON_POSITION_SHOULDER_CENTER].y);
	pLine.addVertex(src[NUI_SKELETON_POSITION_HEAD].x, src[NUI_SKELETON_POSITION_HEAD].y);
	pLine.draw();
	
	// BODY_LEFT
	pLine.clear();
	pLine.addVertex(src[NUI_SKELETON_POSITION_SHOULDER_CENTER].x, src[NUI_SKELETON_POSITION_SHOULDER_CENTER].y);
	pLine.addVertex(src[NUI_SKELETON_POSITION_SHOULDER_LEFT].x, src[NUI_SKELETON_POSITION_SHOULDER_LEFT].y);
	pLine.addVertex(src[NUI_SKELETON_POSITION_ELBOW_LEFT].x, src[NUI_SKELETON_POSITION_ELBOW_LEFT].y);
	pLine.addVertex(src[NUI_SKELETON_POSITION_WRIST_LEFT].x, src[NUI_SKELETON_POSITION_WRIST_LEFT].y);
	pLine.addVertex(src[NUI_SKELETON_POSITION_HAND_LEFT].x, src[NUI_SKELETON_POSITION_HAND_LEFT].y);
	pLine.draw();

	// BODY_RIGHT
	pLine.clear();
	pLine.addVertex(src[NUI_SKELETON_POSITION_SHOULDER_CENTER].x, src[NUI_SKELETON_POSITION_SHOULDER_CENTER].y);
	pLine.addVertex(src[NUI_SKELETON_POSITION_SHOULDER_RIGHT].x, src[NUI_SKELETON_POSITION_SHOULDER_RIGHT].y);
	pLine.addVertex(src[NUI_SKELETON_POSITION_ELBOW_RIGHT].x, src[NUI_SKELETON_POSITION_ELBOW_RIGHT].y);
	pLine.addVertex(src[NUI_SKELETON_POSITION_WRIST_RIGHT].x, src[NUI_SKELETON_POSITION_WRIST_RIGHT].y);
	pLine.addVertex(src[NUI_SKELETON_POSITION_HAND_RIGHT].x, src[NUI_SKELETON_POSITION_HAND_RIGHT].y);
	pLine.draw();

	// LEG_LEFT
	pLine.clear();
	pLine.addVertex(src[NUI_SKELETON_POSITION_HIP_CENTER].x, src[NUI_SKELETON_POSITION_HIP_CENTER].y);
	pLine.addVertex(src[NUI_SKELETON_POSITION_HIP_LEFT].x, src[NUI_SKELETON_POSITION_HIP_LEFT].y);
	pLine.addVertex(src[NUI_SKELETON_POSITION_KNEE_LEFT].x, src[NUI_SKELETON_POSITION_KNEE_LEFT].y);
	pLine.addVertex(src[NUI_SKELETON_POSITION_ANKLE_LEFT].x, src[NUI_SKELETON_POSITION_ANKLE_LEFT].y);
	pLine.addVertex(src[NUI_SKELETON_POSITION_FOOT_LEFT].x, src[NUI_SKELETON_POSITION_FOOT_LEFT].y);
	pLine.draw();

	// LEG_RIGHT
	pLine.clear();
	pLine.addVertex(src[NUI_SKELETON_POSITION_HIP_CENTER].x, src[NUI_SKELETON_POSITION_HIP_CENTER].y);
	pLine.addVertex(src[NUI_SKELETON_POSITION_HIP_RIGHT].x, src[NUI_SKELETON_POSITION_HIP_RIGHT].y);
	pLine.addVertex(src[NUI_SKELETON_POSITION_KNEE_RIGHT].x, src[NUI_SKELETON_POSITION_KNEE_RIGHT].y);
	pLine.addVertex(src[NUI_SKELETON_POSITION_ANKLE_RIGHT].x, src[NUI_SKELETON_POSITION_ANKLE_RIGHT].y);
	pLine.addVertex(src[NUI_SKELETON_POSITION_FOOT_RIGHT].x, src[NUI_SKELETON_POSITION_FOOT_RIGHT].y);
	pLine.draw();*/

	

	//glDisable(GL_BLEND);

	
	if(showFPS)
	{
		glColor4f(1, 1, 1, 1);
		ofDrawBitmapString(" FPS: " + ofToString(ofGetFrameRate(), 2)
					+ " | particles: " + ofToString(physics.numberOfParticles(), 2)
					+ " | springs: " + ofToString(physics.numberOfSprings(), 2)
				   , 20, 15);
	}
}
Ejemplo n.º 6
0
void MyGLWidget::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  // Clear The Screen And The Depth Buffer
    glLoadIdentity();       // Reset The Current Modelview Matrix
    glTranslatef(0, 0, -10);
    glBindTexture(GL_TEXTURE_2D,texture[0]);
    for (loop = 0; loop < MAX_PARTICLES; loop++) {
        if (particle[loop].active) {
            float x = particle[loop].x;
            float y = particle[loop].y;
            float z = particle[loop].z;
            glColor4f(particle[loop].r,particle[loop].g,particle[loop].b,particle[loop].life);
            drawParticle(x, y, z);

            particle[loop].x += particle[loop].xi/(slowdown*1000);    // Move On The X Axis By X Speed
            particle[loop].y += particle[loop].yi/(slowdown*1000);    // Move On The Y Axis By Y Speed
            particle[loop].z += particle[loop].zi/(slowdown*1000);    // Move On The Z Axis By Z Speed

            particle[loop].xi += particle[loop].xg;           // Take Pull On X Axis Into Account
            particle[loop].yi += particle[loop].yg;           // Take Pull On Y Axis Into Account
            particle[loop].zi += particle[loop].zg;           // Take Pull On Z Axis Into Account

            particle[loop].life-=particle[loop].fade;       // Reduce Particles Life By 'Fade'
            if (particle[loop].life < 0.0f) {
                particle[loop].life=1.0f;               // Give It New Life
                particle[loop].fade=float(rand()%100)/1000.0f+0.003f;   // Random Fade Value
                particle[loop].x=0.0f;                  // Center On X Axis
                particle[loop].y=0.0f;                  // Center On Y Axis
                particle[loop].z=0.0f;                  // Center On Z Axis
                particle[loop].xi=xspeed+float((rand()%60)-32.0f);  // X Axis Speed And Direction
                particle[loop].yi=yspeed+float((rand()%60)-30.0f);  // Y Axis Speed And Direction
                particle[loop].zi=float((rand()%60)-30.0f);     // Z Axis Speed And Direction
                particle[loop].r=colors[col][0];            // Select Red From Color Table
                particle[loop].g=colors[col][1];            // Select Green From Color Table
                particle[loop].b=colors[col][2];            // Select Blue From Color Table
            }
            if (num8 && (particle[loop].yg < 1.5f))
                particle[loop].yg += 0.01f;
            if (num2 && (particle[loop].yg > -1.5f))
                particle[loop].yg -= 0.01f;
            if (num6 && (particle[loop].xg < 1.5f))
                particle[loop].xg += 0.01f;
            if (num4 && (particle[loop].xg > -1.5f))
                particle[loop].xg -= 0.01f;
            if (tab) {
                particle[loop].x=0.0f;                  // Center On X Axis
                particle[loop].y=0.0f;                  // Center On Y Axis
                particle[loop].z=0.0f;                  // Center On Z Axis
                particle[loop].xi=float((rand()%50)-26.0f)*10.0f;   // Random Speed On X Axis
                particle[loop].yi=float((rand()%50)-25.0f)*10.0f;   // Random Speed On Y Axis
                particle[loop].zi=float((rand()%50)-25.0f)*10.0f;   // Random Speed On Z Axis
            }

        }
    }
    if (rainbow && delay > 25) {
        delay = 0;
        col++;
        if (col > 11)
            col = 0;
    }
    delay++;
}
Ejemplo n.º 7
0
// Draw Method
void Draw()
{
	glEnable(GL_BLEND);
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
	
	glClearColor(0.3f, 0.3f, 0.3f, 1.f);
	glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);
	GLint projection_uniform;
	GLint world_uniform;
	mat4 projectionMatrix = esgiOrtho(0.f, 800.f, 600.f, 0.f, 0.f, 1.f);
	
	GLint position_attr;
	GLint texcoord_attr;

	GLint sampler_uniform;

	float angle = 0.f;

	mat4 worldMatrix;
	worldMatrix.Identity();

	worldMatrix = esgiRotateZ(angle);
	worldMatrix.I.x = 800.f / 1.6f;
	worldMatrix.J.y = 600.f /1.6f;

	/**
	 * Draw Sky - Start
	 */
	programObject = shaders.UseShader("Sky");

	position_attr = glGetAttribLocation(programObject, "a_Position");
	texcoord_attr = glGetAttribLocation(programObject, "a_TexCoords");

	projection_uniform = glGetUniformLocation(programObject, "u_ProjectionMatrix");
	world_uniform = glGetUniformLocation(programObject, "u_WorldMatrix");


	glVertexAttribPointer(position_attr, 3, GL_FLOAT, false, sizeof(Vertex), vertices);
	glVertexAttribPointer(texcoord_attr, 2, GL_FLOAT, false, sizeof(Vertex), &vertices[0].texcoords);

	glEnableVertexAttribArray(position_attr);
	glEnableVertexAttribArray(texcoord_attr);
	
	glUniformMatrix4fv(projection_uniform, 1, false, &projectionMatrix.I.x);

	glActiveTexture(GL_TEXTURE0);
	glBindTexture(GL_TEXTURE_2D, textures["Sky"]);

	sampler_uniform = glGetUniformLocation(programObject, "u_Texture");
	glUniform1i(sampler_uniform, 0);

	worldMatrix.T.set(400.f, 300.f, 0.f, 1.0f);

	glUniformMatrix4fv(world_uniform, 1, false, &worldMatrix.I.x);

	glDrawArrays(GL_TRIANGLES, 0, VertexCount);

	glDisableVertexAttribArray(position_attr);
	glDisableVertexAttribArray(texcoord_attr);
	shaders.UnUseShader("sky");
	/**
	 * Draw Sky - End
	 */

	/**
	 * Draw Clouds - Start
	 */
	programObject = shaders.UseShader("Clouds");

	position_attr = glGetAttribLocation(programObject, "a_Position");
	texcoord_attr = glGetAttribLocation(programObject, "a_TexCoords");
		
	projection_uniform = glGetUniformLocation(programObject, "u_ProjectionMatrix");
	world_uniform = glGetUniformLocation(programObject, "u_WorldMatrix");
	GLint time_uniform = glGetUniformLocation(programObject, "u_Time");

	glVertexAttribPointer(position_attr, 3, GL_FLOAT, false, sizeof(Vertex), vertices);
	glVertexAttribPointer(texcoord_attr, 2, GL_FLOAT, false, sizeof(Vertex), &vertices[0].texcoords);
	
	glUniformMatrix4fv(projection_uniform, 1, false, &projectionMatrix.I.x);

	glEnableVertexAttribArray(position_attr);
	glEnableVertexAttribArray(texcoord_attr);

	glUniform1f(time_uniform, t);

	glActiveTexture(GL_TEXTURE0);
	glBindTexture(GL_TEXTURE_2D, textures["Clouds"]);

	sampler_uniform = glGetUniformLocation(programObject, "u_Texture");
	glUniform1i(sampler_uniform, 0);

	worldMatrix.T.set(400.f, 300.f, 0.f, 1.0f);
	glUniformMatrix4fv(world_uniform, 1, false, &worldMatrix.I.x);
	glDrawArrays(GL_TRIANGLES, 0, VertexCount);

	glDisableVertexAttribArray(position_attr);
	glDisableVertexAttribArray(texcoord_attr);

	shaders.UnUseShader("Clouds");
	/**
	 * Draw Clouds - End
	 */

	/**
	 * Draw Particle - Start
	 */
	programObject = shaders.UseShader("Particle");

	position_attr = glGetAttribLocation(programObject, "a_Position");
	texcoord_attr = glGetAttribLocation(programObject, "a_TexCoords");

	projection_uniform = glGetUniformLocation(programObject, "u_ProjectionMatrix");
	world_uniform = glGetUniformLocation(programObject, "u_WorldMatrix");

	glVertexAttribPointer(position_attr, 3, GL_FLOAT, false, sizeof(Vertex), vertices);
	glVertexAttribPointer(texcoord_attr, 2, GL_FLOAT, false, sizeof(Vertex), &vertices[0].texcoords);

	GLint ttl_uniform = glGetUniformLocation(programObject, "u_ttl");
	GLint ttl_max_uniform = glGetUniformLocation(programObject, "u_ttl_max");

	GLint dir_uniform = glGetUniformLocation(programObject, "u_dir");
	
	glUniformMatrix4fv(projection_uniform, 1, false, &projectionMatrix.I.x);

	glEnableVertexAttribArray(position_attr);
	glEnableVertexAttribArray(texcoord_attr);

	for(int i = 0; i < ParticleEmiters.size(); i++)
	{
		for(int j = 0; j < ParticleEmiters[i].nbParticle; j++)
		{
			if(ParticleEmiters[i].particles[j].living == true && ParticleEmiters[i].particles[j].emited == true )
			{
				glUniform1f(ttl_uniform, ParticleEmiters[i].particles[j].ttlCurr);
				glUniform1f(ttl_max_uniform, ParticleEmiters[i].particles[j].ttlMax);
				glUniform3f(dir_uniform, ParticleEmiters[i].particles[j].direction.x, ParticleEmiters[i].particles[j].direction.y, ParticleEmiters[i].particles[j].direction.z);
				
				if(ParticleEmiters[i].particles[j].type == 1)
					drawParticle(ParticleEmiters[i].particles[j].position, programObject, sampler_uniform, worldMatrix, world_uniform, textures["Fireworks"]);
				if(ParticleEmiters[i].particles[j].type == 2)
					drawParticle(ParticleEmiters[i].particles[j].position, programObject, sampler_uniform, worldMatrix, world_uniform, textures["Water"]);
			}
		}
	}

	glDisableVertexAttribArray(position_attr);
	glDisableVertexAttribArray(texcoord_attr);

	shaders.UnUseShader("Particle");
	/**
	 * Draw Clouds - End
	 */
}
Ejemplo n.º 8
0
void display(void)
{
	curTime = timeGetTime();
  float dt = (float)(curTime - lastTime) * 0.001;//secに変換
  elapseTime1 += dt;
  elapseTime2 += dt;
  fps ++;
  if(elapseTime1 >= 1.0)
  {
		printf("frame per sec = %d \n", fps);
		elapseTime1 = 0.0;
		fps = 0;
  }
	lastTime = curTime;

	//カラーバッファ,デプスバッファのクリア
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glLoadIdentity();//視点を変えるときはこの位置に必要
  if(cos(M_PI * view.theta /180.0) >= 0.0)//カメラ仰角90度でビューアップベクトル切替
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, 1.0, 0.0);
  else
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, -1.0, 0.0);

  //光源設定//'l'を押した後光源位置可変
  glLightfv(GL_LIGHT0, GL_POSITION, lightPos);

	glActiveTexture(GL_TEXTURE0);
	glBindTexture(GL_TEXTURE_2D, texName[0]);
  //描画
  // シェーダプログラムの適用 
  glUseProgram(shaderProg);
	//テクスチャユニットをシェーダ側のサンプラに関連付け,レンダリング
  GLint texLoc = glGetUniformLocation(shaderProg, "tex");
  glUniform1i(texLoc, 0);//GL_TEXTURE0を適用
  GLint timeLoc = glGetUniformLocation(shaderProg, "time");
  glUniform1f(timeLoc, elapseTime2);//経過時間(sec)

  drawTerrain(); 
  // シェーダプログラムの適用を解除	
  glUseProgram(0);
	//particle
	glBindTexture(GL_TEXTURE_2D, texName[1]);

	drawParticle(dt);

	if(flagHelp)
  {
		printf("矢印キーによるアフィン変換/光源移動 \n");
		printf(" →,←:x軸 \n");
		printf(" ↑,↓:y軸 \n");
		printf(" [Shift]+↑,↓:z軸 \n");
		printf(" 'r'を押した後:回転 \n");
		printf(" 't'を押した後:平行移動 \n");
		printf(" 's'を押した後:スケーリング \n");
		printf(" 'l'を押した後、光源位置の移動可 \n");
		printf("マウス操作で視点変更可 \n");
		printf("  dolly:中央付近を左ボタンクリックで近づき,右ボタンクリックで遠ざかる \n");
		printf("  pan:左横および右横を右ボタンクリックで注視点が左右に変化する \n");
		printf("  tilt:真上および真下を右ボタンクリックで注視点が上下に変化する \n");
		printf("  tumble:左右にドラッグすると視点が左右に変化する \n");
		printf("  crane:上下にドラッグすると視点が上下に変化する \n");
		printf("  zoom:左下を右ボタンクリックでズームイン \n");
		printf("        右下を右ボタンクリックでズームアウト \n");
		printf("[Shift]+'r'でリセット \n");
		printf("[F1]キー:βの調整 \n");
		printf("[F2]キー:σの調整 \n");
		printf("[F3]キー:seedの変更 \n");
		printf("[F4]キー:x方向の風力変更 \n");
		flagHelp = false;
  }
  //終了
  glutSwapBuffers();
}
void ParticleShaderVoronoi::drawPost()
{

	// Get the viewport dimensions
	GLint viewport[4];
	glGetIntegerv(GL_VIEWPORT, viewport);

	if ((pbufferOne->height != viewport[3]) || (pbufferOne->width != viewport[2]))
	{
		delete pbufferOne;
		setupBuffers(viewport[2], viewport[3]);
	}

	// Get the light position
	GLfloat lightpos[4];
	glGetLightfv(GL_LIGHT0, GL_POSITION, lightpos);

	// Create storage for matrices
	GLfloat mm[16];
	GLfloat pm[16];

	// If we're not sharing contexts, need to copy state
	glGetFloatv(GL_MODELVIEW_MATRIX, mm);
	glGetFloatv(GL_PROJECTION_MATRIX, pm);

	// Switch to pbufferOne rendering context
	if (wglMakeCurrent(pbufferOne->hdc, pbufferOne->hglrc) == FALSE)
		pbufferOne->wglGetLastError();

	// If we're not sharing contexts, need to update state
	if (pbufferOne->onecontext == false) {

		glMatrixMode(GL_PROJECTION);
		glLoadMatrixf(pm);
	
		glMatrixMode(GL_MODELVIEW);
		glLoadMatrixf(mm);

		glEnable(GL_DEPTH_TEST);
	}
	else {
		// Turn off color writes, for better performance
		glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
	}

	// Clear the depth texture
	glClear(GL_DEPTH_BUFFER_BIT);

	cgGLEnableProfile(vProfile);
	cgGLEnableProfile(fProfile);
	cgGLBindProgram(vProgram);
	bindCGParametersVertex();
	cgGLBindProgram(fProgramZero);
	bindCGParametersFragmentZero();
	

	// Draw into the buffer for the depth texture
	for (unsigned int i = 0; i < ps->size(); i++)
		drawParticle(i);

	// Turn back on color for eventual rendering
	if (pbufferOne->onecontext) {
		glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
	}

	cgGLDisableProfile(vProfile);
    cgGLDisableProfile(fProfile);

	// Switch to normal rendering context
	if (wglMakeCurrent(hdc, hglrc) == FALSE)
		pbufferOne->wglGetLastError();
	
	// Setup CG
	cgGLEnableProfile(vProfile);
	cgGLEnableProfile(fProfile);
	cgGLBindProgram(vProgram);
	bindCGParametersVertex();
	bindCGParametersFragmentOne();
	cgGLBindProgram(fProgramOne);
	
	// Make the depth texture active
	glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC) wglGetProcAddress("glActiveTextureARB");
	glActiveTextureARB(GL_TEXTURE0_ARB);
	
	// Bind the depth texture
	glEnable(GL_TEXTURE_RECTANGLE_NV);
	glMatrixMode(GL_TEXTURE);
	glLoadIdentity();
	glMatrixMode(GL_MODELVIEW);
	glBindTexture(GL_TEXTURE_RECTANGLE_NV, depth_texture);
	
	// Bind pbufferOne as a depth texture
	wglBindTexImageARB = (PFNWGLBINDTEXIMAGEARBPROC)wglGetProcAddress("wglBindTexImageARB");
	if (wglBindTexImageARB(pbufferOne->hpbuffer, WGL_DEPTH_COMPONENT_NV) == FALSE)
		pbufferOne->wglGetLastError();

	cgGLEnableTextureParameter(firstPassDepth);
	
	glActiveTextureARB(GL_TEXTURE1_ARB);
	
	// Set parameters
	cgGLSetParameter1f(depthRange, GLfloat(abs(10.0 - 0.5)));
	cgGLSetParameter4fv(lightPositionEC, lightpos);
	cgGLSetParameter1f(toleranceScaleFactor, GLfloat(toleranceScale));
	cgGLSetStateMatrixParameter(viewMatrix, CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_IDENTITY);

	glEnable(GL_DEPTH_TEST);
	glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);

	// Draw the particles to the screen
	for (unsigned int i = 0; i < ps->size(); i++) {
		drawSecondPass(i);
	}

	cgGLDisableTextureParameter(firstPassDepth);
	
	glDisable(GL_TEXTURE_RECTANGLE_NV);

	// Release the depth texture
	wglReleaseTexImageARB = (PFNWGLRELEASETEXIMAGEARBPROC)wglGetProcAddress("wglReleaseTexImageARB");
	if (wglReleaseTexImageARB(pbufferOne->hpbuffer, WGL_DEPTH_COMPONENT_NV) == false)
		pbufferOne->wglGetLastError();

	cgGLDisableProfile(vProfile);
    cgGLDisableProfile(fProfile);
}
Ejemplo n.º 10
0
void drawCar(void)
{
	
	static float max_distance = 0.9; 
	static float distance;
	static float width;
	static int pieces;
	static float xs;
	pieces = 20;
	static GLfloat car_diffuse[] = {0.6, 0.6, 0.6, 1.0};
	glMaterialfv(GL_FRONT,GL_DIFFUSE, car_diffuse);
	//glLightf(GL_FRONT,GL_SPOT_CUTOFF,45.f);
	glPushMatrix();
		//first, draw the body
		glTranslatef(position_X,position_Y,position_Z);
		glScalef(1.0,2.0,1.0);
		//rotate to right orientation
		glRotatef(velocity_angle, 0.f, 0.f, -1.f); 
		glPushMatrix();
		glEnable(GL_TEXTURE_2D);
		glBindTexture(GL_TEXTURE_2D,carTex);
		glRotatef(90, -1.0, 0, 0);		
		gluCylinder(cylinder,0.15,0.1,0.3,30,30);
		glDisable(GL_TEXTURE_2D);
		glPopMatrix();

		if(velocity>0)
			drawParticle(velocity);
		//four wheels
		
		glPushMatrix();
		//right front
		glTranslatef(2.2*FRONT_RADIUS,0.28,0.1);
		glRotatef(90.f, 0.0, 1.0, 0.0);
		glColor3f(0.45,0.45,0.45);
		//rotate when press left or right
		glRotatef(wheelangle,1.0, 0, 0);
		//constant rotate
		glRotatef(-cons_rotate_front,0,0,1);
		
		//axis
		gluCylinder(cylinder,FRONT_RADIUS,FRONT_RADIUS,0.05,10,10);
		glColor4f(1.f, 1.f, 1.f, 1.f);
		glEnable(GL_TEXTURE_2D);
		glBindTexture(GL_TEXTURE_2D, wheelTex);
		gluDisk(cylinder,0,FRONT_RADIUS,10,10);
		glTranslatef(0, 0, 0.05);
		gluDisk(cylinder,0,FRONT_RADIUS,10,10);
		glDisable(GL_TEXTURE_2D);
		glPopMatrix();

		glPushMatrix();
		//left front
		glTranslatef(-3.1*FRONT_RADIUS,0.28,0.1);
		glRotatef(90.f, 0.0, 1.0, 0.0);
		glColor3f(0.45,0.45,0.45);
		//rotate when press left or right
		glRotatef(wheelangle,1.0, 0, 0);
		//constant rotate
		glRotatef(-cons_rotate_front,0,0,1);
		//axis
		gluCylinder(cylinder,FRONT_RADIUS,FRONT_RADIUS,0.05,10,10);
		glColor4f(1.f, 1.f, 1.f, 1.f);
		glEnable(GL_TEXTURE_2D);
		glBindTexture(GL_TEXTURE_2D, wheelTex);
		gluDisk(cylinder,0,FRONT_RADIUS,10,10);
		glTranslatef(0, 0, 0.05);
		gluDisk(cylinder,0,FRONT_RADIUS,10,10);
		glDisable(GL_TEXTURE_2D);
		glPopMatrix();

		//left back
		glPushMatrix();
		glTranslatef(-BACK_RADIUS*1.3,0.0,0.1);
		glRotatef(90.f, 0.0, 1.0, 0.0);
		glColor3f(0.45,0.45,0.45);
		glRotatef(-cons_rotate_back,0,0,1);
		//axis
		gluCylinder(cylinder,BACK_RADIUS,BACK_RADIUS,0.05,10,10);
		glColor4f(1.f, 1.f, 1.f, 1.f);
		glEnable(GL_TEXTURE_2D);
		glBindTexture(GL_TEXTURE_2D, wheelTex);
		gluDisk(cylinder,0,BACK_RADIUS,10,10);
		glTranslatef(0, 0, 0.05);
		gluDisk(cylinder,0,BACK_RADIUS,10,10);
		glDisable(GL_TEXTURE_2D);
		glPopMatrix();

		//right back
		glPushMatrix();
		glTranslatef(BACK_RADIUS*1.1,0.0,0.1);
		glRotatef(90.f, 0.0, 1.0, 0.0);
		glColor3f(0.45,0.45,0.45);
		glRotatef(-cons_rotate_back,0,0,1);
		//axis
		gluCylinder(cylinder,BACK_RADIUS,BACK_RADIUS,0.05,10,10);
		glColor4f(1.f, 1.f, 1.f, 1.f);
		//wheel
		glEnable(GL_TEXTURE_2D);
		glBindTexture(GL_TEXTURE_2D, wheelTex);
		gluDisk(cylinder,0,BACK_RADIUS,10,10);
		glTranslatef(0, 0, 0.05);
		gluDisk(cylinder,0,BACK_RADIUS,10,10);
		glDisable(GL_TEXTURE_2D);
		glPopMatrix();
	glPopMatrix();
}
Ejemplo n.º 11
0
void display(void)
{
  curTime = timeGetTime();
  float dt = (float)(curTime - lastTime) * 0.001;//secに変換
  elapseTime1 += dt;
  elapseTime2 += dt;
  fps ++;
  if(elapseTime1 >= 1.0)
  {
		printf("frame per sec = %d \n", fps);
		elapseTime1 = 0.0;
		fps = 0;
  }
	lastTime = curTime;

	//カラーバッファ,デプスバッファのクリア
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glLoadIdentity();//視点を変えるときはこの位置に必要
  if(cos(M_PI * view.theta /180.0) >= 0.0)//カメラ仰角90度でビューアップベクトル切替
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, 1.0, 0.0);
  else
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, -1.0, 0.0);

  //光源設定//'l'を押した後光源位置可変
  glLightfv(GL_LIGHT0, GL_POSITION, lightPos);

  if(flagWireframe)//'w'でwireframeとsolid model切り替え
  {
	  glPolygonMode(GL_FRONT,GL_LINE);
	  glPolygonMode(GL_BACK,GL_POINT);
  }
  else glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);

  //描画
  // シェーダプログラムの適用 
  glUseProgram(shaderProg);
	//テクスチャユニットをシェーダ側のサンプラに関連付け,レンダリング
  //fragment shaderのユニフォーム変数texのインデックスを取得
  GLint texLoc = glGetUniformLocation(shaderProg, "tex");
  glUniform1i(texLoc, 0);//GL_TEXTURE0を適用
  drawTerrain(); 
  // シェーダプログラムの適用を解除	
  glUseProgram(0);
  drawParticle(dt);
	drawParticle2(dt);
  //テクスチャ、半透明物体があるとき
  glDepthMask(GL_FALSE); //デプスバッファを書き込み禁止
  glEnable(GL_BLEND);//アルファブレンディングを有効にする
  glBlendFunc(GL_DST_ALPHA,GL_ONE_MINUS_SRC_ALPHA);//色混合係数を決める
  //半透明描画
  makeRiver(elapseTime2);
  drawRiver();
  //テクスチャ、半透明物体があるとき
  glDepthMask(GL_TRUE); //デプスバッファの書き込みを許可
  glDisable(GL_BLEND);

	if(flagHelp)
  {
		printf("矢印キーによるアフィン変換/光源移動 \n");
		printf(" →,←:x軸 \n");
		printf(" ↑,↓:y軸 \n");
		printf(" [Shift]+↑,↓:z軸 \n");
		printf(" 'r'を押した後:回転 \n");
		printf(" 't'を押した後:平行移動 \n");
		printf(" 's'を押した後:スケーリング \n");
		printf(" 'l'を押した後、光源位置の移動可 \n");
		printf("'w'でワイヤーフレームとソリッドモデル切り替え \n");
		printf("マウス操作で視点変更可 \n");
		printf("  dolly:中央付近を左ボタンクリックで近づき,右ボタンクリックで遠ざかる \n");
		printf("  pan:左横および右横を右ボタンクリックで注視点が左右に変化する \n");
		printf("  tilt:真上および真下を右ボタンクリックで注視点が上下に変化する \n");
		printf("  tumble:左右にドラッグすると視点が左右に変化する \n");
		printf("  crane:上下にドラッグすると視点が上下に変化する \n");
		printf("  zoom:左下を右ボタンクリックでズームイン \n");
		printf("        右下を右ボタンクリックでズームアウト \n");
		printf("[Shift]+'r'でリセット \n");
		printf("[F1]キー:βの調整 \n");
		printf("[F2]キー:σの調整 \n");
		printf("[F3]キー:seedの変更 \n");
		printf("[F4]キー:x方向の風力変更 \n");
		flagHelp = false;
  }
  //終了
  glutSwapBuffers();
}