void Draw(GLContext *_context) { UserData *_user = (UserData *)_context->userObject; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//very important //draw earth _user->object->enableObject(); glBindBuffer(GL_ARRAY_BUFFER, _user->positionVertexBufferId); glEnableVertexAttribArray(0);//position glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), NULL); glBindBuffer(GL_ARRAY_BUFFER, _user->texCoordVertexBufferId); glEnableVertexAttribArray(1); glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float), NULL); glBindBuffer(GL_ARRAY_BUFFER, _user->normalVertexBufferId); glEnableVertexAttribArray(2); glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), NULL); // ESMatrix mvMatrix; esMatrixLoadIdentity(&mvMatrix); esTranslate(&mvMatrix, 0.0f, 0.0f, -5.0f); esRotate(&mvMatrix, 17.7f , 1.0f, 0.0f, 0.0f); esRotate(&mvMatrix, _user->earthAngle, 0.0f, 1.0f, 0.0f); glUniformMatrix4fv(_user->mvLoc, 1, GL_FALSE,(float*)mvMatrix.m);//mv matrix ESMatrix projMatrix, mvpMatrix; esMatrixLoadIdentity(&projMatrix); esOrtho(&projMatrix, -1.0f, 1.0f, -1.0f, 1.0f, -10.0f, 10.0f); esMatrixMultiply(&mvpMatrix, &mvMatrix, &projMatrix); glUniformMatrix4fv(_user->mvpLoc, 1, GL_FALSE, (float *)mvpMatrix.m); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, _user->earthMapId); glUniform1i(_user->baseMapLoc, 0); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDrawArrays(GL_TRIANGLES, 0, sphereNumVerts); //画出月球 _user->object->enableObject(); glBindBuffer(GL_ARRAY_BUFFER, _user->positionVertexBufferId); glEnableVertexAttribArray(0); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), NULL); glEnableVertexAttribArray(1); glVertexAttribPointer(1, 2 * sizeof(float), GL_FLOAT, GL_FALSE, 2 * sizeof(float), NULL); glEnableVertexAttribArray(2); glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), NULL); esMatrixLoadIdentity(&mvMatrix); esTranslate(&mvMatrix, 0.0f, 0.0f, -5.0f); esScale(&mvMatrix, 0.25f, 0.25f, 0.25f); esRotate(&mvMatrix, 17.7f, 1.0f, 0.0f, 0.0f); esRotate(&mvMatrix, _user->moonAngle, 0.0f, 1.0f, 0.0f); esTranslate(&mvMatrix, 4.0f, 0.0f, 0.0f); glUniformMatrix4fv(_user->mvLoc, 1, GL_FALSE, (float*)mvMatrix.m); esMatrixLoadIdentity(&projMatrix); esOrtho(&projMatrix, -1.0f, 1.0f, -1.0f, 1.0f, -10.0f, 10.0f); esMatrixMultiply(&mvpMatrix, &mvMatrix, &projMatrix); glUniformMatrix4fv(_user->mvpLoc, 1, GL_FALSE, (float*)mvpMatrix.m); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, _user->moonMapId); glUniform1i(_user->baseMapLoc, 0); glBlendFunc(GL_ONE, GL_ZERO); glDrawArrays(GL_TRIANGLES, 0, sphereNumVerts); }
void updateCamera(){ // BT_PROFILE("updateCamera"); // btScalar rele = m_ele * btScalar(0.01745329251994329547);// rads per deg // btScalar razi = m_azi * btScalar(0.01745329251994329547);// rads per deg // // // btQuaternion rot(m_cameraUp,razi); // // // btVector3 eyePos(0,0,0); // eyePos[m_forwardAxis] = -m_cameraDistance; // // LOGI("eyepos1 is %f,%f,%f",eyePos.getX(),eyePos.getY(),eyePos.getZ()); // btVector3 forward(eyePos[0],eyePos[1],eyePos[2]); // if (forward.length2() < SIMD_EPSILON) // not executed // { // forward.setValue(1.f,0.f,0.f); // } // btVector3 right = m_cameraUp.cross(forward); // btQuaternion roll(right,-rele); // // eyePos = btMatrix3x3(rot) * btMatrix3x3(roll) * eyePos; // // m_cameraPosition[0] = eyePos.getX(); // m_cameraPosition[1] = eyePos.getY(); // m_cameraPosition[2] = eyePos.getZ(); // //// LOGI("eyepos2 is %f,%f,%f",eyePos.getX(),eyePos.getY(),eyePos.getZ()); // m_cameraPosition += m_cameraTargetPosition; // // if (m_glutScreenWidth == 0 && m_glutScreenHeight == 0) // return; // btScalar aspect; btVector3 extents; aspect = m_glutScreenWidth / (btScalar)m_glutScreenHeight; extents.setValue(aspect * 1.0f, 1.0f,0); if (m_ortho) { // not executed extents *= m_cameraDistance; btVector3 lower = m_cameraTargetPosition - extents; btVector3 upper = m_cameraTargetPosition + extents; // gluOrtho2D(lower.x, upper.x, lower.y, upper.y); esOrtho(&projMat,lower.getX(), upper.getX(), lower.getY(), upper.getY(),-1000,1000); // glOrthof(lower.getX(), upper.getX(), lower.getY(), upper.getY(),-1000,1000); LOGI("ORTHO"); } else { // esFrustum(&projMat, -aspect * 1.0f, aspect * 1.0f, 1.0f, -1.0f, 1.0f, 200.0f); // esMatrixLookAt(&viewMat, // m_cameraPosition[0], m_cameraPosition[1], m_cameraPosition[2], // m_cameraTargetPosition[0], m_cameraTargetPosition[1], m_cameraTargetPosition[2], // m_cameraUp.getX(),m_cameraUp.getY(),m_cameraUp.getZ()); esFrustum(&projMat, -aspect, aspect, -1.0f, 1.0f, 1.0f, 1000.0f); esMatrixLookAt(&viewMat, 0.0f, 100.0f, 20.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); } }
bool setupGraphics(int w, int h) { printGLString("Version", GL_VERSION); printGLString("Vendor", GL_VENDOR); printGLString("Renderer", GL_RENDERER); printGLString("Extensions", GL_EXTENSIONS); LOGI("setupGraphics(%d, %d)", w, h); gProgram = createProgram(gVertexShader, gFragmentShader); if (!gProgram) { LOGE("Could not create program."); return false; } gvPositionHandle = glGetAttribLocation(gProgram, "vPosition"); gShaderTexCoord = glGetAttribLocation ( gProgram, "a_texCoord" ); gvpMatrix = glGetUniformLocation( gProgram, "u_TransMatrix" ); gShaderImgTexture = glGetUniformLocation( gProgram, "s_ImgTexture" ); makeCheckImages(); glGenTextures( 1, &texName ); glBindTexture(GL_TEXTURE_2D, texName); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage); glUseProgram(gProgram); glEnableVertexAttribArray(gvPositionHandle); glEnableVertexAttribArray( gShaderTexCoord ); glUniform1i ( gShaderImgTexture, 0 ); gWidthd2 = w / 2; gHeightd2 = h / 2; esMatrixLoadIdentity( &gOrthographic ); //esOrtho(&gOrthographic, 0, mWidth, -mHeight, 0, 5.0f, -5.0f ); esOrtho(&gOrthographic, -gWidthd2, gWidthd2, -gHeightd2, gHeightd2, 5.0f, -5.0f ); ESMatrix modelview; esMatrixLoadIdentity( &gMatrix ); esMatrixLoadIdentity( &modelview ); esMatrixMultiply( &gMatrix, &modelview, &gOrthographic ); glViewport(0, 0, w, h); glUniformMatrix4fv( gvpMatrix, 1, GL_FALSE, (GLfloat *)&gMatrix ); //glGenBuffers( 1, &guVbo ); //glBindBuffer( GL_ARRAY_BUFFER, guVbo ); //glBufferData( GL_ARRAY_BUFFER, 5 * 6 * sizeof( GLfloat), gTriangleVertices, GL_STREAM_DRAW ); glActiveTexture ( GL_TEXTURE0 ); glBindTexture ( GL_TEXTURE_2D, texName ); createRenderBuffer(); //ESMatrix matrixTrans; //ESMatrix modelview; //esMatrixLoadIdentity( &modelview ); //esTranslate( &modelview, -fx, fy, 0.0 ); //esMatrixMultiply( &matrixTrans, &modelview, &gOrthographic ); glUniformMatrix4fv( gvpMatrix, 1, GL_FALSE, (GLfloat *)&gOrthographic ); return true; }