Pregunta

Soy nuevo en OpenGL. Estoy jugando con JOGL.

Tengo un modelo .obj que estoy dibujando como polígonos. Se ve bien, excepto que la mayor parte se pone recortada. Así que creo que tengo que aumentar la distancia de dibujado.

No estoy muy seguro de cómo hacerlo. Aquí está mi código render:

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);

                // ...

Es posible que mi problema es algo completamente distinto. gazebo es de tipo ObjModel, una clase que lee y representa .obj archivos. Aquí están su render y métodos de listas acumulación sorteo:

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();
    }
}

Publicación de las capturas si se necesita más información.

Cualquier consejo? Gracias.

¿Fue útil?

Solución

Parece que su modelo tiene vértices fuera del plano de delimitación. Hay algunas soluciones para esto.

1) Escala de abajo de su modelo para que todos los vértices encajan dentro de las coordenadas de clip (uso glScale())

2) Uso gluPerspective para establecer una 'cámara' que tiene un plano de corte más profundo. Aunque se ha intentado esto, sospecho que sus resultados no deseados son porque no se está modificando la matriz de proyección cuando se utiliza esta llamada. Proveedores:

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

3) Uso glFrustrum() para modificar los planos de recorte. Esto es similar a gluPerspective pero proporciona una mayor flexibilidad en el caro de cierta complejidad añadida.

Para su información le puede seguir utilizando gluPerspective o glFrustrum cuando está en modo de matriz modelview, pero tenga en cuenta que el orden con el que se hacen las llamadas y otras llamadas de transformación de matriz (por ejemplo. GlScale, glTranslate, glRotate) es importante.

Otros consejos

prueba este lugar: gluPerspective (60, 1, 0,1, 1,000);

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top