// Replace the implementation of this method to do your own custom drawing.
static const GLfloat squareVertices[] = {
-0.5f, -0.5,
0.5f, -0.5f,
-0.5f, 0.5f,
0.5f, 0.5f,
};
static const GLubyte squareColors[] = {
255, 255, 0, 255,
0, 255, 255, 255,
0, 0, 0, 0,
255, 0, 255, 255,
};
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//glOrthof(-1.0f, 1.0f, -1.5f, 1.5f, -1.0f, 1.0f); // もともとは平行投影。なので最近、と最遠の設定に意味はない。
glFrustumf(-1.0f, 1.0f, -1.5, 1.5, 3.0f, 100.0f); // 透視投影。最遠はともかく最近は
glTranslatef(0.0f, 0.0f, -3.5f);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
const float X[16] = {
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, cos(gyroX), -sin(gyroX), 0.0f,
0.0f, sin(gyroX), cos(gyroX), 0.0f,
0.0f, 0.0f, 0.0f, 1.0f,
};
const float Y[16] = {
cos(gyroY), 0.0f, sin(gyroY), 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
-sin(gyroY), 0.0f, cos(gyroY), 0.0f,
0.0f, 0.0f, 0.0f, 1.0f,
};
const float Z[16] = {
cos(gyroZ), -sin(gyroZ), 0.0f, 0.0f,
sin(gyroZ), cos(gyroZ), 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f,
};
// 3つの行列を乗算
const float XY[16] = {
X[0]*Y[0]+X[1]*Y[4]+X[2]*Y[8]+X[3]*Y[12], X[0]*Y[1]+X[1]*Y[5]+X[2]*Y[9]+X[3]*Y[13], X[0]*Y[2]+X[1]*Y[6]+X[2]*Y[10]+X[3]*Y[14], X[0]*Y[3]+X[1]*Y[7]+X[2]*Y[11]+X[3]*Y[15],
X[4]*Y[0]+X[5]*Y[4]+X[6]*Y[8]+X[7]*Y[12], X[4]*Y[1]+X[5]*Y[5]+X[6]*Y[9]+X[7]*Y[13], X[4]*Y[2]+X[5]*Y[6]+X[6]*Y[10]+X[7]*Y[14], X[4]*Y[3]+X[5]*Y[7]+X[6]*Y[11]+X[7]*Y[15],
X[8]*Y[0]+X[9]*Y[4]+X[10]*Y[8]+X[11]*Y[12], X[8]*Y[1]+X[9]*Y[5]+X[10]*Y[9]+X[11]*Y[13], X[8]*Y[2]+X[9]*Y[6]+X[10]*Y[10]+X[11]*Y[14], X[8]*Y[3]+X[9]*Y[7]+X[10]*Y[11]+X[11]*Y[15],
X[12]*Y[0]+X[13]*Y[4]+X[14]*Y[8]+X[15]*Y[12], X[12]*Y[1]+X[13]*Y[5]+X[14]*Y[9]+X[15]*Y[13], X[12]*Y[2]+X[13]*Y[6]+X[14]*Y[10]+X[15]*Y[14], X[12]*Y[3]+X[13]*Y[7]+X[14]*Y[11]+X[15]*Y[15],
};
const float scaleMatrix[16] = {
XY[0]*Z[0]+XY[1]*Z[4]+XY[2]*Z[8]+XY[3]*Z[12], XY[0]*Z[1]+XY[1]*Z[5]+XY[2]*Z[9]+XY[3]*Z[13], XY[0]*Z[2]+XY[1]*Z[6]+XY[2]*Z[10]+XY[3]*Z[14], XY[0]*Z[3]+XY[1]*Z[7]+XY[2]*Z[11]+XY[3]*Z[15],
XY[4]*Z[0]+XY[5]*Z[4]+XY[6]*Z[8]+XY[7]*Z[12], XY[4]*Z[1]+XY[5]*Z[5]+XY[6]*Z[9]+XY[7]*Z[13], XY[4]*Z[2]+XY[5]*Z[6]+XY[6]*Z[10]+XY[7]*Z[14], XY[4]*Z[3]+XY[5]*Z[7]+XY[6]*Z[11]+XY[7]*Z[15],
XY[8]*Z[0]+XY[9]*Z[4]+XY[10]*Z[8]+XY[11]*Z[12], XY[8]*Z[1]+XY[9]*Z[5]+XY[10]*Z[9]+XY[11]*Z[13], XY[8]*Z[2]+XY[9]*Z[6]+XY[10]*Z[10]+XY[11]*Z[14], XY[8]*Z[3]+XY[9]*Z[7]+XY[10]*Z[11]+XY[11]*Z[15],
XY[12]*Z[0]+XY[13]*Z[4]+XY[14]*Z[8]+XY[15]*Z[12], XY[12]*Z[1]+XY[13]*Z[5]+XY[14]*Z[9]+XY[15]*Z[13], XY[12]*Z[2]+XY[13]*Z[6]+XY[14]*Z[10]+XY[15]*Z[14], XY[12]*Z[3]+XY[13]*Z[7]+XY[14]*Z[11]+XY[15]*Z[15],
};
glLoadMatrixf(scaleMatrix);
glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glVertexPointer(2, GL_FLOAT, 0, squareVertices);
glEnableClientState(GL_VERTEX_ARRAY);
glColorPointer(4, GL_UNSIGNED_BYTE, 0, squareColors);
glEnableClientState(GL_COLOR_ARRAY);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glPopMatrix();
[(EAGLView *)self.view presentFramebuffer];
}