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); }
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(); }
// 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(); }
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; }
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(); }
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(); }
// 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; }
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(); } }
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 ); }
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"; }
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(); }
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(); }
// Creates a mesh structure with center at the origin Mesh::Mesh() : Geometry(MESH), center_(glm::vec3(0.f, 0.f, 0.f)) { buildGeometry(); }
QtLogo::QtLogo(QObject *parent, int divisions, qreal scale) : QObject(parent) , geom(new Geometry()) { buildGeometry(divisions, scale); }
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); }
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; }
SceneElement::SceneElement(QObject *parent, int divisions, qreal scale) : QObject(parent) , geom(new Geometry()) { buildGeometry(divisions, scale); }