2013-09-11 2 views
1

Я изучаю OpenGL, и у меня проблема с неправильным рендерингом. Это проблема, с которой я сталкиваюсь, есть промежутки между сторонами пирамид.Ошибка отображения OpenGL - неправильный дисплей

enter image description here

Вот вершины я использую, чтобы построить.

// Create Pyramid Vertex Buffer 
FloatBuffer vertexBuffer = BufferUtils.createFloatBuffer(3 * 12); 
vertexBuffer.put(new float[] 
{ 
    // Side one 
    0f, 0.8f, 0f, 
    -0.8f, -0.8f, 0.8f, 
    0.8f, -0.8f, 0.8f, 

    // Side two 
    0f, 0.8f, 0f, 
    0.8f, -0.8f, 0.8f, 
    0.8f, -0.8f, -0.8f, 

    // Side three 
    0f, 0.8f, 0f, 
    0.8f, -0.8f, -0.8f, 
    -0.8f, -0.8f, -0.8f, 

    // Side four 
    0f, 0.8f, 0f, 
    -0.8f, -0.8f, -0.8f, 
    -0.8f, -0.8f, 0.8f 
}); 
vertexBuffer.rewind(); 

Я думал, что это потому, что модель выходит из экрана. Так я думал, что перевод на оси должно быть хорошо, и я добавил эту строку перед вызовом glDrawArrays

glTranslatef(0f, 0f, -1f); 

Это придумал это странное поведение, имеющую более стороны втягиваются.

enter image description here

Три стороны оказаны, но только должен смотреть только два! Как я могу решить эту проблему? Я также включил проверку глубины.

Вот как я инициализировать OpenGL

// Initialize OpenGL 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(-1, 1, -1, 1, 1, -1); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

glViewport(0, 0, Display.getWidth(), Display.getHeight()); 
+0

Можете ли вы разместить свой код создания видового экрана? Я не могу сказать, будет ли треугольник обрезаться вашим ближайшим усеченным уклоном или, может быть, дальним уклоном или даже комбинацией того и другого. Я думаю, что вы видите внутреннюю часть пирамиды на своей второй картине и на заднем плане в черном пятне первой картины. Тем не менее, это похоже на интуитивную интуитивность, так как движение дальше должно привести к тому, что вы получите в первой картине, и если вы приблизитесь, вы увидите внутреннюю часть пирамиды. Кроме того, есть ли у вас какие-либо другие преобразования? И какой параметр vert сопоставляется с каким цветом? X-> Красный, Y-> Зеленый? – zero298

+0

@ zero298 Я включил код для инициализации opengl. Также у меня нет шейдеров. У меня есть работа с изменением функции glOrtho, но я до сих пор не понимаю, почему. –

ответ

2

glOrtho устанавливает свою область просмотра. Так как ваша фигура находится внутри 1 квадратного блока, но вы хотите видеть все это, вы можете либо установить ваш ближний и дальний круг на всю фигуру (что делаете 2, -2), либо вы можете установить glOrtho - что-то вроде glOrtho (-1, 1, -1, 1, 0, -5); и переведите форму назад, чтобы она была в поле просмотра.

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

Вы хотите иметь все в орфографическом виде или вы имеете в виду перспективу? Орфографический взгляд на то, почему перевод не помог изначально.

+0

На стороне примечание, похоже, что тестирование глубины не включено. Вероятно, это возможно; не забудьте добавить бит буфера глубины в glClear, то есть, "glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);' – datenwolf

Смежные вопросы