Эй, ребята, я начал перемещать один из своих проектов из фиксированного конвейера, поэтому, чтобы попробовать что-то, я попытался написать шейдер, который бы просто пропускал матрицы OpenGL и преобразовывал вершины с этим, а затем начинал вычислять свой собственный, как только знал, что сработало. Я думал, что это будет простая задача, но даже это не будет работать.
Я начал с этого шейдера для обычного фиксированного конвейера:
void main(void)
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
gl_TexCoord[0] = gl_MultiTexCoord0;
}
Затем я изменил это на:
uniform mat4 model_matrix;
uniform mat4 projection_matrix;
void main(void)
{
gl_Position = model_matrix * projection_matrix * gl_Vertex;
gl_TexCoord[0] = gl_MultiTexCoord0;
}
Затем я получаю матрицы OpenGL, подобные этой, и передаю их шейдеру с таким кодом:
[material.shader bindShader];
GLfloat modelmat[16];
GLfloat projectionmat[16];
glGetFloatv(GL_MODELVIEW_MATRIX, modelmat);
glGetFloatv(GL_PROJECTION_MATRIX, projectionmat);
glUniformMatrix4fv([material.shader getUniformLocation:"model_matrix"], 1, GL_FALSE, modelmat);
glUniformMatrix4fv([material.shader getUniformLocation:"projection_matrix"], 1, GL_FALSE, projectionmat );
... Draw Stuff
По какой-то причине это ничего не привлекает (я на 95% уверен, что эти матрицы верны, прежде чем я их передам, кстати) Любые идеи?