前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第5章代码-三维观察

第5章代码-三维观察

作者头像
步行者08
发布2020-09-19 13:36:12
4210
发布2020-09-19 13:36:12
举报
文章被收录于专栏:图形学与OpenGL图形学与OpenGL

目录

5.5 编程实例

5.5.1 二维实例——红蓝三角形

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
#include <GL/glut.h>
typedef GLfloat point2d[2];                    	//a point data type 

void triangle( point2d a, point2d b, point2d c)	//display a triangle
{
    glBegin(GL_TRIANGLES);
    glVertex2fv(a);
    glVertex2fv(b);
    glVertex2fv(c);
    glEnd();
}
void display(void) 
{
    point2d v[3] = {{-1.0, -0.58}, {1.0, -0.58}, {0.0, 1.15}};
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0.0,0.0,1.0);  
    glLoadIdentity();
    glViewport(0, 0, 300, 400);
    triangle(v[0], v[1], v[2]); 
    glColor3f(1.0,0.0,0.0);         
    glViewport(300, 0, 300, 400);    
    glRotatef(90.0, 0.0, 0.0, 1.0); 
    triangle(v[0], v[1], v[2]);   
    glFlush();
}

void init() 
{
    glMatrixMode(GL_PROJECTION);
    gluOrtho2D(-2.0, 2.0, -2.0, 2.0);
    glMatrixMode(GL_MODELVIEW);
    glClearColor(1.0, 1.0, 1.0,1.0); 
}

void main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
    glutInitWindowSize(600, 400);
    glutCreateWindow("Triangle");

    glutDisplayFunc(display);
    init();

    glutMainLoop();
}

5.5.2 三维实例——立方体透视投影

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
#include <GL/glut.h>
GLint winWidth = 600, winHeight = 600; 	//设置初始化窗口大小

/* 观察坐标系参数设置*/
GLfloat x0 = 0.0, y0= 0.0, z0 =5.0;	//设置观察坐标系原点 
GLfloat xref = 0.0, yref =0.0, zref = 0.0;	//设置观察坐标系参考点(视点) 
GLfloat Vx = 0.0, Vy = 1.0, Vz = 0.0;	//设置观察坐标系向上向量(y轴) 

/*观察体参数设置 */
//设置裁剪窗口坐标范围
GLfloat xwMin = -1.0, ywMin = -1.0, xwMax = 1.0, ywMax = 1.0;
GLfloat dnear = 1.5, dfar = 20.0;	//设置远、近裁剪面深度范围

void init (void)
{
  glClearColor(1.0,1.0,1.0,0.0);  
  
  /*①观察变换*/
   gluLookAt (x0, y0, z0, xref, yref, zref, Vx, Vy, Vz);  //指定三维观察参数
  
  /*模型变换*/
  glMatrixMode (GL_MODELVIEW);
  glScalef (2.0, 2.0, 2.0);	//比例放缩变换
  glRotatef(45.0, 0.0, 1.0, 1.0);	//旋转变换

  /*②投影变换*/
  glMatrixMode (GL_PROJECTION);
  glLoadIdentity ();

//透视投影,设置透视观察体
  glFrustum (xwMin, xwMax, ywMin, ywMax, dnear, dfar);  
}
void display (void)
{
  glClear (GL_COLOR_BUFFER_BIT);

  glColor3f (0.0, 1.0, 0.0);	//设置前景色为绿色
  glutSolidCube (1.0);	//绘制单位立方体实体
  glColor3f (0.0, 0.0, 0.0);	//设置前景色为黑色
  glLineWidth (2.0);         	//设置线宽
  glutWireCube (1.0);	//绘制单位立方体线框
  
  glFlush ();
}

void reshape (GLint newWidth, GLint newHeight)
{
  /*③视口变换 */
  glViewport (0, 0, newWidth, newHeight);	//定义视口大小

  winWidth = newWidth; 
  winHeight = newHeight;
}
void main (int argc, char** argv)
{
  glutInit (&argc, argv);
  glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); 
  glutInitWindowPosition (100, 100); 
  glutInitWindowSize (winWidth, winHeight); 
  glutCreateWindow ("单位立方体的透视投影");

  init ();
  glutDisplayFunc (display); 
  glutReshapeFunc (reshape);
  glutMainLoop ();
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 5.5 编程实例
    • 5.5.1 二维实例——红蓝三角形
      • 5.5.2 三维实例——立方体透视投影
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档