Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 来自x、y和z文本文件的OpenGL线框_C++_Opengl_Opengl 1.x - Fatal编程技术网

C++ 来自x、y和z文本文件的OpenGL线框

C++ 来自x、y和z文本文件的OpenGL线框,c++,opengl,opengl-1.x,C++,Opengl,Opengl 1.x,我有一个具有3个坐标的文件,我可以将其渲染为点、线、三角形或任何基本体。 我想构建此文件的线框模型,我应该更改或添加什么以将其视为线框 样本: void draw() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glHint(GL_PERSPECTIV

我有一个具有3个坐标的文件,我可以将其渲染为点、线、三角形或任何基本体。 我想构建此文件的线框模型,我应该更改或添加什么以将其视为线框

样本:

void draw()
{   
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glClearDepth(1.0f);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
    glOrtho(-50.0,50.0,-50.0,50.0,-50.0,50.0);  
    glColor4f(1.0f,1.0f,1.0f,1.0f);         
    glPointSize(3); 
    glLineWidth(3);
    glColor3f(1.0f,1.0f,1.0f);
    for(int i=0; i<points; i++)
    {   
        glBegin(GL_LINES);
        glNormal3f(0.0f, 0.0f, 1.0f);
        glVertex3d(vList[i][0],vList[i][1],vList[i][2]);
        glEnd();             
    }
}
void draw()
{   
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
glClearDepth(1.0f);
glEnable(GLU深度试验);
glDepthFunc(GL_LEQUAL);
glHint(GL\u透视图\u校正\u提示,GL\u最佳);
格洛托(-50.0,50.0,-50.0,50.0,-50.0,50.0);
glColor4f(1.0f、1.0f、1.0f、1.0f);
gl点大小(3);
线宽(3);
GL3F(1.0f,1.0f,1.0f);

对于(int i=0;i这将永远不会产生任何输出:

for(int i=0; i<points; i++)
{   
    glBegin(GL_LINES);
    glNormal3f(0.0f, 0.0f, 1.0f);
    glVertex3d(vList[i][0],vList[i][1],vList[i][2]);
    glEnd();             
}
这几乎会产生你想要的结果,但实际上会显示每一条线,因为它将你发送的每一对视为一条线。因此它会在点1和2之间,然后在点3和4之间绘制一条线。这是因为GL_线意味着“将我发送的每一对解释为一条完全新的线,与以前的顶点无关。”

你真正想要的是:

glBegin(GL_LINE_STRIP);
for(int i=0; i<points; i++)
{   
    glNormal3f(0.0f, 0.0f, 1.0f);
    glVertex3d(vList[i][0],vList[i][1],vList[i][2]);
}
glEnd();             
glBegin(GL\u线\u带);

对于(int i=0),IYU不应该使用旧的和不推荐的固定函数流水线函数。线框只是线条。隐藏表面的去除是我唯一能想到的,你想考虑的。例如,你想看一个球面的背面1/2吗?这应该有帮助:@你知道的,FultFrUnTalntuuy,<代码>
已被弃用,对吗?@Vallentin:glPolygonMode()未被弃用。学习你的诀窍;只有GL_FRONT/GL_BACK PolygonModes已被弃用,GL_FRONT_和_BACK调用在Khronos OpenGL 4中仍然存在,没有任何弃用的迹象亲爱的杰里科,完全同意你的答案,并且已经使用了GL_LINE_STRIP,结果是分离的行(连接所有点),我实际上想要的是输出线框或网格,而不仅仅是线。谢谢如果你想要一个连接线的网格,那么你需要知道各个连接的索引,即边。你可能需要在问题中发布更多关于文件格式和几何体如何设计的信息。文件格式类似于这样,我读取一幅图像,提取像素信息位置和强度为XYZ,x和y为像素位置,z为像素强度值,然后将XYZ保存在文本文件中。使用vc++和OpenGL读取XYZ文件,将其可视化为点、线等的三维云。这就是整个想法,我尝试将文本文件保存为行然后,在这之后的列将其视为网格和工作,但我认为这不是正确的方法。
glBegin(GL_LINE_STRIP);
for(int i=0; i<points; i++)
{   
    glNormal3f(0.0f, 0.0f, 1.0f);
    glVertex3d(vList[i][0],vList[i][1],vList[i][2]);
}
glEnd();