2012-09-11 3 views
1

OpenGL 씬을 텍스처로 렌더링하여 쉐이더에서 텍스처를 조작해야합니다. 나는 Framebuffer Objects를 사용하여이 문제를 해결했다. 내 효과 파이프 라인의 여러 지점에서 전체 화면 쿼드를 렌더링하고 동적으로 렌더링 된 텍스처로 텍스처를 처리해야합니다.이 텍스처는 내 문제가있는 곳입니다.텍스처에 렌더링 한 다음 결과를 OpenGL의 화면에 렌더링

이처럼 내 현장 모습입니다 : 나는 질감이 렌더링 및 전체 화면 쿼드로 그 텍스처 매핑 https://www.mathematik.uni-marburg.de/~thomak/planet.jpg

. 그러나, 결과적인 이미지는 이런 방식으로 왜곡되어

glMatrixMode(GL_MODELVIEW); 
glPushMatrix(); 
glLoadIdentity(); 
glMatrixMode(GL_PROJECTION); 
glPushMatrix(); 
glLoadIdentity(); 
glBegin(GL_QUADS); 

glTexCoord2i(0, 0); 
glVertex3i(-1, -1, -1);  
glTexCoord2i(0, 1); 
glVertex3i(1, -1, -1); 
glTexCoord2i(1, 1); 
glVertex3i(1, 1, -1); 
glTexCoord2i(1, 0); 
glVertex3i(-1, 1, -1); 

glEnd(); 
glPopMatrix(); 
glMatrixMode(GL_MODELVIEW); 
glPopMatrix(); 

셰이더 코드 여기 :

sampler2D BlitSamp = sampler_state 
{ 
    MinFilter = LINEAR; 
    MagFilter = LINEAR; 
    MipFilter = LINEAR; 
    AddressU = Clamp; 
    AddressV = Clamp; 
}; 

float4 AlphaClearPS(float2 texcoords : TEXCOORD0) : COLOR 
{ 
    return float4(tex2D(BlitSamp, texcoords).rgb, 1.0f); 
} 
여기

https://www.mathematik.uni-marburg.de/~thomak/planettexture.jpg는 쿼드 렌더링 및 텍스처 좌표를 설정하는 코드는

여기서 BlitSamp는 렌더 된 텍스처이며 셰이더로 전달 된 텍스처입니다. 여기서 무슨 일이있을 수 있니?

답변

2

당신의 tex-coords가 꺼져있을 수 있습니다. 귀하의 코드, 내 의견 :

glTexCoord2i(0, 0);  //Bottom-Left 
glVertex3i(-1, -1, -1); //Bottom-Left  

glTexCoord2i(0, 1);  //Top-Left 
glVertex3i(1, -1, -1); //Bottom-Right??? 

glTexCoord2i(1, 1);  //Top-Right 
glVertex3i(1, 1, -1); //Top-Right 

glTexCoord2i(1, 0);  //Bottom-Right 
glVertex3i(-1, 1, -1); //Bottom-Left?? 
+0

감사합니다. 기본적으로 Direct3D 응용 프로그램을 OpenGL로 이식하고 있으며 UV 공간의 기원에 동의하지 않는다는 사실을 알지 못했습니다 ... Direct3D에서 맨 왼쪽이므로 OpenGL에서 왼쪽 아래에 있습니다. – Campusanis

+0

그들은 일반적으로 OpenGL에서 왼쪽 아래에 있습니다. 도와 줘서 기뻐요! – bfishman

1

쿼드를 렌더링하는 코드가 잘 보이므로 쿼드의 크기와 뷰포트의 크기가 일치하지 않습니다.

언제든지 렌더 텍스처를 만들 때 너비와 높이를 바꿀 수 있었습니까?