OpenGL: модель не отображается правильно. (Надо исправить нарисовать расстояние?)

StackOverflow https://stackoverflow.com/questions/3697527

Вопрос

Я новичок в OpenGL. Я играю вокруг с Jogl.

У меня есть модель .obj, которую я рисую как многоугольники. Это выглядит нормально, за исключением того, что большинство из них окраивается. Поэтому я думаю, что мне нужно увеличить расстояние розыгрыша.

Я не совсем уверен, как это сделать. Вот мой код рендера:

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

Я могу опубликовать скриншоты, если требуется дополнительная информация.

Любой совет? Спасибо.

Это было полезно?

Решение

Похоже, ваша модель имеет вершины за пределами плоскости отсечения. Для этого есть несколько решений.

1) масштабируйте свою модель, чтобы все вершины вписались в координаты клипа (используйте glScale())

2) Используйте Glupperspection для настройки «камеры», которая имеет более глубокую отсечение плоскости. Хотя вы пробовали это, я подозреваю, что ваши нежелательные результаты, потому что вы не изменяете матрицу проекции при использовании этого вызова. Пытаться:

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

3) Использование glFrustrum() модифицировать отсечения плоскостей. Это похоже на Glupperspective, но обеспечивает большую гибкость на дорогой из некоторой добавленной сложности.

FYI Вы все еще можете использовать Glupperspection или GLFRULLUM, когда в режиме ModelView Matrix, но имейте в виду, что порядок, с которого вы делаете эти звонки и другие вызовы трансформации матрицы (например, Glscale, Gltranslate, Glrotate).

Другие советы

Попробуйте это вместо этого: Glupperspective (60, 1, 0,1, 1000);

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top