사용하지 않는 OpenGL API를 사용하지 않고 간단한 미로 게임을 작성하려고합니다. 즉 직접 모드가 아닙니다.OpenGL 1 인칭 카메라 회전 및 변환
class Vertex {
public:
GLfloat x, y, z; // coords
GLfloat tx, ty; // texture coords
Vertex();
};
과 같이 VBOs에 저장됩니다 : 이제
void initVBO()
{
Vertex vertices[4];
vertices[0].x = -0.5;
vertices[0].y = -0.5;
vertices[0].z = 0.0;
vertices[0].tx = 0.0;
vertices[0].ty = 1.0;
vertices[1].x = -0.5;
vertices[1].y = 0.5;
vertices[1].z = 0.0;
vertices[1].tx = 0.0;
vertices[1].ty = 0.0;
vertices[2].x = 0.5;
vertices[2].y = 0.5;
vertices[2].z = 0.0;
vertices[2].tx = 1.0;
vertices[2].ty = 0.0;
vertices[3].x = 0.5;
vertices[3].y = -0.5;
vertices[3].z = 0.0;
vertices[3].tx = 1.0;
vertices[3].ty = 1.0;
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(Vertex)*4, &vertices[0].x, GL_STATIC_DRAW);
ushort indices[4];
indices[0] = 0;
indices[1] = 1;
indices[2] = 2;
indices[3] = 3;
glGenBuffers(1, &ibo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(ushort) * 4, indices, GL_STATIC_DRAW);
}
나는 기본적으로 네 Vertex
s의 조합 내 미로에있는 각 타일에 대한 하나의 버텍스 버퍼 오브젝트를 사용하고 있습니다 , 나는 카메라 움직임에 붙어있다. 이전 프로젝트 버전에서는 glRotatef
및 glTranslatef
을 사용하여 장면을 변환하고 회전 한 다음 glBegin()
/glEnd()
모드를 사용하여 모든 타일을 렌더링했습니다. 그러나이 두 함수는 이제 더 이상 사용되지 않으며 VBO 만 사용하여 컨텍스트에서 카메라를 만드는 방법에 대한 자습서를 찾지 못했습니다. 계속 진행하는 올바른 방법은 무엇입니까? 새 타일 위치에 따라 정점의 위치를 수정하는 모든 타일 사이를 반복해야합니까?
고정 기능 파이프 라인을 사용하고 있습니까? 또한 OpenGL에는 카메라 개념이 없습니다. 각 정점에 모델 - 뷰 - 프로젝션 행렬을 곱합니다 (여기서 뷰 행렬은 관심있는 행렬입니다). 버텍스 쉐이더에서 그렇게합니다 (고정 함수 파이프 라인을 사용하려면 매트릭스 스택을 사용할 수도 있습니다). 그리고이 질문은 http://gamedev.stackexchange.com/ – Samaursa
@Samaursa에 더 적합 할 수 있습니다. 내가 말했던 것처럼 고정 기능 파이프 라인을 사용하지 않습니다. 왜냐하면 내가 읽은 것부터 사용되지 않기 때문입니다. 내 렌더링 메서드에서 기본적으로 내 VBO 바인딩하고'glDrawElements()'메서드를 사용하여 렌더링합니다. 게다가,'glPopMatrix()'와'glPushMatrix()'메소드는 더 이상 사용되지 않기 때문에 어디서부터 시작해야할지 모르겠습니다. –
내 대답보기 (몇 가지 편집으로 업데이트 됨 - 사과드립니다. 섹션 중 하나를 추가하는 것을 잊었습니다) – Samaursa