参考课堂教学中关于模型变化的讲解,编写对一个三角形分别实现平移、缩放、旋转等变化的源码及效果图。请以该例为蓝本,实现3题的代码编写。

如下的几幅图,第一幅就是在给出的代码部分进行修改,将GL_FLAT修改为GL_SMOOTH就可以表现出如下的第一幅图的混合色效果。第二幅图中表现得是经过几种分开的变换的效果,分别为平移、旋转、缩放和原图,其中也是使用了混合颜色的方式进行填充的。为了使几个转换之间相互不影响,应注意每一个变换之前要加上这样的一行代码函数:glLoadIdentity ();实现的核心代码在第二幅图下面附上。第三幅图中即为要求的完成几种变换的复合变换,这里要注意的为要函数调用采用的为列向量的方式,所以在变换时要注意变换的实际顺序与代码的书写顺序为相反的,所以这里如果不能正确的调用函数,就会出现问题。当然要求尽量调整裁剪窗口使其图形尽量显示在视口的中心,所以这里要调整gluOrtho2D(-200.0,250.0,-100.0*(GLfloat)h/(GLfloat)w,200.0*(GLfloat)h/(GLfloat)w);这样基本上就显示在中间位置了,也就是第三幅图中的效果。详细代码和效果附下:

第一幅图

第二幅图

【注】核心代码,其他不同代码如下面附代码的有色部分:

void display(void)

{

glClear (GL_COLOR_BUFFER_BIT);

glColor3f (1.0, 1.0, 1.0);

glLoadIdentity ();

glColor3f (1.0, 1.0, 1.0);

glTranslatef(-100.0,-50.0,1.0);

draw_triangle ();

glLoadIdentity ();

glTranslatef (0.0, 100.0, 1.0);

draw_triangle ();

glLoadIdentity ();

glRotatef (90.0, 0.0, 0.0, 1.0);

draw_triangle ();

glLoadIdentity ();

glScalef (0.5, 0.5, 1.0);

draw_triangle ();

glFlush ();

}

第三幅图

【注】第三幅图效果的实现代码:

#include

#include

#include

void init(void)

{

glClearColor (0.0, 0.0, 0.0, 0.0);

glShadeModel (GL_SMOOTH);

}

void draw_triangle(void)

{

glShadeModel(GL_SMOOTH);

glColor3f(0.2,0.7,0.30);

glBegin (GL_TRIANGLES);//画出三角形,为混合色填充方式

glVertex2f(50.0, 25.0);

glColor3f(0.4,0.5,0.60);

glVertex2f(150.0, 25.0);

glColor3f(0.9,0.7,0.8);

glVertex2f(100.0, 100.0);

glEnd();

}

void display(void)

{

glClear (GL_COLOR_BUFFER_BIT);

glColor3f (1.0, 1.0, 1.0);

glLoadIdentity ();

glColor3f (1.0, 1.0, 1.0);

glTranslatef(-100.0,-50.0,1.0);

draw_triangle ();

glLoadIdentity ();

glTranslatef (0.0, 100.0, 1.0);

glRotatef (90.0, 0.0, 0.0, 1.0);

glScalef (0.5, 0.5, 1.0);

draw_triangle ();//经过三种变换后画出图形

glFlush ();

}

void reshape (int w, int h)

{

glViewport (0, 0, (GLsizei) w, (GLsizei) h);

glMatrixMode (GL_PROJECTION);

glLoadIdentity ();

if (w <= h)

gluOrtho2D (-200.0, 250.0, -100.0*(GLfloat)h/(GLfloat)w,

200.0*(GLfloat)h/(GLfloat)w);//调整裁剪窗口

else

gluOrtho2D (-200.0*(GLfloat)w/(GLfloat)h,

250.0*(GLfloat)w/(GLfloat)h, -50.0, 200.0);

glMatrixMode(GL_MODELVIEW);

}

int main(int argc, char** argv)

{

glutInit(&argc, argv);

glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);

glutInitWindowSize (600, 600);

glutInitWindowPosition (100, 100);

glutCreateWindow (argv[0]);

init ();

glutDisplayFunc(display);

glutReshapeFunc(reshape);

glutMainLoop();

return 0;

}

