void inciarlizar_motor_render(float m_viewWidth, float m_viewHeight){ glClearColor(0.1f, 0.2f, 0.0f, 1.0f); glUseProgram(_program); _shd_posicion = getParametro( "position"); _shd_normal = getParametro( "normal"); _shd_textura = getParametro("textura_cord"); _shd_mvp = getUniform( "MVP"); _shd_text = getUniform("textura"); // Enable depth test glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); /* Perspectiva */ mtxLoadPerspective(mPerspectiva, 45, (float)m_viewWidth / (float)m_viewHeight,1.0,10000); mtxLoadIdentity(mModelo); /* Camara 4.0f, 3.0f, 3.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f) */ float vecEye[3] = {2.0f, 0.0f, 3.0f}; float vecCentro[3] = {0.0, 0.0, 0.0}; float vecUp[3] = {0.0, 1.0, 0.0}; mtxLookAt(mModeloCamara, vecEye, vecCentro, vecUp); //colocamos el modelo en las cordenadas 0.0f en la x,y,z mtxTranslateApply(mModelo, 0.0f, 0.0f, 0.0f); crear_buffers(); long witdh = 0.0f, height = 0.0f; textura_id = load_texture_TGA(PATH_TEXTURA, &witdh, &height, GL_REPEAT, GL_REPEAT); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, textura_id); glUseProgram(0); }
void mtxRotateMatrix(float *mtx, float rad, float xAxis, float yAxis, float zAxis) { if (yAxis == 0.0f && zAxis == 0.0f) { mtxRotateXMatrix(mtx, rad); } else if(xAxis == 0.0f && zAxis == 0.0f) { mtxRotateYMatrix(mtx, rad); } else if(xAxis == 0.0f && yAxis == 0.0f) { mtxRotateZMatrix(mtx, rad); } else { float rotMtx[16]; #if !defined(USE_ORIGINAL_BUGGY_IMPLEMENTATION) #warning fixed a use of garbage stack memory, but unsure of algorithm ... need testing =) mtxLoadIdentity(rotMtx); #endif mtxLoadRotate(rotMtx, rad, xAxis, yAxis, zAxis); mtxMultiply(mtx, rotMtx, mtx); } }
void update(){ rot+=0.1f; glUseProgram(_program); mtxRotateApply(mModelo, 1.0f, 0.1f, 0.1f, 0.0f); float mMV[16]; mtxLoadIdentity(mMV); mtxMultiply(mMV, mModeloCamara, mModelo); mtxMultiply(mMVP, mPerspectiva, mMV); glUniformMatrix4fv(_shd_mvp, 1, GL_FALSE, mMVP); glUseProgram(0); }
void mtxInvert(float *mtx, const float *src) { float tmp[16]; float val, val2, val_inv; int i, j, i4, i8, i12, ind; mtxTranspose(tmp, src); mtxLoadIdentity(mtx); for (i = 0; i != 4; i++) { val = tmp[(i << 2) + i]; ind = i; i4 = i + 4; i8 = i + 8; i12 = i + 12; for (j = i + 1; j != 4; j++) { if (fabsf(tmp[(i << 2) + j]) > fabsf(val)) { ind = j; val = tmp[(i << 2) + j]; } } if (ind != i) { val2 = mtx[i]; mtx[i] = mtx[ind]; mtx[ind] = val2; val2 = tmp[i]; tmp[i] = tmp[ind]; tmp[ind] = val2; ind += 4; val2 = mtx[i4]; mtx[i4] = mtx[ind]; mtx[ind] = val2; val2 = tmp[i4]; tmp[i4] = tmp[ind]; tmp[ind] = val2; ind += 4; val2 = mtx[i8]; mtx[i8] = mtx[ind]; mtx[ind] = val2; val2 = tmp[i8]; tmp[i8] = tmp[ind]; tmp[ind] = val2; ind += 4; val2 = mtx[i12]; mtx[i12] = mtx[ind]; mtx[ind] = val2; val2 = tmp[i12]; tmp[i12] = tmp[ind]; tmp[ind] = val2; } if (val == 0) { mtxLoadIdentity(mtx); return; } val_inv = 1.0f / val; tmp[i] *= val_inv; mtx[i] *= val_inv; tmp[i4] *= val_inv; mtx[i4] *= val_inv; tmp[i8] *= val_inv; mtx[i8] *= val_inv; tmp[i12] *= val_inv; mtx[i12] *= val_inv; if (i != 0) { val = tmp[i << 2]; tmp[0] -= tmp[i] * val; mtx[0] -= mtx[i] * val; tmp[4] -= tmp[i4] * val; mtx[4] -= mtx[i4] * val; tmp[8] -= tmp[i8] * val; mtx[8] -= mtx[i8] * val; tmp[12] -= tmp[i12] * val; mtx[12] -= mtx[i12] * val; } if (i != 1) { val = tmp[(i << 2) + 1]; tmp[1] -= tmp[i] * val; mtx[1] -= mtx[i] * val; tmp[5] -= tmp[i4] * val; mtx[5] -= mtx[i4] * val; tmp[9] -= tmp[i8] * val; mtx[9] -= mtx[i8] * val; tmp[13] -= tmp[i12] * val; mtx[13] -= mtx[i12] * val; } if (i != 2) { val = tmp[(i << 2) + 2]; tmp[2] -= tmp[i] * val; mtx[2] -= mtx[i] * val; tmp[6] -= tmp[i4] * val; mtx[6] -= mtx[i4] * val; tmp[10] -= tmp[i8] * val; mtx[10] -= mtx[i8] * val; tmp[14] -= tmp[i12] * val; mtx[14] -= mtx[i12] * val; } if (i != 3) { val = tmp[(i << 2) + 3]; tmp[3] -= tmp[i] * val; mtx[3] -= mtx[i] * val; tmp[7] -= tmp[i4] * val; mtx[7] -= mtx[i4] * val; tmp[11] -= tmp[i8] * val; mtx[11] -= mtx[i8] * val; tmp[15] -= tmp[i12] * val; mtx[15] -= mtx[i12] * val; } } }