StelGeodesicGrid::StelGeodesicGrid(const int lev) : maxLevel(lev<0?0:lev), lastMaxSearchlevel(-1) { if (maxLevel > 0) { triangles = new Triangle*[maxLevel+1]; int nr_of_triangles = 20; for (int i=0;i<maxLevel;i++) { triangles[i] = new Triangle[nr_of_triangles]; nr_of_triangles *= 4; } for (int i=0;i<20;i++) { const int *const corners = icosahedron_triangles[i].corners; initTriangle(0,i, icosahedron_corners[corners[0]], icosahedron_corners[corners[1]], icosahedron_corners[corners[2]]); } } else { triangles = 0; } cacheSearchResult = new GeodesicSearchResult(*this); }
int main(void) { GLFWwindow* window; /* Initialize the library */ if (!glfwInit()) return -1; //使用OpenGL 3.2 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); /* Create a windowed mode window and its OpenGL context */ window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL); if (!window) { glfwTerminate(); return -1; } /* Make the window's context current */ glfwMakeContextCurrent(window); if(false==LoadImg("/Users/wistoneqqx/Documents/opengl/github/texture-maps-gl7/texture-maps/test01.jpg",0)) printf("加载图片1失败!\n"); if(false==LoadImg("/Users/wistoneqqx/Documents/opengl/github/texture-maps-gl7/texture-maps/test02.jpg",1)) printf("加载图片2失败!\n"); initShader(); initTriangle(); /* Loop until the user closes the window */ while (!glfwWindowShouldClose(window)) { /* Render here */ glClearColor(0.0f,0.0f,0.0f,0.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); drawTriangle(); /* Swap front and back buffers */ glfwSwapBuffers(window); /* Poll for and process events */ glfwPollEvents(); } glfwDestroyWindow(window); glfwTerminate(); return 0; }
void init(void) { mapState.border = createPanelBorder(X_BORD, Y_BORD, WIDTH_BORD); mapState.button_rect = initRect(); mapState.button_triangle = initTriangle(); mapState.button_line = initLine(); mapState.button_circle = initCircle(); mapState.points_storage = createLinkedList(); mapState.edges_storage = createLinkedList(); }
void StelGeodesicGrid::initTriangle(int lev,int index, const Vec3f &c0, const Vec3f &c1, const Vec3f &c2) { Q_ASSERT((c0^c1)*c2 >= 0.0); Triangle &t(triangles[lev][index]); t.e0 = c1+c2; t.e0.normalize(); t.e1 = c2+c0; t.e1.normalize(); t.e2 = c0+c1; t.e2.normalize(); lev++; if (lev < maxLevel) { index *= 4; initTriangle(lev,index+0,c0,t.e2,t.e1); initTriangle(lev,index+1,t.e2,c1,t.e0); initTriangle(lev,index+2,t.e1,t.e0,c2); initTriangle(lev,index+3,t.e0,t.e1,t.e2); } }
Convexe2D::Convexe2D(const QVector<Vector2D>& points) { if(points.size() < 3) { _points = points; initMinMaxCentre(); setLinked(true); return; } int i0, i1, i2; if(!initNonAlignee(points, i0,i1,i2)) //si tous les points sont alignés { _points.push_back(points[i0]); _points.push_back(points[i1]); _min = min(points[i0], points[i1]); _max = max(points[i0], points[i1]); _centre =(_min+_max)/2; setLinked(true); return; } initTriangle(points[i0],points[i1],points[i2]); for(int i=i2+1; i< points.size(); i++){ ajoutPointConvex(points[i]); #ifdef DEBUG_PROBLEME if(i == -1) //pour le débug, retrouver un indice précis où il y a un problème std::cout << "ici" << std::endl; else for(int i3 = 0; i3 < getNbPoints(); i3++) { if(inHalfSpaceDroit(_points[i3], _points[(i3+1)%getNbPoints()], _points[(i3+2)%getNbPoints()])) std::cout << "problème " << i3 << " -> " << getNbPoints() << " => " << i << std::endl; } #endif } initMinMaxCentre(); setLinked(true); }
Convexe2D::Convexe2D(const Vector2D& point0, const Vector2D& point1, const Vector2D& point2) { initTriangle(point0, point1, point2); }