Пример #1
0
void Planar::reloadFile(string configFile) throw(FileNotFound) {
	ifstream fin(configFile);

	if (!fin.is_open()) {
		throw FileNotFound(configFile + " is missing and cannot be loaded.");
	}

//Determine the number of vertices
	fin >> total;

//Gather each of the vertices
	for(int i = 0; i < total; ++i) { 
		glm::vec3 pt;
		fin >> pt.x;
		fin >> pt.y;
		fin >> pt.z;

		vertices.push_back(pt);
	}

//Check for convexity
	convex = isConvex();

//Check for planarity
	planar = isPlanar();

//Build the geometry
	buildGeometry();

//Put all of the vertices into an array
	mesh.dump();

//Allocate the buffer space
	Geometry::buildBuffer(mesh.total, mesh.colors, mesh.normals, mesh.points);
}
Пример #2
0
HypercubeBuilder::HypercubeBuilder()
    : Processor()
    , outport_(Port::OUTPORT, "outport", "Output geometry")
    , numDimensions_("numDimensions", "Number of dimensions", 4, 3, 10)
    , numProjectionDimensions_("numProjectionDimensions", "Number of projection dimensions", 3, 2, 3)
    , axis1_("axis1", "Axis 1", 1, 1, 5)
    , axis2_("axis2", "Axis 2", 2, 1, 5)
    , rotate_("rotate", "Rotate", 0, -180, 180)
    , numTiles_("numTiles", "Num Tiles", 1, 1, 5)
    , vertexSize_("vertexSize", "Vertex size", 0.2, 0.01, 5)
    , drawEdges_("drawEdges", "Draw Edges", true)
    , edgeSize_("edgeSize", "Edge size", 0.05, 0.01, 0.1)
    , distance_("distance", "Distance", 5, 0.1, 10)
    , buildGeometry_("buildGeometry", "Build geometry")
    , randomRotation_("randomRotation", "Random Rotation")
    , geometryType_("geometryType", "Geometry type")
    , printBasis_("printBasis", "Print Basis")
    , drawQuasiEdges_("drawQuasiEdges", "Draw Quasi Edges", false)
    , quasiEdgeDistance_("quasiEdgeDistance", "Quasi Edge Distance", 5, 0.1, 10)
 {
    LWARNING("Created processor");
    addPort(outport_);
    
    geometryType_.addOption("hypercube", "Hypercube");
    
    addProperty(geometryType_);
    addProperty(numDimensions_);
    addProperty(numProjectionDimensions_);
    addProperty(numTiles_);
    addProperty(buildGeometry_);
    addProperty(vertexSize_);
    addProperty(drawEdges_);
    addProperty(edgeSize_);
    addProperty(distance_);
    addProperty(drawQuasiEdges_);
    addProperty(quasiEdgeDistance_);
    addProperty(axis1_);
    addProperty(axis2_);
    addProperty(rotate_);
    addProperty(randomRotation_);
    addProperty(printBasis_);
    
    // При вращении трехмерного базиса необходмо перестроить трехмерные проекции:
    // 1) Сдвинуть элементы, отображающие вершины (сферы)
    // 2) Изменить размеры сфер, т.к. меняется расстояние от точки до проекции
    // 3) Перекрасить сферы (по той же причине)
    // 4) Сдвинуть конечные вершины рёбер
    rotate_.onChange(ROTATE_BASIS);
    buildGeometry_.onChange(BUILD_GEOMETRY);
    randomRotation_.onChange(RANDOM_ROTATION);
    vertexSize_.onChange(REBUILD_PROJECTIONS);
    drawEdges_.onChange(REBUILD_PROJECTIONS);
    drawQuasiEdges_.onChange(REBUILD_PROJECTIONS);
    quasiEdgeDistance_.onChange(REBUILD_PROJECTIONS);
    edgeSize_.onChange(REBUILD_PROJECTIONS);
    distance_.onChange(REBUILD_PROJECTIONS);
    printBasis_.onChange(PRINT_BASIS);
    
    buildGeometry();
}
Пример #3
0
// Creates a unit cylinder centered at (0, 0, 0)
Cylinder::Cylinder() :
    Geometry(CYLINDER),
    center_(glm::vec3(0.f, 0.f, 0.f)),
    radius_(0.5f),
    height_(1.0f)
{
    buildGeometry();
}
Пример #4
0
osg::Node *osgpcl::PointCloudFactory::buildNode()
{
    osg::Geode *geode = new osg::Geode;
    geode->getDescriptions().push_back("PointCloud");
    osg::Geometry *geom = buildGeometry();
    if (geom == NULL)
        std::cout << "Could not build point cloud\n";
    geode->addDrawable(geom);
    return geode;
}
Пример #5
0
Mesh::Mesh(char* tlbbobjectfilename, unsigned int program)
	: mProgram(program)
	, mbSkin(false)
	, mCurrentLod(0)
{
	mProgram = program;
	mSkinLoc = glGetUniformLocation(mProgram, "use_skin");
	mBoneMatLoc = glGetUniformLocation(mProgram, "bone_mat");

	init();

	LoadObjXML(tlbbobjectfilename);
	buildGeometry();
}
Пример #6
0
TerrainClient::TerrainClient(UINT vertRows, UINT vertCols, float dx, float dz, 
		std::string heightmap, std::string tex0, std::string tex1, 
		std::string tex2, std::string blendMap, float heightScale, 
		float yOffset) : Terrain(vertRows, vertCols, dx, dz, heightmap, heightScale, yOffset)
{

	HR(D3DXCreateTextureFromFile(gd3dDevice, tex0.c_str(), &mTex0));
	HR(D3DXCreateTextureFromFile(gd3dDevice, tex1.c_str(), &mTex1));
	HR(D3DXCreateTextureFromFile(gd3dDevice, tex2.c_str(), &mTex2));
	HR(D3DXCreateTextureFromFile(gd3dDevice, blendMap.c_str(), &mBlendMap));

	buildGeometry();
	buildEffect();
}
Пример #7
0
// setter
int Tlink::update(string& data) {
	const char* header = getHeader().c_str();
	
	// get the data chunks
	vector<string> lines = BZWParser::getSectionsByHeader(header, data.c_str());
	
	if(lines[0] == BZW_NOT_FOUND)
		return 0;
	
	if(!hasOnlyOne(lines, "link"))
		return 0;
		
	// get the data to the block
	const char* linkData = lines[0].c_str();
	
	// get the name
	vector<string> names = BZWParser::getValuesByKey("name", header, linkData);
	if(names.size() > 1) {
		printf("link::update(): Error! Defined \"name\" %d times!\n", (int)names.size());
		return 0;
	}
		
	// get the from
	vector<string> froms = BZWParser::getValuesByKey("from", header, linkData);
	if(!hasOnlyOne(froms, "from"))
		return 0;
		
	// get the to
	vector<string> tos = BZWParser::getValuesByKey("to", header, linkData);
	if(!hasOnlyOne(tos, "to"))
		return 0;
		
	// superclass update
	if(!DataEntry::update(data))
		return 0;
	
	// load in the data
	name = (names.size() != 0 ? names[0] : "");
	
	teleporter* prevFrom = from;
	teleporter* prevTo = to;
	
	from = dynamic_cast< teleporter* > (Model::command( MODEL_GET, "teleporter", froms[0] ));
	to = dynamic_cast< teleporter* > (Model::command( MODEL_GET, "teleporter", tos[0] ));
	
	if( from && to && (prevFrom != from || prevTo != to) )
		buildGeometry();
	
	return 1;
}
Пример #8
0
void Geometry::masterReset(bool bufferReady) {
	rotation[0] = 0.0f;
	rotation[1] = 0.0f;
	rotation[2] = 0.0f;

	scale[0] = 1.0f;
	scale[1] = 1.0f;
	scale[2] = 1.0f;

	translate[0] = 0.0f;
	translate[1] = 0.0f;
	translate[2] = 0.0f;

	if (bufferReady) {
		buildGeometry();
	}
}
Пример #9
0
Sphere::Sphere( bool fullSphere, byte numSubDiv, float dim )
{
	setPrimitiveType( PrimitiveType::Triangles );
	
	VertexData position;
	buildGeometry( fullSphere, numSubDiv, position, dim );
	
	// Build Texture Coordinates.
	BoundingBox box;
	
	for( size_t i = 0; i < position.size(); i++ )
	{
		const Vector3& v = position[i];
		box.add(v);
	}

	Vector3 center = box.getCenter();

	std::vector<Vector3> texCoords;

	for( size_t i = 0; i < position.size(); i++ )
	{
		const Vector3& vert = position[i];
		Vector3 d = vert-center;
		d.normalize();

		// Conveert to spherical coordinates.
		//float t = d.z / sqrt(d.x*d.x+d.y*d.y+d.z*d.z);
		//float delta = acos(t);
		//float phi = atan2(d.y, d.x);

		//float u = delta / Math::PI;
		//float v = phi / 2*Math::PI;
		float u = std::asin(d.x) / PI + 0.5f;
		float v = std::asin(d.y) / PI + 0.5f;

		texCoords.push_back( Vector2(u, v) );
	}

	gb->set( VertexAttribute::Position, position );
	gb->set( VertexAttribute::TexCoord0, texCoords );
}
Пример #10
0
void ReadKkit::undump( const vector< string >& args)
{
	if ( args[1] == "kpool" )
		buildPool( args );
	else if ( args[1] == "kreac" )
		buildReac( args );
	else if ( args[1] == "kenz" )
		buildEnz( args );
	else if ( args[1] == "text" )
		buildText( args );
	else if ( args[1] == "xplot" )
		buildPlot( args );
	else if ( args[1] == "xgraph" )
		buildGraph( args );
	else if ( args[1] == "group" )
		buildGroup( args );
	else if ( args[1] == "geometry" )
		buildGeometry( args );
	else if ( args[1] == "stim" )
		buildStim( args );
	else if ( args[1] == "xcoredraw" )
		;
	else if ( args[1] == "xtree" )
		;
	else if ( args[1] == "xtext" )
		;
	else if ( args[1] == "doqcsinfo" )
		;
	else if ( args[1] == "kchan" )
		buildChan( args );
	else if ( args[1] == "xtab" )
		buildTable( args );
	else
		cout << "ReadKkit::undump: Do not know how to build '" << args[1] <<
		"'\n";
}
Пример #11
0
Terrain::Terrain(UINT vertRows, UINT vertCols, float dx, float dz, 
		std::string heightmap, std::string tex0, std::string tex1, 
		std::string tex2, std::string blendMap, float heightScale, 
		float yOffset)
{
	mVertRows = vertRows;
	mVertCols = vertCols;

	mDX = dx;
	mDZ = dz;

	mWidth = (mVertCols-1)*mDX;
	mDepth = (mVertRows-1)*mDZ;

	mHeightmap.loadRAW(vertRows, vertCols, heightmap, heightScale, yOffset);

	HR(D3DXCreateTextureFromFile(gd3dDevice, tex0.c_str(), &mTex0));
	HR(D3DXCreateTextureFromFile(gd3dDevice, tex1.c_str(), &mTex1));
	HR(D3DXCreateTextureFromFile(gd3dDevice, tex2.c_str(), &mTex2));
	HR(D3DXCreateTextureFromFile(gd3dDevice, blendMap.c_str(), &mBlendMap));

	buildGeometry();
	buildEffect();
}
Пример #12
0
Mesh::Mesh(char* ogrematerialfilename, char* ogremeshfilenamexml, unsigned int program, char* ogreskeletonfilenamexml)
	: mProgram(program)
	, mbSkin(false)
	, mCurrentLod(0)
{
	init();
	mProgram = program;
	mSkinLoc = glGetUniformLocation(mProgram, "use_skin");
	mBoneMatLoc = glGetUniformLocation(mProgram, "bone_mat");
	
	if(ogreskeletonfilenamexml)
	{
		mAnimation.LoadSkeletonXML(ogreskeletonfilenamexml);
		if(mAnimation.animations.size() > 0)
		{
			mbSkin = true;
			mAnimIndex = mAnimation.animations.size()-1;
			changeAnim();
		}	
	}
	
	LoadOgreXML(ogrematerialfilename, ogremeshfilenamexml);
	buildGeometry();
}
Пример #13
0
// Creates a mesh structure with center at the origin
Mesh::Mesh() :
	Geometry(MESH),
	center_(glm::vec3(0.f, 0.f, 0.f))
{
	buildGeometry();
}
Пример #14
0
QtLogo::QtLogo(QObject *parent, int divisions, qreal scale)
    : QObject(parent)
    , geom(new Geometry())
{
    buildGeometry(divisions, scale);
}
Пример #15
0
Board::Board(QObject *parent, qreal scale)
    : QObject(parent)
    , geom(new Geometry())
{
    buildGeometry(scale);
}
phonemodel::phonemodel(QObject *parent, int divisions, qreal scale)
    : QObject(parent)
    , geom(new Geometry())
{
    buildGeometry(divisions, scale);
}
Пример #17
0
bool MyApp::initialise(HINSTANCE hInstance, int cmdShow) 
{
	if (!DxApp::initialise(hInstance, cmdShow, 1024, 768))
		return false;

	// Build FXs
	if (FAILED(buildFX())) {
		MessageBox(hWnd(), L"Cannot create effects", L"Error", MB_OK|MB_ICONERROR);
		return false;
	}

	// Build Geometry
	if (FAILED(buildGeometry())) {
		MessageBox(hWnd(), L"Cannot create geometry", L"Error", MB_OK|MB_ICONERROR);
		return false;
	}

	// Textures
	HRESULT hr = D3DX11CreateShaderResourceViewFromFileA(_dxDev, (PATH_MEDIA+string("noise_texture.jpg")).c_str(), 0, 0, &m_srvRandom, 0);
	if (FAILED(hr)) {
		MessageBoxA(0, "Error loading random texture", 0, 0);
		return false;
	}


	// flags for heightmap texture
	D3DX11_IMAGE_LOAD_INFO loadInfo;
	loadInfo.Width = D3DX11_DEFAULT;
	loadInfo.Height = D3DX11_DEFAULT;
	loadInfo.Depth = D3DX11_DEFAULT;
	loadInfo.FirstMipLevel = D3DX11_DEFAULT;
	loadInfo.MipLevels = D3DX11_DEFAULT;
	loadInfo.Usage = (D3D11_USAGE)D3DX11_DEFAULT;
	loadInfo.BindFlags =  D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET; //D3DX11_DEFAULT;
	loadInfo.CpuAccessFlags = loadInfo.MiscFlags = D3DX11_DEFAULT;
	loadInfo.Format = DXGI_FORMAT_R32G32B32A32_FLOAT           ;
	loadInfo.Filter = D3DX11_DEFAULT;
	loadInfo.MipFilter = D3DX11_DEFAULT;
	loadInfo.pSrcInfo = NULL;

	hr = D3DX11CreateShaderResourceViewFromFileA(_dxDev, (PATH_MEDIA+string("heightmap.jpg")).c_str(), &loadInfo, 0, &m_srvTerrainHmap, 0);
	if (FAILED(hr)) {
		MessageBoxA(0, "Error loading terrain heightmap", 0, 0);
		return false;
	}

	hr = D3DX11CreateShaderResourceViewFromFileA(_dxDev, (PATH_MEDIA+string("normalmap.bmp")).c_str(), 0, 0, &m_srvTerrainNmap, 0);
	if (FAILED(hr)) {
		MessageBoxA(0, "Error loading terrain normalmap", 0, 0);
		return false;
	}

	hr = D3DX11CreateShaderResourceViewFromFileA(_dxDev, (PATH_MEDIA+string("space_ship.jpg")).c_str(), 0, 0, &m_srvSpaceship, 0);
	if (FAILED(hr)) {
		MessageBoxA(0, "Error loading spaceship texture", 0, 0);
		return false;
	}
	

	// Dynamic terrain
	ID3D11Resource* resHmap = 0;
	m_srvTerrainHmap->GetResource(&resHmap);

	D3D11_RENDER_TARGET_VIEW_DESC rtd;
	rtd.Format = DXGI_FORMAT_R32G32B32A32_FLOAT           ;
	rtd.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
	rtd.Texture2D.MipSlice = 0;
	hr = _dxDev->CreateRenderTargetView(resHmap, &rtd, &m_rtvDynamicHmap);
	if (FAILED(hr)) {
		MessageBoxA(0, "Error creating hmap rtv", 0, 0);
		return false;
	}
	////////////////////////////////////

	//rs_Wireframe
	D3D11_RASTERIZER_DESC rsd;
	ZeroMemory(&rsd, sizeof(rsd));
	rsd.FillMode = D3D11_FILL_WIREFRAME;
	rsd.CullMode = D3D11_CULL_BACK;
	rsd.DepthClipEnable = true;
	hr = _dxDev->CreateRasterizerState(&rsd, &rs_Wireframe);
	if (FAILED(hr))
		MessageBoxA(0, "error creating rs Wireframe", 0, 0);


	// Camera
	m_camera.setProjection(0.7f, width()/(float)height(), 1.0f, 500.0f);
	m_camera.setPosVector(0.0f, 30.0f, 0.0f);
	m_camera.setRightVector(1.0f, 0.0f, 0.0f);
	m_camera.setUpVector(0.0f,   1.0f, 0.0f);
	m_camera.setLookVector(0.0f, 0.0f, 1.0f);
	

	// myAlien
	myAlien.setPos(0,5,0);
	myAlien.type = AlienTypes::GS_ALIEN;
	myAlien.mesh = alienMesh;

	// Textures/Views for Implicit surfaces
	if (!createImplicitResources())
		return false;

	// Tessellation - control point(s) buffer

		
	//____ check for DX11 support__ 
	if (dx11Support())
	{
		// Single control point vertex buffer
		D3D11_BUFFER_DESC bdsc;
		bdsc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
		bdsc.CPUAccessFlags = 0;
		bdsc.MiscFlags = 0;
		bdsc.StructureByteStride = 0;
		bdsc.Usage = D3D11_USAGE_IMMUTABLE;


#ifdef _TESS_INDEX_BUFFER
		// Version 2 : 6 vertices - W/ Index Buffer
		const int numVertices = 6;
		Vertex ctrl_point[numVertices];
		bdsc.ByteWidth = sizeof(Vertex)*numVertices;
		ZeroMemory(ctrl_point, sizeof(Vertex)*numVertices); 

		ctrl_point[0].position = XMFLOAT3( 0.0f,  1.0f,  0.0f); // top
		ctrl_point[1].position = XMFLOAT3(-1.0f,  0.0f,  1.0f);	//       1 ------> 2 (+,+)
		ctrl_point[2].position = XMFLOAT3( 1.0f,  0.0f,  1.0f); //      
		ctrl_point[3].position = XMFLOAT3(-1.0f,  0.0f, -1.0f); // 
		ctrl_point[4].position = XMFLOAT3( 1.0f,  0.0f, -1.0f); // (-,-) 3 ------> 4
		ctrl_point[5].position = XMFLOAT3( 0.0f, -1.0f,  0.0f); // bottom

		UINT indices[24];
		//			top-front
		indices[0] = 0; indices[1] = 4; indices[2] = 3;
		//			top-right
		indices[3] = 0; indices[4] = 2; indices[5] = 4;
		//			top-left
		indices[6] = 0; indices[7] = 3; indices[8] = 1;
		//			top-back
		indices[9] = 0; indices[10] = 1; indices[11] = 2;
		//			bottom-front
		indices[12] = 5; indices[13] = 3; indices[14] = 4;
		//			bottom-right
		indices[15] = 5; indices[16] = 4; indices[17] = 2;
		//			bottom-left
		indices[18] = 5; indices[19] = 1; indices[20] = 3;
		//			bottom-back
		indices[21] = 5; indices[22] = 2; indices[23] = 1;

		D3D11_BUFFER_DESC idsc;
		idsc.BindFlags = D3D11_BIND_INDEX_BUFFER;
		idsc.CPUAccessFlags = 0;
		idsc.MiscFlags = 0;
		idsc.StructureByteStride = 0;
		idsc.Usage = D3D11_USAGE_IMMUTABLE;
		idsc.ByteWidth = sizeof(UINT) * 24;
		
		D3D11_SUBRESOURCE_DATA ibdata;
		ibdata.pSysMem = indices;
		ibdata.SysMemPitch = ibdata.SysMemSlicePitch = 0;

		// create index buffer
		hr = _dxDev->CreateBuffer(&idsc, &ibdata, &m_ibControlPoints);
		

#else
		// Version 1 : 24 vertices - No Index Buffer
		const int numVertices = 3*8;  // triangle list - 8 triangles
		Vertex ctrl_point[numVertices];
		bdsc.ByteWidth = sizeof(Vertex) * numVertices; // three control points
		ZeroMemory(ctrl_point, sizeof(Vertex)*numVertices); // octahedron
		// CW
		// top - front
		ctrl_point[0].position = XMFLOAT3( 0.0f, 1.0f,  0.0f);
		ctrl_point[1].position = XMFLOAT3( 1.0f, 0.0f, -1.0f);
		ctrl_point[2].position = XMFLOAT3(-1.0f, 0.0f, -1.0f);
		// top - right
		ctrl_point[3].position = XMFLOAT3( 0.0f, 1.0f,  0.0f);
		ctrl_point[4].position = XMFLOAT3( 1.0f, 0.0f,  1.0f);
		ctrl_point[5].position = XMFLOAT3( 1.0f, 0.0f, -1.0f);
		// top - left
		ctrl_point[6].position = XMFLOAT3( 0.0f, 1.0f,  0.0f);
		ctrl_point[7].position = XMFLOAT3(-1.0f, 0.0f, -1.0f);
		ctrl_point[8].position = XMFLOAT3( -1.0f, 0.0f, 1.0f);
		// top - back
		ctrl_point[9].position = XMFLOAT3( 0.0f, 1.0f,  0.0f);
		ctrl_point[10].position = XMFLOAT3(-1.0f, 0.0f,  1.0f);
		ctrl_point[11].position = XMFLOAT3( 1.0f, 0.0f,  1.0f);
		
		// bottom - front
		ctrl_point[12].position = XMFLOAT3( 0.0f, -1.0f,  0.0f);
		ctrl_point[13].position = XMFLOAT3(-1.0f,  0.0f, -1.0f);
		ctrl_point[14].position = XMFLOAT3( 1.0f,  0.0f, -1.0f);
		// bottom - right
		ctrl_point[15].position = XMFLOAT3( 0.0f, -1.0f,  0.0f);
		ctrl_point[16].position = XMFLOAT3( 1.0f,  0.0f, -1.0f);
		ctrl_point[17].position = XMFLOAT3( 1.0f,  0.0f,  1.0f);
		// bottom - left
		ctrl_point[18].position = XMFLOAT3( 0.0f, -1.0f,  0.0f);
		ctrl_point[19].position = XMFLOAT3(-1.0f,  0.0f,  1.0f);
		ctrl_point[20].position = XMFLOAT3(-1.0f,  0.0f, -1.0f);
		// bottom - back
		ctrl_point[21].position = XMFLOAT3( 0.0f, -1.0f,  0.0f);
		ctrl_point[22].position = XMFLOAT3( 1.0f,  0.0f,  1.0f);
		ctrl_point[23].position = XMFLOAT3(-1.0f,  0.0f,  1.0f);
#endif
	
		D3D11_SUBRESOURCE_DATA bdata;
		bdata.pSysMem = ctrl_point;
		bdata.SysMemPitch = bdata.SysMemSlicePitch = 0;

		hr = _dxDev->CreateBuffer(&bdsc, &bdata, &m_vbControlPoints);
		if (FAILED(hr)) {
			MessageBoxA(0, "Error creating control points buffer", 0, 0);
			return false;
		}

		// Bezier surface effect
		if (!createEffect((PATH_SHADERS+string("tessBezierSurface.fxo")).c_str(), &m_fxTessBezierSurface))
			MessageBoxA(0, "Error creating bezSurface effect", 0, 0);




		
		// PSP surface effect
		if (!createEffect((PATH_SHADERS+string("tessPSPSurface.fxo")).c_str(), &m_fxTessPSPSurface))
			MessageBoxA(0, "Error creating pspSurface effect", 0, 0);

		// Sphere effect
		if (!createEffect((PATH_SHADERS+string("tessSphere.fxo")).c_str(), &m_fxTessSphere))
			MessageBoxA(0, "Error creating tessSphere effect", 0, 0);

		// Mesh effect
		if (!createEffect((PATH_SHADERS+string("tessMesh.fxo")).c_str(), &m_fxTessMesh))
			MessageBoxA(0, "Error creating tessMesh effect", 0, 0);

		// Terrain effect
		if (!createEffect((PATH_SHADERS+string("tessTerrain.fxo")).c_str(), &m_fxTessTerrain))
			MessageBoxA(0, "Error creating tessMesh effect", 0, 0);
		
		

		///____SINGLE_________

		ZeroMemory(&bdsc, sizeof(bdsc));
		bdsc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
		bdsc.ByteWidth = sizeof(Vertex);
		bdsc.Usage = D3D11_USAGE_IMMUTABLE;
		Vertex vSingle[1];
		ZeroMemory(&vSingle, sizeof(vSingle));
		ZeroMemory(&bdata, sizeof(bdata));
		bdata.pSysMem = vSingle;
		hr = _dxDev->CreateBuffer(&bdsc, &bdata, &m_vbSingle);
		if (FAILED(hr)) MessageBoxA(0, "Error creating single VB", 0, 0);

		if (!createEffect((PATH_SHADERS+string("tessSingle.fxo")).c_str(), &m_fxTessSingle))
			MessageBoxA(0, "Error creating tessSingle effect", 0, 0);
		//_____________________
		
	}

	

	mySphere.tessFactor = 5;
	mySphere.radius = 10.0f;

	setupScene();

	// GUI
	TwInit(TW_DIRECT3D11, _dxDev);

	TwWindowSize(width(), height());
	TwBar* myBar;
	myBar = TwNewBar("myBar");
	

	TwAddButton(myBar, "Play", callback_Play, (void*)this, 0);
	TwAddButton(myBar, "Explode", callback_Explode, (void*)this, 0);


	



	// __________GS Alien
	TwAddVarRW(myBar, "Thorn length", TW_TYPE_FLOAT, &glb_fThornLength, "group=GS_Alien min=0.0 max=1.0 step=0.05");


	// __________Selected Tessellated Object
	
	// Partitioning
	TwEnumVal  twTessPartitioning[] = { { TessPartitioning::FRAC_EVEN, "Frac. Even" }, { TessPartitioning::FRAC_ODD, "Frac. Odd" }, 
										{ TessPartitioning::INTEGER, "Integer" }, { TessPartitioning::POW2 , "Pow2" } };

	TwType twTessPartition;
	twTessPartition = TwDefineEnum("TessPartitioning", twTessPartitioning, 4);
	TwAddVarRW(myBar, "Partitioning Method", twTessPartition, &glb_selectedTessPartitioning, "group=Tessellated_Objects");
	
	// Wireframe
	TwAddVarRW(myBar, "Wireframe", TW_TYPE_BOOL8, &glb_tessWireframe, "group=Tessellated_Objects");
	// Inside Factor
	TwAddVarRW(myBar, "Inside Factor", TW_TYPE_FLOAT, &glb_insideTess, "group=Tessellated_Objects min=1 max=64 step=1");
	// Edge Factor
	TwAddVarRW(myBar, "Edge Factor", TW_TYPE_FLOAT, &glb_edgeTess, "group=Tessellated_Objects min=1 max=64 step=1");
	// Common inside/edge factor
	TwAddVarRW(myBar, "Common Factor", TW_TYPE_FLOAT, &glb_SingleTessFactor, "group=Tessellated_Objects min=1 max=64 step=1");
	TwAddVarRW(myBar, "Single Factor", TW_TYPE_BOOL8, &glb_bSingleTessFactor, "");
	/////////////////////
	
	TwAddVarRW(myBar, "Terrain Height", TW_TYPE_FLOAT, &glb_terrainHeight, "group=Terrain min=0.0 max=1.0 step=0.05");
	TwAddVarRW(myBar, "Patches Dimension", TW_TYPE_INT32, &glb_terrainPatchDim, "group=Terrain min=1 max=10 step=1");

	TwAddVarRW(myBar, "Min Tess. Factor", TW_TYPE_FLOAT, &glb_terrainMinTessFactor, "group=Terrain min=1 max=63 step=1");
	TwAddVarRW(myBar, "Max Tess. Factor", TW_TYPE_FLOAT, &glb_terrainMaxTessFactor, "group=Terrain min=1 max=63 step=1");

	TwAddVarRW(myBar, "Min View Dist", TW_TYPE_FLOAT, &glb_terrainMinViewDist, "group=Terrain min=0.0 max=300.0 step=1.05");
	TwAddVarRW(myBar, "Max View Dist", TW_TYPE_FLOAT, &glb_terrainMaxViewDist, "group=Terrain min=0.0 max=300.0 step=1.05");

	TwAddVarRW(myBar, "Debug View", TW_TYPE_BOOL8, &glb_bTerrainDebugView, "group=Terrain");

	// Terrain Editing
	TwAddVarRW(myBar, "Power", TW_TYPE_BOOL8, &glb_bOn, "group=Terrain_Edit");
	TwAddVarRW(myBar, "Additive", TW_TYPE_BOOL8, &glb_bAdditive, "group=Terrain_Edit");
	TwAddVarRW(myBar, "Range", TW_TYPE_FLOAT, &glb_Range, "group=Terrain_Edit min=0.0 max=1.0 step=0.05");

	// Light
	TwAddVarRW(myBar, "Light Direction", TW_TYPE_DIR3F, &glb_lightDir, "");
	TwAddVarRW(myBar, "Light Color", TW_TYPE_COLOR4F, &glb_lightColor, "");

	// Implicit Depth
	TwAddVarRW(myBar, "Implicit Depth", TW_TYPE_INT32, &glb_iImplicitDepth, "group=Implicit min=1 max=3");

	TwAddVarRW(myBar, "Wireframe Mode", TW_TYPE_BOOL8, &glb_bWireframe, "");
	
	TwAddVarRW(myBar, "Sphere From Mesh", TW_TYPE_BOOL8, &glb_bSphereMesh, "");


	return true;
}
Пример #18
0
SceneElement::SceneElement(QObject *parent, int divisions, qreal scale)
    : QObject(parent)
    , geom(new Geometry())
{
    buildGeometry(divisions, scale);
}