首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OBJ文件的OpenGL wireFrame呈现

OBJ文件的OpenGL wireFrame呈现
EN

Stack Overflow用户
提问于 2013-11-26 15:40:00
回答 1查看 822关注 0票数 1

我正在编写一个程序,它只需要读取一个.obj文件并以有线帧模式呈现它。我已经阅读了我想要呈现的.obj文件(正确的-我相信)。但我有点问题..。它应该在铁丝网里,但是相反.(下图)

以下是代码:

代码语言:javascript
复制
    public void render(GL gl){
    float xMiddle = (m.getXVertexMax() + m.getXVertexMin())/2;
    float yMiddle = (m.getYVertexMax() + m.getYVertexMin())/2;
    float zMiddle = (m.getZVertexMax() + m.getZVertexMin())/2;

    gl.glScalef(1/(m.getXVertexMax() - m.getXVertexMin()), 1, 1);
    gl.glScalef(1, 1/(m.getYVertexMax() - m.getYVertexMin()), 1);
    gl.glScalef(1, 1, 1/(m.getZVertexMax() - m.getZVertexMin()));

    gl.glBegin(GL.GL_TRIANGLES);
    {
        gl.glEnable(GL.GL_DEPTH_TEST);
        gl.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_LINES);
        for(int i = 0; i < m.faces.size(); i++ ){
            Vector3f n1 = m.normals.get(m.faces.get(i).getNormalIndices()[0] - 1); 
            Vector3f v1 = m.vertices.get(m.faces.get(i).getVertexIndices()[0] - 1);
            gl.glVertex3f(v1.x - xMiddle, v1.y - yMiddle, v1.z - zMiddle);
            gl.glNormal3f(n1.x, n1.y, n1.z);


            Vector3f n2 = m.normals.get(m.faces.get(i).getNormalIndices()[1] - 1); 
            Vector3f v2 = m.vertices.get(m.faces.get(i).getVertexIndices()[1] - 1);
            gl.glVertex3f(v2.x - xMiddle, v2.y - yMiddle, v2.z - zMiddle);
            gl.glNormal3f(n2.x, n2.y, n2.z);




            Vector3f n3 = m.normals.get(m.faces.get(i).getNormalIndices()[2] - 1); 
            Vector3f v3 = m.vertices.get(m.faces.get(i).getVertexIndices()[2] - 1);
            gl.glVertex3f(v3.x - xMiddle, v3.y - yMiddle, v3.z - zMiddle);
            gl.glNormal3f(n3.x, n3.y, n3.z);

        }
    }
    gl.glEnd(); 
}

注意:代码中的Vector3f是我创建的数据结构。

我已经试过了我能找到的所有东西,但是它仍然不会把图像渲染成线框!

有人能帮忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-26 15:44:02

代码语言:javascript
复制
gl.glBegin(GL.GL_TRIANGLES);
{
    gl.glEnable(GL.GL_DEPTH_TEST);
    gl.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_LINES);
    ...

很少有GL命令在glBegin()/glEnd()块中有效:

在glBegin和glEnd之间只能使用GL命令的子集。这些命令是glVertex、glColor、glSecondaryColor、glIndex、glNormal、glFogCoord、glTexCoord、glMultiTexCoord、glVertexAttrib、glEvalCoord、glEvalPoint、glArrayElement、glMaterial和glEdgeFlag。此外,使用glCallList或glEdgeFlag执行仅包含前面命令的显示列表是可以接受的。如果在glBegin和glEnd之间执行任何其他GL命令,则设置错误标志并忽略该命令。

glEnable()glPolygonMode()不在名单上。

将它们移出您的glBegin()块。

代码语言:javascript
复制
    gl.glVertex3f(v1.x - xMiddle, v1.y - yMiddle, v1.z - zMiddle);
    gl.glNormal3f(n1.x, n1.y, n1.z);

走错路了。你想要正常,那么顶点:

代码语言:javascript
复制
    gl.glNormal3f(n1.x, n1.y, n1.z);
    gl.glVertex3f(v1.x - xMiddle, v1.y - yMiddle, v1.z - zMiddle);

glNormal()只设置当前的正常值,glVertex()实际上是将其发送到管道下。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20221514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档