コード例 #1
0
ファイル: Rotations.cpp プロジェクト: alexrusciano/Rotations
void Draw ( AAContext *aaContext )
{
   UserData *userData = (UserData*) aaContext->userData;
   if(userData->animation->animating)
		UpdateAnimation(aaContext);
   MMatrix view;
   MViewingOrigin(&view, userData->eye);
   MMatrix mv;
   MMatrix model;
   MMultiply(&model, userData->sphere->modelT, userData->sphere->modelR);
   MMultiply(&mv, &view, &model);
   float aspect = 1.0;
   float fov = 90.0f;
   float n = 1.0;
   float f = 80.0;
   MMatrix perspective;
   MPerspective(&perspective, aspect, fov, n, f);
   MMatrix mvp;
   MMultiply(&mvp, &perspective, &mv);
      // Set the viewport
   glViewport ( 0, 0, aaContext->width, aaContext->height );
   
   // Clear the color buffer
   glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

   // Use the program object
   glUseProgram ( userData->programObject );

   glUniformMatrix4fv(userData->mvpLoc,1, GL_FALSE, mvp.m[0]);
   glUniform1i(userData->texLoc, 0);
   glActiveTexture ( GL_TEXTURE0 );
   glBindTexture ( GL_TEXTURE_2D, userData->earth_texture );
   glVertexAttribPointer(userData->texCoordsLoc, 2, GL_FLOAT,
	   GL_FALSE, 2*sizeof(float), userData->sphere->texCoords);
   glEnableVertexAttribArray ( userData->texCoordsLoc);
   glVertexAttribPointer ( userData->positionLoc, 3, GL_FLOAT, 
	   GL_FALSE, 3*sizeof(float), userData->sphere->vertices);
   glEnableVertexAttribArray ( userData->positionLoc);
   glDrawBuffer(GL_FRONT);
   glDrawElements ( GL_TRIANGLES, userData->sphere->numIndices, GL_UNSIGNED_INT, userData->sphere->indices);
   glFlush(); 

   BOOL swap_success = SwapBuffers(aaContext->display);
}
コード例 #2
0
GLuint SetupGraphics(struct engine * engine){
	
	const char vShader[] =
	"attribute vec3 vPosition;												\n"
	"attribute vec3 vColor;													\n"
	"varying vec4   Color;													\n"	

    "uniform mat4 uMVMatrix;												\n"
    "uniform mat4 uPMatrix;													\n"

    "void main(void) {														\n"
    "	gl_Position = uPMatrix * uMVMatrix * vec4(vPosition, 1.0);			\n"
    "	Color = vec4( vColor, 1.0);											\n"
    "} 																		\n";


	const char fShader[] = 
	"precision mediump float;												\n"
	"varying vec4 Color;													\n"	
	
	"void main() {															\n"
	"  gl_FragColor = Color;												\n"
	"}																		\n";	
		
	LOGI("Init Graphics");
	
	printGLString("Version",	GL_VERSION);
	printGLString("Vendor",		GL_VENDOR);
	printGLString("Renderer",	GL_RENDERER);
	printGLString("Extensions", GL_EXTENSIONS);
	
	LOGI("setupGraphics(%d, %d)", engine->Scr.width, engine->Scr.height);

	engine->GLData.pObject = CreateGLProgram(vShader, fShader);
	
	if(!engine->GLData.pObject) {
		LOGE("Could not create program.");
		return 0;
	}
		
	engine->GLData.gPositionAttribute	= glGetAttribLocation( engine->GLData.pObject, "vPosition");	checkGlError("glGetAttribLocation");
	LOGI("glGetAttribLocation(\"vPosition\") = %d\n", engine->GLData.gPositionAttribute);
	glEnableVertexAttribArray(engine->GLData.gPositionAttribute);										checkGlError("glenableVertexAttribArray");

	engine->GLData.gColorsAttribute		= glGetAttribLocation( engine->GLData.pObject, "vColor");		checkGlError("glGetAttribLocation");
	LOGI("glGetAttribLocation(\"vColor\") = %d\n", engine->GLData.gColorsAttribute);
	glEnableVertexAttribArray(engine->GLData.gColorsAttribute);											checkGlError("glenableVertexAttribArray");

	LOGI("Get Uniform Locations");
    engine->GLData.p_Matrix	= glGetUniformLocation(engine->GLData.pObject, "uPMatrix");					checkGlError("glgetUniformLocation uPMatrix");
    engine->GLData.u_Matrix	= glGetUniformLocation(engine->GLData.pObject, "uMVMatrix");				checkGlError("glgetUniformLocation uMVMatrix");

	LOGI("Uniform modelview at %d\n",  engine->GLData.u_Matrix);
	LOGI("Uniform Projection at %d\n", engine->GLData.p_Matrix);


	glEnable( GL_DEPTH_TEST );
	glDepthFunc( GL_LEQUAL );
	glDepthMask( GL_TRUE );	
	glClearDepthf(1.0f);

	// Load identities 
	LoadIdentity( engine->Matrices.cMatrix); 
	LoadIdentity( engine->Matrices.pMatrix);
	
//~ 1280×800	1.6
//~ 1280x960	1.3333
//~ 1280x1024	1.25
	
	MPerspective( engine->Matrices.pMatrix, 1.25, 1.0f, 1000.0f);	
	glViewport(0, 0, engine->Scr.width, engine->Scr.height);																		checkGlError("glViewport");		
	
	GLfloat _Pose[] = { 0.0, 0.1, 0.0};		
	GLfloat _View[] = { 0.0, 0.0, 5.0};
	GLfloat _UpVx[] = { 0.0, 1.0, 0.0};
	
	LookAtM( engine->Matrices.cMatrix, _Pose, _View, _UpVx);
		
	return 1;
}