이것은 내가 이제까지 만난 이상한 버그 다. 뷰 매트릭스를 두 번로드하지 않으면 내 삼각형이 그려지지 않습니다. 무슨 일 이니?뷰 매트릭스를 두 번로드해야합니다. Do not know why
gfxSetCamera (& 카메라 -> t) 중 하나를 제거하면; 아무것도 그려지지 않습니다.
void shipDraw() {
glPushMatrix();
glMultMatrixf(ship->t.m);
glBegin(GL_TRIANGLES);
glColor3f(0,0,1);
glVertex3f(0, 0, -1);
glVertex3f(0, 1, 1);
glVertex3f(0, -1, 1);
glEnd();
glPopMatrix();
}
//Draw loop
while(!gfxUserQuit()) {
entUpdateAll();
gfxPrepare(1,1);
gfxSetCamera(&camera->t); //Have to call this twice!?!?
gfxSetCamera(&camera->t);
entDrawAll();
gfxPresent();
}
//Graphics code
void gfxPrepare(int clearColor, int clearStencil) {
//TODO parse args
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
}
void gfxPresent() {
glfwSwapBuffers();
}
void gfxSetCamera(transform *t) {
float *m = t->m;
float viewmatrix[16]={
m[0], m[4], m[8], 0,
m[1], m[5], m[9], 0,
m[2], m[6], m[10], 0,
-(m[0]*m[12] +
m[1]*m[13] +
m[2]*m[14]),
-(m[4]*m[12] +
m[5]*m[13] +
m[6]*m[14]),
-(m[8]*m[12] +
m[9]*m[13] +
m[10]*m[14]), 1};
glLoadMatrixf(viewmatrix);
}
편집 : 내가 화면으로 그리는되어 정의와 '부동 viewmatrix'무 초기화를 제거하면 나는 다음과 같은
while(!gfxUserQuit()) {
entUpdateAll();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
float *m = camera->t.m;
float viewmatrix[16]={
m[0], m[4], m[8], 0,
m[1], m[5], m[9], 0,
m[2], m[6], m[10], 0,
-(m[0]*m[12] +
m[1]*m[13] +
m[2]*m[14]),
-(m[4]*m[12] +
m[5]*m[13] +
m[6]*m[14]),
-(m[8]*m[12] +
m[9]*m[13] +
m[10]*m[14]), 1};
float viewmatrix2[16]={
m[0], m[4], m[8], 0,
m[1], m[5], m[9], 0,
m[2], m[6], m[10], 0,
-(m[0]*m[12] +
m[1]*m[13] +
m[2]*m[14]),
-(m[4]*m[12] +
m[5]*m[13] +
m[6]*m[14]),
-(m[8]*m[12] +
m[9]*m[13] +
m[10]*m[14]), 1};
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glLoadMatrixf(viewmatrix2);
entDrawAll();
glfwSwapBuffers();
}
에 아래 오류를 감소. 내가 복원하면 정상적으로 렌더링됩니다. 이게 어떤 메모리 손상인가?
EDIT2 그들은 다릅니다.
어떻게 디버깅 할 수 있습니까?
EDIT3 내가 파일을 포함하지 않고 glfwGetTime()를 호출했다. 이것이 무엇을 깨뜨린 것입니까? O
디버깅을 위해 메모리 브레이크 포인트를 시도하십시오! – ltjax
카메라 -> t.m이 적어도 15 개의 부동 소수점을 가리키는 것입니까? – Tommy
예, 16 개의 수레가 있습니다. 4x4 행렬 –