设为首页 加入收藏

TOP

OpenGL 基础图形绘制与投影变换(二)
2015-02-02 14:22:07 来源: 作者: 【 】 浏览:13
Tags:OpenGL 基础 图形 绘制 投影 变换
xit(0);
?case 'r':
? static GLintPoint corners[3];
? for (int i=0;i<3;i++)
? {
? ?corners[i].x = random(640);
? ?corners[i].y = random(screenHeight);
? }
? drawSierpinski(corners);
?default:
? break;
?}
}


// Initialization
void Init(void)? ?
{
?glClearColor(1.0,1.0,1.0,0.0); // Set white background color
?glColor3f(0.0f,0.0f,0.0f);? ? // Set the drawing color
?glMatrixMode(GL_PROJECTION);
?glLoadIdentity();
?gluOrtho2D(0.0,640.0,0.0,480.0);
}


void myDisplay()
{
?glClear(GL_COLOR_BUFFER_BIT);? ? ? //clear the screen
?GLintPoint Mypoint = {200,100};
?parameterizedHouse(Mypoint,100,100);
?drawFlurry(4,100,100);
?glFlush();
}


void main(int argc,char *argv[])
{
?glutInit(&argc, argv);? // Initialize the toolkit
?glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);? // Set display mode
?glutInitWindowPosition(100, 150);? // Set window pozition on screen
?glutInitWindowSize(640, 480);? ? ? // Set window size
?glutCreateWindow("parameterizedHouse, Flurry and drawSierpinski"); // Open the screen window
?glutDisplayFunc(myDisplay); // Register redraw function
?glutMouseFunc(myMouse);
?glutKeyboardFunc(onKeyBoard);
?Init();
?glutMainLoop();? // Go into a perpetual loop
}


效果图:



第二个例子绘制了这样一系列图形:



在其中有空间投影变换,主要应用了三个函数:


投影变换函数glViewport(), 矩阵平移函数glTranslated() 和正射投影函数 glOrtho()


上图实现代码参考《计算机图形学-用OpenGL实现第2版》:


#include ? //suitable when using Windows 95/98/NT
#include
#include
#include
//<<<<<<<<<<<<<<<<<<< axis >>>>>>>>>>>>>>
void axis(double length)
{ // draw a z-axis, with cone at end
?glPushMatrix();
?glBegin(GL_LINES);
?glVertex3d(0, 0, 0); glVertex3d(0,0,length); // along the z-axis
?glEnd();
?glTranslated(0, 0,length -0.2);
?glutWireCone(0.04, 0.2, 12, 9);
?glPopMatrix();
}?
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<< displayWire >>>>>>>>>>>>>>>>>>>>>>
void displayWire(void)
{
?glMatrixMode(GL_PROJECTION); // set the view volume shape
?glLoadIdentity();
?glOrtho(-2.0*64/48.0, 2.0*64/48.0, -2.0, 2.0, 0.1, 100);//正射投影函数
?glMatrixMode(GL_MODELVIEW); // position and aim the camera
?glLoadIdentity();
?gluLookAt(2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);//define viewpoint transformation


?//Draw axis
?glClear(GL_COLOR_BUFFER_BIT); // clear the screen
?glColor3d(0,0,0); // draw black lines
?axis(0.5);? ? ? // z-axis
?glPushMatrix();
?glRotated(90, 0,1.0, 0);
?axis(0.5);? ? ?// y-axis
?glRotated(-90.0, 1, 0, 0);
?axis(0.5);? ? ?// z-axis
?glPopMatrix();?


?//Draw Cube
?glPushMatrix();
?glTranslated(0.5, 0.5, 0.5); // multiply by a translation matrix, define center (0.5, 0.5, 0.5)
?glutWireCube(1.0);
?glPopMatrix();


?//Draw Sphere
?glPushMatrix();?
?glTranslated(1.0,1.0,0);?// sphere at (1,1,0)
?glutWireSphere(0.25, 10, 8);
?glPopMatrix();?


?//Draw Cone
?glPushMatrix();?
?glTranslated(1.0,0,1.0);?// cone at (1,0,1)
?glutWireCone(0.2, 0.5, 10, 8);
?glPopMatrix();


?//Draw Teapot
?glPushMatrix();
?glTranslated(1,1,1);
?glutWireTeapot(0.2); // teapot at (1,1,1)
?glPopMatrix();


?//Draw Torus
?glPushMatrix();
?glTranslated(0, 1.0 ,0); // torus at (0,1,0)
?glRotated(90.0, 1,0,0);
?glutWireTorus(0.1, 0.3, 10,10);
?glPopMatrix();


?//十二面体
?glPushMatrix();
?glTranslated(1.0, 0 ,0); // dodecahedron at (1,0,0)
?glScaled(0.15, 0.15, 0.15);
?glutWireDodecahedron();
?glPopMatrix();


?glPushMatrix();
?glTranslated(0, 1.0 ,1.0); // small cube at (0,1,1)
?glutWireCube(0.25);
?glPopMatrix();


?glPushMatrix();
?glTranslated(0, 0 ,1.0); // cylinder at (0,0,1)
?GLUquadricObj * qobj;
?qobj = gluNewQuadric();
?gluQuadricDrawStyle(qobj,GL

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇如何使用JavaScript书写递归函数 下一篇Delphi中保证程序只运行一个实例..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: