void LightEffectSoundSolid::tick() {

	switch(channel) {
		case LightEffectSoundSolid::Channel::Left:
			renderColor(spectrumAnalyzer->getLeftSpectrum());
		break;

		case LightEffectSoundSolid::Channel::Center:
			renderColor(spectrumAnalyzer->getCenterSpectrum());
		break;

		case LightEffectSoundSolid::Channel::Right:
			renderColor(spectrumAnalyzer->getRightSpectrum());
		break;
	}
}
void         Draw(GLContext	*_context)
{
	UserData      *_user = (UserData *)_context->userObject;
	Size                 _size = _context->getWinSize();
	int                  width=_size.width;
	int                  height=_size.height;

	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	_user->object->enableObject();
	glBindBuffer(GL_ARRAY_BUFFER, _user->vertexBufferId);

	glEnableVertexAttribArray(0);
	glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), NULL);

	glEnableVertexAttribArray(1);
	glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float),(void *)( 3 * sizeof(float)));
//uniform variable
	glActiveTexture(GL_TEXTURE0);
	glBindTexture(GL_TEXTURE_2D, _user->baseMapId);
	glUniform1i(_user->baseMapLoc, 0);

	GLVector4   renderColor(1.0f,0.0f,0.0f,1.0f);
	glUniform4fv(_user->renderColorLoc, 1, (float *)&renderColor);
//	float     angle = _user->angle / 180.0f*3.14159265;
	float     x = sin(_user->angle*0.1367) + cos(_user->angle*0.2377)*0.5f;
	float    y = cos(_user->angle*0.1367) + sin(_user->angle*0.2377)*0.5f;
//critical
	glUniform2f(_user->incLoc,x,y);
//	glUniform1f(_user->criticalLoc, 4.5f);
	glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
}
예제 #3
0
파일: renderer.cpp 프로젝트: Roboy/omgl
void Renderer::renderColor(Mesh *mesh, VectorXd &pose) {
    Matrix3f rot = Matrix3f::Identity();
    Vector3f p(pose(3), pose(4), pose(5));
    float angle = p.norm();
    if (abs(angle) > 0.0000001) {
        p.normalize();
        Matrix3f skew;
        skew << 0, -p(2), p(1),
                p(2), 0, -p(0),
                -p(1), p(0), 0;
        rot = rot + sin(angle) * skew;
        rot = rot + (1.0 - cos(angle)) * skew * skew;
    }

    ViewMatrix.topLeftCorner(3,3) = rot;
    ViewMatrix.topRightCorner(3,1) << pose(0), pose(1), pose(2);

    renderColor(mesh);
}
예제 #4
0
파일: render.cpp 프로젝트: b3sigma/fourd
bool Render::ResizeRenderTargets(int width, int height) {
  if(m_overdrawColor) {
    if(m_overdrawColor->m_width == width && m_overdrawColor->m_height == height) {
      return true; // success but nothing is true I guess
    }
  }

  m_bufferWidth = width;
  m_bufferHeight = height;
  UpdateViewHeightFromBuffer();

  DEL_NULL(m_overdrawColor);
  //DEL_NULL(m_overdrawDepth);
  DEL_NULL(m_renderColor);
  DEL_NULL(m_renderDepth);


  if(!m_multiPass || width == 0 || height == 0)
    return true; // don't need any of these unless it's multipass

  std::unique_ptr<Texture> colorOverdraw(new Texture());
  if(!colorOverdraw->CreateColorTarget(width, height))
    return false;

  //std::unique_ptr<Texture> depthOverdraw(new Texture());
  //if(!depthOverdraw->CreateDepthTarget(width, height))
  //  return false;

  std::unique_ptr<Texture> renderColor(new Texture());
  if(!renderColor->CreateColorTarget(width, height))
    return false;

  std::unique_ptr<Texture> renderDepth(new Texture());
  if(!renderDepth->CreateDepthTarget(width, height))
    return false;

  m_overdrawColor = colorOverdraw.release();
  //m_overdrawDepth = depthOverdraw.release();
  m_renderColor = renderColor.release();
  m_renderDepth = renderDepth.release();
  return true;
}
예제 #5
0
파일: Stage.cpp 프로젝트: jejatu/3d
void Stage::forwardRender(void) {
	initForwardRendering();
	renderDepth();

	//in forward rendering the scene is rendered for each light and blended together
	for (unsigned int i = 0; i < m_lights.size(); ++i) {
		initLightRendering();

		Camera shadowMapCamera;
		BaseShadowMap* baseShadowMap = 0;
		ShaderProgram* finalShader = 0;
		if (m_lights[i]->getType() == LightTypes::PointLight) {
			if (m_lights[i]->shadow != Shadows::None) baseShadowMap = &m_shadowCubeMap;
			renderPointLightShadowMap(m_lights[i], &shadowMapCamera);
			finalShader = getCorrectPointLightShadowShader(m_lights[i]);
		} else if (m_lights[i]->getType() == LightTypes::DirectionalLight) {
			if (m_lights[i]->shadow != Shadows::None) baseShadowMap = &m_shadowMap;
			renderDirectionalLightShadowMap(m_lights[i], &shadowMapCamera);
			finalShader = getCorrectDirectionalLightShadowShader(m_lights[i]);
		}
		renderColor(m_lights[i], i, finalShader, &shadowMapCamera, baseShadowMap);
	}
}
예제 #6
0
파일: renderer.cpp 프로젝트: Roboy/omgl
void Renderer::renderColor(Mesh *mesh, Matrix4f &pose) {
    mesh->ModelMatrix = pose;
    renderColor(mesh);
}