代码之家  ›  专栏  ›  技术社区  ›  Nick Heiner

OpenGL:模型显示不正确。(需要固定牵引距离?)

  •  0
  • Nick Heiner  · 技术社区  · 14 年前

    我刚接触OpenGL。我在和乔格玩。

    我真的不知道怎么做。这是我的渲染代码:

    private void render(GLAutoDrawable drawable) {
            GL2 gl = drawable.getGL().getGL2();
            GLUgl2 glu = new GLUgl2();
    
            gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);
    
            gl.glMatrixMode(GL2.GL_MODELVIEW);
            gl.glLoadIdentity();
    
            // Position the camera
            glu.gluLookAt(cameraPos.x, cameraPos.y, cameraPos.z, cameraPos.x
                    + cameraForward.x, cameraPos.y + cameraForward.y, cameraPos.z
                    + cameraForward.z, cameraUp.x, cameraUp.y, cameraUp.z);
    
                // uncommenting out this line will make everything disappear.
            // glu.gluPerspective(2, 1, 10, 1000);
    
            // ****** Start of example code ******
            gl.glCallList(axes); // Show X, Y, Z axes
    
            gl.glCallList(secondLines);
    
            gl.glCallList(triangle);
    
            gazebo.render(gl);
    
                    // ...
    

    我的问题可能完全是别的。 gazebo ObjModel .obj 文件夹。以下是其渲染和生成绘制列表方法:

    private int drawID = 0;
    
    public ObjModel(String fn, GL2 gl) {
    
                // ...
    
        readFile(fn);
    
        drawID = buildDrawList(gl);
    }
    
    public void render(GL2 gl) {
        gl.glCallList(drawID);
    }
    
    private int buildDrawList(GL2 gl) {
        int result = gl.glGenLists(1);
    
        gl.glNewList(result, GL2.GL_COMPILE);
        gl.glPushMatrix();
        gl.glBegin(GL2.GL_POLYGON);
    
        for (Point3f vert : vertices) {
            gl.glVertex3f(vert.x, vert.y, vert.z);
        }
    
        gl.glEnd();
        gl.glPopMatrix();
        gl.glEndList();
    
        return result;
    }
    
    private void readFile(String filename) {
        try {
            BufferedReader input = new BufferedReader(new FileReader(fileName));
            try {
                String newLine = null;
                while ((newLine = input.readLine()) != null) {
    
                    int indVn = newLine.indexOf("vn ");
                    if (indVn != -1) {
                        readNormal(newLine);
                        continue;
                    }
    
                    int indV = newLine.indexOf("v ");
                    if (indV != -1) {
                        readVertex(newLine);
                        continue;
                    }
    
                    int indF = newLine.indexOf("f ");
                    if (indF != -1) {
                        readPolygon(newLine);
                        continue;
                    }
    
                    int indVt = newLine.indexOf("vt ");
                    if (indVt != -1) {
                        readTexture(newLine);
                        continue;
                    }
                }
            } finally {
                input.close();
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    

    有什么建议吗?谢谢。

    2 回复  |  直到 14 年前
        1
  •  3
  •   jay.lee    14 年前

    glScale() )

    2) 使用透视设置具有较深剪裁平面的“相机”。虽然您尝试过这个方法,但我怀疑您不想要的结果是因为您在使用此调用时没有修改投影矩阵。 尝试:

    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    gluPerspective( 60, 1, 0.1, 1000.0 );
    

    3) 使用 glFrustrum() 修改剪裁平面。这与glubpective类似,但提供了更大的灵活性,代价是增加了一些复杂性。

        2
  •  0
  •   Calvin1602    14 年前

    试试这个:gluPerspective(60,1,0.1,1000);