测试OpenGL中的角度是否以逆时针为正

//测试角度是否以逆时针为正
#define FREEGLUT_STATIC
#include <GL/glut.h>
#include <math.h>

GLfloat x=0.0f;
GLfloat y=0.0f;
GLfloat fRange=15.0f;

void SetupRC()
{
	glClearColor(0.0f,0.0f,0.0f,1.0f);
}

void RenderScene()
{
	glClear(GL_COLOR_BUFFER_BIT);

	glPolygonMode(GL_FRONT,GL_LINE);
	glBegin(GL_TRIANGLE_FAN);

	glColor3f(1.0f,0.0f,0.0f);//red
	glVertex3f(0.0f,0.0f,0.0f);
	glVertex3f(10.0f*cos(0.0),10.0f*sin(0.0),0.0f);

	glColor3f(0.0f,1.0f,0.0f);//green
	glVertex3f(10.0f*cos(3.14/6),10.0f*sin(3.14/6),0.0f);

	glColor3f(0.0f,0.0f,1.0f);//blue
	glVertex3f(10.0f*cos(3.14/2),10.0f*sin(3.14/2),0.0f);

	glEnd();

	glutSwapBuffers();
}

void ChangeSize(int w,int h)
{
	if(h==0)
		h=1;

	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	if(w<=h)
		glOrtho(-fRange,fRange,-fRange,fRange*h/w,1.0f,-1.0f);
	else
		glOrtho(-fRange,fRange*w/h,-fRange,fRange,1.0f,-1.0f);

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();

	glutPostRedisplay();
}

int main(int argc,char** argv)
{
	glutInit(&argc,argv);
	glutInitWindowSize(800,600);
	glutCreateWindow("Tesing if Angle is positive along the CW direction");

	glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA);
	glutDisplayFunc(RenderScene);
	glutReshapeFunc(ChangeSize);

	SetupRC();

	glutMainLoop();
	return 0;
}

  程序中设置的正面(GL_FRONT)为边框模式(GL_LINE),而背面为默认的填充模式(GL_FILL)。通过指定的三个顶点的颜色顺序RGB,可以证明OpenGL中的角度以逆时针为正。

有图为证:

 (几天后)更正一下:其实仔细想想,就会发现上面实属“谬论”。原因:你拿sin cos值来说事啊,他们的正负是数学真理,跟你逆时针 顺时针没有任何关系啊。sin值正了,就在y的正半轴呗-.- 如果真要测试OGL是否以逆时针角度为正的话,可以测试glRotatef函数:见http://www.cnblogs.com/tupx/articles/2996280.html

posted @ 2013-04-01 16:38  Tup  阅读(633)  评论(0)    收藏  举报