二维图形平移变换c语言程序,[转载]计算机图形学Opengl实现二维图形的平移、旋转、缩放复合变换...相关推荐

  1. c语言二维图形变换程序,【计算机图形学】3-2 二维几何变换根本代码

    [计算机图形学]3-2 二维几何变换基本代码 返回目录 基本理论参见:[计算机图形学]3-1 二维几何变换基本理论 注:这里不考虑插值的问题. 全部的代码都在https://github.com/Cy ...

  2. 初学计算机图形学——OpenGL实现二维图形平移,旋转(不使用opengl自带的函数,齐次方程实现)

    要求:1.给定窗口中绘制坐标系 2.给定坐标系内绘制三角形 3.完成平移.旋转等变换后的三角形绘制 4.采用OpenGL绘制 代码: #include<windows.h> #includ ...

  3. 计算机图形学二维图形基本变换实验原理,计算机图形学实验:二维图形变换.docx...

    计算机图形学实验:二维图形变换.docx (9页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 实验三 二维图形变换一.实验任务1. 通 ...

  4. 计算机图形学三维变换论文,计算机图形学 第5章 三维图形生成和变换技术

    计算机图形学 第5章 三维图形生成和变换技术 (63页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 第五章 目录第五章 三维图形生成和变 ...

  5. 计算机图形学 实验8 《复杂图形绘制-Bezier曲面及其纹理》

    计算机图形学 实验8 <复杂图形绘制-Bezier曲面及其纹理> 一.实验目的 学习样条曲面绘制技术. 二.实验内容 1.绘制Bezier曲面: 2.将纹理图像映射到曲面. 三.实验方法 ...

  6. 计算机图形学 实验7 《复杂图形绘制-Bezier曲线与Hermite曲线》

    计算机图形学 实验7 <复杂图形绘制-Bezier曲线与Hermite曲线> 一.实验目的 学习样条曲线的绘制. 二.实验内容 1.绘制Bezier曲线: 2.绘制Hermite曲线. 三 ...

  7. OpenGL南邮计算机图形学实验报告二——两个纹理的渐变变换和移动

    OpenGL南邮计算机图形学实验报告二--两个纹理的渐变变换和移动 计算机图形学的新题目要求 OpenGL配置参考: 南邮老前辈wonz哥的OpenGL配置(Shader.h始终不用改).SOIL2 ...

  8. 计算机图形学实验一(二维图形绘制)

    计算机图形学实验一(二维图形绘制) 一.实验内容 二.实验环境 三.问题分析 四.算法设计 五.源代码 六.程序运行结果 一.实验内容 (1)绘制金刚石图案 金刚石图案的成图规则是:把一个圆周等分成n ...

  9. 【C语言简单说】二:第一个C语言程序详解(3)

    如有错误请给与纠正- 注:注意我们每一行代码后面的分号表示我们一句代码的结束,就像我们在写文字的时候的标点符号,一个句号表示一句话的结尾. 上一个教程只说明了第一个C语言程序源码中的main(其实等于 ...

最新文章

  1. OpenSceneGraph 笔记--如何导出三角形数据
  2. 【PHP7源码分析】PHP7到底有多快,基准测试与特性分析告诉你
  3. 三分钟学会css3中的flexbox布局
  4. Ubuntu中apache+php+sql搭建/卸载
  5. 【Android 插件化】Hook 插件化框架总结 ( 插件包管理 | Hook Activity 启动流程 | Hook 插件包资源加载 ) ★★★
  6. LeetCode 中等难度 92. 反转链表 II解题思路
  7. NYOJ 801 Haffman编码
  8. 浅谈:Android应用清理内存
  9. es6学习笔记(一)
  10. .NET Core on K8S 学习与实践系列文章索引 (更新至20191126)
  11. 其实企业的C++人最清楚企业的问题
  12. 三星 android 截屏,三星S7怎么截屏 3种三星S7截图方法
  13. html-webpack-template, 一个更好的html web service插件
  14. python编写财务软件_python 与财务
  15. 施乐700彩机服务器维修,施乐700DCP彩色数码复印机维修手册:700dcp_sc_ver1.1_chap05(208页)-原创力文档...
  16. 卸载ie8的一些方法
  17. mysql 无法创建sock,mysql.sock无法打开的问题
  18. unity 粒子 运动模糊_使用模糊库使用粒子模拟景深
  19. nyoj-975-关于521
  20. SQL 校验身份证格式

热门文章

  1. transformer的简要解读(应该都能看懂)
  2. python 网络通讯 plc_Python TCP通信网络编程
  3. html5 自动失去焦点,js input失去焦点事件
  4. 门户通专访月光博客:第一博客是如何打造成的
  5. Hadoop2.7下载安装
  6. 惊了!这才是真正的 Windows 摸鱼神器!!!
  7. 【报告分享】德勤:2023中国消费者洞察与市场展望.pdf(附下载链接)
  8. T13656 NOI接站
  9. 如何在虚拟主机上部署java项目_如何在虚拟主机上部署java项目
  10. 关于type_info与typeid