문제

나는 iPod 터치에서 OpenGl ES 2.0을 사용하여 첫 단계를하고 있습니다. 이 좌표 문제를 해결하는 방법이 궁금했습니다.

더 잘 설명하기 위해, 나는 쿼드를 그리고 정점 셰이더를 사용하여 쿼드를 그리거나 번역하려고 노력했습니다 (또한 읽은 내용에서 유일한 방법으로 보이기 때문에).

iPod으로 작업하기 때문에 a 1.5 : 1 비율 및 뷰포트가 설정했습니다

glViewport(0, 0, backingWidth, backingHeight);

그래서 0,0 클리핑의 중심과 경계는 -1.0, -1.0, -1.0, 1.0, 등 (맞습니까?)

정사각형을 그리려면 종횡비로 인해 x 및 y 좌표에 대해 다른 값을 사용해야했습니다.

static const GLfloat lineV[] = {
        -0.5f, 0.33f,  0.5f, 0.33f,
         0.5f, 0.33f,  0.5f,-0.33f, 
         0.5f,-0.33f, -0.5f,-0.33f,
        -0.5f,-0.33f, -0.5f, 0.33f,
        -0.5f, 0.33f,  0.5f,-0.33f,
         0.5f, 0.33f, -0.5f,-0.33f,
    };

그것은 두 대각선이 모두있는 사각형입니다 (인덱스를 사용하는 것이 더 효율적이지만 그것이 요점이 아님) .. ..

그런 다음 vertex 셰이더를 작성하여 객체를 움직이는 동안 회전하려고했습니다.

void main()
{
    m = mat4( cos(rotation), sin(rotation), 0.0, 0.0,
             -sin(rotation), cos(rotation), 0.0, 0.0,
                        0.0,           0.0, 1.0, 0.0,
                        0.0,           0.0, 0.0, 1.0);

    m2 = mat4(1.0);
    m2[1][3] = sin(rotation)*0.8;
    gl_Position = position*(m*m2);
}

작동하지만 좌표는 동일하지 않기 때문에 회전하는 동안 쿼드가 왜곡됩니다. 어떻게 막아야합니까? 뷰 드레스를 다른 범위를 가질 수 있도록보기 틀을 변경할 수 있다고 생각했다면 (두 축에서 -1.0 ~ 1.0이 아님) y 축에서 확대되면 문제가 해결 될 수 있습니다).

또한 매트릭스를 사용하는 더 좋은 방법이 있습니까? 내 말은, 나는 사용하는 데 익숙했다 glRotatef 전체 매트릭스를 지정할 필요없이 .. 편의 기능/생성자 가이 작업을 수행하기 위해 존재합니까?

도움이 되었습니까?

해결책 2

내가 본 것에서 Glut 또는지지 기능은 제공되지 않습니다. 기본적으로 정점을 구축 할 때 동일한 좌표를 사용하고 정점 셰이더를 사용하여 올바른 종횡비로 y 축에서 스케일링하여 해결했습니다.

다른 팁

첫 번째 논쟁 glViewport() 중심이 아니며 왼쪽 하단 코너의 좌표입니다.

아마도 당신의 측면을 고려하여 일반적으로 사용하는 투영을 설정해야 할 것입니다. gluperspective () (GLU가 ES로 제공되는 경우).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top