Пример #1
0
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);
	
}
Пример #2
0
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);
	}

}
Пример #3
0
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;
}