예제 #1
0
void Camera::reset()
{
	setPerspective();

	eye.x = (float)w / 2.0f;
	eye.y = (float)h / 2.0f;
	float halfFov = PI * fieldOfView / 360.0f;
	float theTan = tanf(halfFov);
	eye.z = -eye.y / theTan;

	center.x = (float)w / 2.0f;
	center.y = (float)h / 2.0f;
	center.z = 0;

	up.x = 0;
	up.y = -1;
	up.z = 0;

	setClippingPlane();
}
예제 #2
0
void Camera::mouseDragged(ofMouseEventArgs& event) 
{
	if(event.button == 0)
	{
		tumble(prevMouseX, prevMouseY, event.x, event.y);
	}
	else if(event.button == 1)
	{
		track(prevMouseX, prevMouseY, event.x, event.y);
	}
	else if(event.button == 2)
	{
		dolly(prevMouseX, prevMouseY, event.x, event.y);
		setClippingPlane();
	}

	prevMouseX = event.x;
	prevMouseY = event.y;

	mouseClicked = false;;

}
예제 #3
0
ShaderExplodeVolumesAlpha::ShaderExplodeVolumesAlpha(bool withColorPerFace):
m_wcpf(withColorPerFace)
{
	m_nameVS = "ShaderExplodeVolumes_vs";
	m_nameFS = "ShaderExplodeVolumes_fs";
	m_nameGS = "ShaderExplodeVolumes_gs";

	std::string glxvert(*GLSLShader::DEFINES_GL);
	glxvert.append(vertexShaderText);

	std::string glxgeom;
	glxgeom.append(GLSLShader::defines_Geom("lines_witw_adjacency", "triangle_strip", 3));

	if (withColorPerFace)
		glxgeom.append("#define WITH_COLORPF 1\n");
	glxgeom.append(geometryShaderText);

	std::string glxfrag(*GLSLShader::DEFINES_GL);
	glxfrag.append(fragmentShaderText);

	loadShadersFromMemory(glxvert.c_str(), glxfrag.c_str(), glxgeom.c_str(), GL_LINES_ADJACENCY_EXT , GL_TRIANGLE_STRIP,4);

	getLocations();

	//Default values
	m_ambient = Geom::Vec4f(0.05f, 0.05f, 0.1f, 0.0f);
	m_backColor = Geom::Vec4f(1.0f, 0.1f, 0.1f, 0.0f);
	m_light_pos = Geom::Vec3f(10.0f, 10.0f, 1000.0f);
	m_plane   = Geom::Vec4f(0.0f, 0.0f, 1000.f, 1000000000000000000000000000.0f);
	m_depthPeeling = 0;

	setAmbient(m_ambient);
	setBackColor(m_backColor);
	setLightPosition(m_light_pos);
	setClippingPlane(m_plane);
	setDepthPeeling(m_depthPeeling);
}