OpenGL 2.0 ES 좌표
-
20-09-2019 - |
문제
나는 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로 제공되는 경우).