컴퓨터에서 프로젝터로 표시된 이미지로 물리적 큐브를 매핑해야합니다. 나는 즉시 3D 큐브와 카메라 투영법을 사용하여 가상 이미지를 실제 객체에 맞추려고 했으므로 문제를 단순화하고 큐브의 2D 표현을 사용하고 2D 공간에서 각 버텍스를 이동하기로 결정했습니다. 물체에 잘 맞을 때까지. 이제 소프트웨어는 약간의 세부 사항을 제외하고는 완료되었습니다 : 텍스처.OpenGL을 사용한 2D 사다리꼴의 텍스처 보간법
저는 LWJGL을 사용하고 있으며 문서의 일부 예제에서 데이터 구조를 기반으로했습니다.
2D 공간에서 실제 입방체의 3 개의 보이는면을 표현하기 위해 7 개의 꼭지점을 사용했습니다. 이것은 각면을 덮는 3 개의 사다리꼴 (또는 불규칙한 사변형)을 만들고, 내가 보았던 ST (또는 UV) 좌표로 매핑했습니다. 이 이미지는,이 차원의 모든 기억 :
여기
는 모든 주문 XYZWRGBASTPQ와 VBO에 저장있어, 내가 버퍼에 내 정점 데이터를로드 코드 블록이다 (참고 Z는 항상 0입니다 , PQ는 기본적으로 0,1입니다.) :
vertices = new VertexData[7];
vertices[0] = new VertexData().setXY(0, 0).setST(0.5f, 0.5f);
vertices[1] = new VertexData().setXY(0.5f, 1f/3).setST(0.5f, 0);
vertices[2] = new VertexData().setXY(0, 2f/3).setST(0, 0);
vertices[3] = new VertexData().setXY(-0.5f, 1f/3).setST(0, 0.5f);
vertices[4] = new VertexData().setXY(-0.5f, -1f/3).setST(0, 1);
vertices[5] = new VertexData().setXY(0, -2f/3).setST(0.5f, 1);
vertices[6] = new VertexData().setXY(0.5f, -1f/3).setST(1, 1);
0은 육각형의 중심이며 오른쪽 상단 모서리에서 반 시계 방향으로 1-6입니다. 삼각형 팬으로 그려집니다. 사다리꼴은 평행 사변형이있는 동안
다 괜찮이 다른 텍스처 테스트입니다 :
그러나 문제는 양측이 동일하지 않을 경우, 질감이 삼각형 때문에시기를 예상이다 ,
내가 주제에 많이 읽어 그 중 일부 :
0,123,516이 예상대로 보이지 않는, 텍스처를 투영하려고Quadrilateral Interpolation, Part 1
지금까지 아무것도
Perspective correct texturing of trapezoid in OpenGL ES 2.0
Getting to know the Q texture coordinate...
내가 아는 모든 즉 인 Q는 텍스처의 좌표를 함께 할 수있는 뭔가가 문제를 해결 나를 가까이 얻었다.내 버텍스 쉐이더는 최소한이다
#version 150 core
in vec4 in_color;
in vec4 in_position;
in vec4 in_texture;
out vec4 pass_color;
out vec4 pass_texture;
void main(void) {
pass_color = in_color;
pass_texture = in_texture;
gl_Position = in_position;
}
내 조각 쉐이더 내가 Q 좌표 주변에 바이올린을 시도했기 때문에 지금 내가 textureProj을 사용하고, 정말 간단합니다.
#version 330 core
in vec4 pass_color;
in vec4 pass_texture;
out vec4 color;
uniform sampler2D texture_diffuse;
void main(void) {
color = pass_color;
color = textureProj(texture_diffuse, pass_texture);
}
필요한 경우 모든 코드를 게시 할 의향이 있습니다. 나는 올바른 방향으로 밀기 만하면됩니다.
원근감 보간을 허용하려면 정점에 적절한 깊이 값 (z- 치수 추가)이 필요합니다. Btw, 와이어 프레임 모델이 잘못 보입니다 (위의 큐브 이미지와 반대). –
필요하지 않습니다. 이미 해결했으며 나중에 솔루션을 게시 해 드리겠습니다. 감사! – fixmycode