これは私が今までに遭遇した最も奇妙なバグです。ビューマトリックスを2回ロードしない限り、私の三角形は描画されません。何が起こっている?ビュー・マトリックスを2回ロードする必要があります。なぜわからないのですか
gfxSetCamera(& camera-> 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の行列 –