C++ 如何在OpenGL中显示/绘制.ply对象?

C++ 如何在OpenGL中显示/绘制.ply对象?,c++,opengl,ply-file-format,C++,Opengl,Ply File Format,我正试图让OpenGL绘制我正在加载的图形OPENFILENAME。我现在得到的是:我可以显示注释、顶点、多少面等等,但我无法绘制图形,也不知道如何绘制。我可以画其他预定的数字,但不是我试图打开的那些 这就是我初始化所有内容的地方: case WM_CREATE: hDC = GetDC(hWnd); hRC=wglCreateContext(hDC); wglMakeCurrent(hDC,hRC); g_hwndDlg = Cre

我正试图让OpenGL绘制我正在加载的图形
OPENFILENAME
。我现在得到的是:我可以显示注释、顶点、多少面等等,但我无法绘制图形,也不知道如何绘制。我可以画其他预定的数字,但不是我试图打开的那些


这就是我初始化所有内容的地方:

case WM_CREATE:
     hDC = GetDC(hWnd);
        hRC=wglCreateContext(hDC);
        wglMakeCurrent(hDC,hRC);
         g_hwndDlg = CreateDialog(hInst,MAKEINTRESOURCE(IDD_DIALOG1),hWnd,DialogProc);
        Figure = new DrawFigure();
        initGL();
         break;
    Figure::Figure(){
}
void Figure::Parameters(float x,float y,float z)
{
     this->x1=x;
    this->y1=y;
    this->z1=z;
}
void Figure::Draw()
{
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glLoadIdentity();
    gluLookAt(0.0,0.0,4.0,0.0,0.0,0.0,0.0,1.0,0.0);

    glBegin(GL_TRIANGLES);

    glNormal3f(x1,y1,z1);

    glVertex3f(x1,y1,z1);
    glEnd();
}
x1,y1,z1 are declared in Figure.h
这就是我发现我打开的元素有什么的地方:

  /* go through each kind of element that we learned is in the file */
  /* and read them */

  for (i = 0; i < nelems; i++) {
    /* get the description of the first element */
    elem_name = elist[i];
    plist = ply_get_element_description (ply, elem_name, &num_elems, &nprops);
    int el=sprintf(szFile,"element %s %d\n", elem_name, num_elems);
    /* print the name of the element, for debugging */
        TextOut(hDC,150,0+i*20,szFile,el);
    /* if we're on vertex elements, read them in */
    if (equal_strings ("vertex", elem_name)) {
      /* create a vertex list to hold all the vertices */
      vlist = (Vertex **) malloc (sizeof (Vertex *) * num_elems);
      /* set up for getting vertex elements */
      ply_get_property (ply, elem_name, &vert_props[0]);
      ply_get_property (ply, elem_name, &vert_props[1]);
      ply_get_property (ply, elem_name, &vert_props[2]);


 /* grab all the vertex elements */
      for (j = 0; j < num_elems; j++) {
        int move=10;
        /* grab and element from the file */
        vlist[j] = (Vertex *) malloc (sizeof (Vertex));
        ply_get_element (ply, (void *) vlist[j]);


        int vert=sprintf(szFile,"vertex: %g %g %g", vlist[j]->x, vlist[j]->y, vlist[j]->z);
        /* print out vertex x,y,z for debugging */
        TextOut(hDC,600,move+j*20,szFile,vert);

        Figure->Parameters(vlist[j]->x, vlist[j]->y, vlist[j]->z);
      }
    }
我尽可能地解释自己;如果你认为它还需要更多的解释,请告诉我,我会尝试以不同的方式解释它


对,我忘了解释我猜我要画的图形…我不知道会是哪一个图形,因为我用OPENFILENAME打开一个随机图形并画它,我用三角形,因为我认为三角形可以画任何东西,而且我试着在类参数中询问我正在处理的顶点的数量并制作一个在绘制类中使用“for”,但它不起作用

您只需在开始/结束之间指定一个顶点。您至少需要3个顶点来指定一个三角形。如果您想要一个完整的buncha三角形,则需要更多顶点。您还需要以下内容:

void Figure::Parameters(float x, float y, float z)
{
    m_vertices.push_back(myVertex(x, y, z));
}

void Figure::Draw()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glLoadIdentity();
    gluLookAt(0.0,0.0,4.0,0.0,0.0,0.0,0.0,1.0,0.0);

    glBegin(GL_TRIANGLES);

    assert(m_vertices.size() % 3 == 0); // since we're drawing triangles
    for(size_t i=0; i<m_vertices.size(); i++)
    {
        glNormal3f(m_vertices[i].x,m_vertices[i].y,m_vertices[i].z);
        glVertex3f(m_vertices[i].x,m_vertices[i].y,m_vertices[i].z);
    }

    glEnd();
}
void Figure::参数(浮点x、浮点y、浮点z)
{
向后推(我的顶点(x,y,z));
}
void Figure::Draw()
{
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
glLoadIdentity();
gluLookAt(0.0,0.0,4.0,0.0,0.0,0.0,0.0,1.0,0.0);
glBegin(GL_三角形);
断言(m_顶点.size()%3==0);//因为我们正在绘制三角形

对于(size_t i=0;iyeah),问题是我不知道它是否会是一个三角形,它可以是任何数字:我也试着把它这样放(i=0;它只是不断将相同的xyz传递给OpenGL。这将成为一个三角形,其中所有顶点都是相同的点。最好的情况是,你在屏幕上看到一个点,最坏的情况是,你什么也看不到。我不熟悉.ply格式,但必须有一个三角形列表,通过顶点列表或索引顶点列表。这就是你应该做的在for-loop中使用。是的,我实际上使用了一个顶点列表,我尝试过使用line、line、line\u loop,但它们都没有绘制任何>。是的,但是您只使用一个特定的xyz值进行渲染,即您调用Figure::Parameters时使用的最后一个xyz值。如果有,您需要保存传递给Figure::Parameters的所有顶点。