2013-04-19 6 views
0

비표준 좌표를 사용하는 2D 방식으로 처음부터 끝까지 좌표 사이의 코드/변환을 단계별로 보여주는 (비 권장 코드) OpenGL의 몇 가지 예를 찾고 있습니다. 즉OpenGL 변환/변환/정규화 좌표?

GLfloat Square[] = 
{ 
    -5.5f, -5.0f, 0.0f, 1.0f, 
    -5.5f, 5.0f, 0.0f, 1.0f, 
    5.5f, 5.0f, 0.0f, 1.0f, 
    5.5f, -5.0f, 0.0f, 1.0f 
}; 

그리고 그들이 화면 -1,1- 등 & 출력에 매핑되도록 이들 & 필요한 좌표로 변환 복용 예컨대 상기와 좌표를 사용.

위의 범위에서 -1 <> 1의 좌표를 사용하는 모든 단일 예제, 자습서는 그물에서 찾았습니다.

환경 : C++.

+0

실제로 downvoted가 이유를 설명하면 좋을 것입니다. 나 자신/다른 사람들은 그런 식으로 배울지도 모른다. – ReturnVoid

답변

1

glm (http://glm.g-truc.net/index.html)을 사용하면 glm :: ortho를 사용하여 이전 스타일의 OpenGL에서 glOrtho를 사용하는 것과 같은 방식으로보기 매트릭스를 만들 수 있습니다.

EG :

glm::mat4 viewMatrix = glm::ortho(-5.0f, 5.0f, -5.0f, 5.0f, 0.0f, 1.0f); 

당신은 그 당신의 쉐이더로는 -5에서 +5 대신 -1 +1에 매핑을 받아야 연결하거나 어떤 규모 당신이 원하는 경우.

1

프로젝트에서 '아니오'변환을 사용하면 "정규화 된 장치 공간"에 배치 된 좌표를 사용해야합니다. 이것은 실제로 각 축에서 -1부터 1까지의 상자입니다. 서로 다른 범위에서 좌표를 제공하려는 경우

2D를 들어
gl_Position = attribVertexPos; // no transformation 

이, 당신이 할 필요가 단순히 규모의 위치입니다 :

버텍스 쉐이더의 경우에

은 다음과 라인 유사한있을 것 코드 gl_Position = attribVertexPos * 0.1
  • 또는 스케일링 매트릭스를 찾을뿐만 아니라
  • 01을 사용할 수와 범위 -10 ~ 10 사용 정점 셰이더에 대한
    +0

    이것은 실제로 벡터 자체를 변경합니까, 아니면 단순히 오프셋을 사용하여 나타낼까요? – ReturnVoid

    +0

    이것은 버텍스 쉐이더의 코드입니다. -1에서 1까지의 큰 공간에 버텍스를 전달하려면 스케일을 적용해야합니다. 그러나 위의 대답에서 glm :: ortho를 사용하십시오. – fen

    +0

    답장을 보내 주셔서 감사합니다. 셰이더를 사용하지 않고 최신 OpenGL을 사용하여이 작업을 수행 할 수있는 방법이 있습니까? – ReturnVoid