다음과 같은 문제가 있습니다. 점 집합이 포함 된 OpenGL을 사용하여 2D 장면을 그립니다. 각 포인트는 XY 좌표로 지정됩니다. 포인트를 렌더링하기 위해 삼각형, 십자형 또는 쿼드와 같은 마커 심볼을 사용하고 싶습니다. 문제는 장면을 확대 할 때 마커 크기가 화면 상에 일정해야한다는 것입니다. 예를 들어 GL_POINTS
을 사용하는 것과 같습니다. 그래서 스케일을 변경할 때마다 마커 좌표를 다시 계산해야합니다. 이것은 편리하지 않습니다. 새로운 렌더링 포인트 위치를 얻었을 때 한 번하고 싶습니다. 어떤 문제가 있습니까?OpenGL 2D 마커 기호
답변
아마도 가장 쉬운 방법은 심볼로 텍스처를 가지고 포인트 스프라이트로 그리는 것입니다.
Render large circular points in modern OpenGL
마음에 오는 또 다른 방법은 모든 후 버텍스 쉐이더 에서 지오메트리의 스케일링을 적용한다는 것입니다 : 당신이 그 방법으로 도움이 필요한 경우, 내 대답은 여기에 포인트 스프라이트를 사용하는 방법에 대해 설명합니다 투영을 포함한 다른 변환이 적용되었습니다.
- 있는 마커의 모든 꼭지점에 대해 동일한 값 마커의 중심 :
마음에 오는 것을 가장은 즉시 버텍스 쉐이더로 각 정점에 대한 두 가지 속성을 통과한다는 것입니다.
- 마커의 중심으로부터의 상대 오프셋.
그런 다음 버텍스 쉐이더에서, 당신은과 중앙에만에 투영 변환, 을 포함한 모든 일반적인 변환을 적용 할 수 있습니다. 그런 다음 상대 오프셋을 추가합니다.
버텍스 쉐이더를 스케치, 그것은 다음과 같을 수 있습니다 : 오프셋 상대가 투사 한 후 적용되기 때문에
이in vec3 centerPos;
in vec2 relativePos;
uniform mat4 ModelViewProj;
...
void main() {
...
vec4 projCenterPos = ModelViewProj * vec4(centerPos, 1.0);
gl_Position = vec4(
projCenterPos.xy + projCenterPos.w * relativePos,
projCenterPos.zw);
}
, 당신은 y
우리가 지금 동차 좌표가 계정 x
고려해야 , z
은 정점 셰이더 이후의 고정 함수 처리의 일부로 w
으로 나뉩니다. 이 원근법 나누기 후에 크기를 일정하게 만들려면 위 코드에서 오프셋에 w
을 곱합니다.
기본적으로 relativePos
은 x 방향 및 y 방향의 범위가 [-1.0, 1.0] 인 NDC (Normalized Device Coordinates)에 적용되므로 값은 상당히 작아야합니다. 예를 들어 0.02의 오프셋은 창 크기의 1 %에 해당합니다.
크기 조정을보다 유연하게하려면 다른 배율 인수를 전달하여 스프라이트 크기를 제어하고 relativePos
에 위 계산의 계수를 곱하십시오. 그런 다음 상대 위치를 유지할 수 있습니다. [-1.0, 1.0]의 범위 내에서 적절히 크기를 조정하십시오.
...
uniform float spriteSize;
...
gl_Position = vec4(
projCenterPos.xy + spriteSize * projCenterPos.w * relativePos,
projCenterPos.zw);
- 1. 다른 마커 기호
- 2. OpenGL 2d 예제 게임
- 3. OpenGL 2d 크기 조정
- 4. OpenGL 2D 편집기?
- 5. 2D 텍스처를 회전하는 OpenGL
- 6. 2d 회전 opengl
- 7. OpenGL 2D 성능 팁
- 8. OpenGL 2D 색상이 잘못되었습니다.
- 9. OpenGL 2D 움직이는 관계
- 10. 2D 용 OpenGL 사용
- 11. 2D Heptagon 그리기 OpenGL
- 12. OpenGL 2D 회전 문제
- 13. OpenGL 2D 텍스처의 두께
- 14. 2D 배열의 숫자에 기호 할당
- 15. OpenGL 2d 텍스처 렌더링 문제
- 16. openGL 2D 마우스 클릭 위치
- 17. OpenGL Noob -> 2D Animation
- 18. OpenGL 2D 프로젝션 매트릭스 문제
- 19. OpenGL 2D 더블 버퍼 스케일링
- 20. OpenGL 2D 텍스처가 작동하지 않습니다.
- 21. OpenGL ES 2D 텍스처 회전
- 22. 2d 그래픽 용 최신 OpenGL
- 23. 사용자를 향한 OpenGL 2d 도면
- 24. 안드로이드 2D OpenGL 라인 동그라미
- 25. 2D Non-OpenGL 게임 : ViewController
- 26. OpenGL 2D 텍스처 jittering/pulsing
- 27. Qt/OpenGL 2D 텍스처를 표시하려고합니다.
- 28. Android OpenGL ES 및 2D
- 29. OpenGL 2D 텍스처 맵핑 문제
- 30. 이미지로 OpenGL ES 2d 렌더링
답장을 보내 주셔서 감사합니다. –