显示一个立方体的一点透视投影图;(用数组存放正方体的各顶点坐标)。
显示一个立方体的一点透视投影图;(用数组存放正方体的各顶点坐标)
基本步骤如下:
1.将三维物体平移到适当位置(l,m,n);
2.令视点在z轴,进行透视变换,变换矩阵如下:
3.最后,向xOy面作正投影变换,将结果变换到xOy面上。如此构造的一点透视变换矩阵为:
则三维形体中任意一点(x,y,z)的一点透视变换的齐次坐标计算形式为:
[x’,y’,z’,1]=
代码如下:
#include<graphics.h>
#include<stdio.h>float l,m,n,d;//一点透视
//参考参数为l=80,m=160,n=200,d=250
void onetoushi(float *p){float x,y,z,k;int a[10],b[10];int i,N=5;for(i=0;i<24;i=i+3){x=p[i];y=p[i+1];z=p[i+2];k=(d+n+z)/d;p[i]=(x+l)/k;p[i+1]=(y+m)/k;p[i+2]=0;}float q1[10]={p[0],p[1],p[3],p[4],p[15],p[16],p[12],p[13],p[0],p[1]};float q2[10]={p[6],p[7],p[9],p[10],p[21],p[22],p[18],p[19],p[6],p[7]};for(i=0;i<10;i++){a[i]=(int)q1[i];b[i]=(int)q2[i];}drawpoly(5,a);drawpoly(5,b);line(a[0],a[1],b[2],b[3]);line(a[2],a[3],b[0],b[1]);line(a[4],a[5],b[6],b[7]);line(a[6],a[7],b[4],b[5]);
}//主函数
int main(){int gd=DETECT,gmode;float p[24]={0,0,0,100,0,0,100,100,0,0,100,0,0,0,100,100,0,100,100,100,100,0,100,100};printf("请输入平移的位置:\n");printf("l= ");scanf("%f",&l);printf("m= ");scanf("%f",&m);printf("n= ");scanf("%f",&n);printf("输入投影中心在z的位置:\n");printf("d= ");scanf("%f",&d);initgraph(&gd,&gmode,"");onetoushi(p);getchar();getchar();closegraph();return 0;
}
运行输入参数:
显示结果为:
显示一个立方体的一点透视投影图;(用数组存放正方体的各顶点坐标)。相关推荐
- 编写立方体的一点透视投影图
一.窗口到视区的坐标变换 1.窗口:在世界坐标系中,设置一矩阵区域,来观察整幅图中的部分内容. 2.视区:窗口映射到显示器上的区域称为视区. 3.坐标变换 (xv-xv_min)/(xv_max-xv ...
- 现代opengl 设计入门,坐标系统和立方体的纹理贴图
本文在 现代opengl 设计入门,纹理贴图 一文的基础上,引入opengl坐标系统,实现立方体的纹理贴图.介绍了opengl 的5个空间,3个变换矩阵.如果看这部分介绍比较繁琐,可以直接看看效果图, ...
- 利用OpenGL的多视区分别在4个视区内显示空间四面体的透视投影图、主视图、俯视图、侧视图
这还是计算机图形学基础的一个课后作业. 本来想偷偷懒只用OpenGL提供的gluLookAt.glViewport.gluPerspective来改变视区和观察方向实现三视图和透视投影图,而不用矩阵去 ...
- image1载入大图片时如果stretch=true,image1会显示出大图片的缩图,那么如何将这个缩图镜像复制一份赋值给另一个image2的picture呢?...
image1载入大图片时如果stretch=true,image1会显示出大图片的缩图,那么如何将这个缩图镜像复制一份赋值给另一个image2的picture呢? Delphi / Windows S ...
- echarts 横坐标显示一个月,excel折线图横坐标最后一个点选择数据选不上是什么原因?...
excel折线图横坐标最后一个点选择数据选不上是什么原因? 如果你说的是折线图横坐标选中的数据最后一个无法显示在横坐标上 您可以尝试一下 可以右击横坐标轴-设置坐标轴格式-选择大小与属性-对其方式-文 ...
- 4 UML 图中,一张交互图显示一个交互,由一组对象及其之间的关系组成,包含它 们之间可能传递的消息,以下不是交互图的是( )
标签: 软考初级程序员易错题,计算机基础, 面向对象基础,统一建模语言 (UML) UML 图中,一张交互图显示一个交互,由一组对象及其之间的关系组成,包含它们之间可能传递的消息,以下不是交互图的是( ...
- opengl从画三角形到画一个立方体(三)
上一节中,我们提到了好多的空间,那么本节重点讲述的是透视空间,之前的博文中也讲到透视矩阵的推导.视图矩阵的推导,这些都讲过,但是每次涉及到坐标的变换,这些又是那么的重要,所以经常的捡起来回忆回忆还是很 ...
- sandy引擎学习笔记: 创建一个立方体
问题:如何利用sandy的类库去创建一个立方体呢? 首先,我们要先了解sandy类库的结构 可以看到上面就官方网放出的类库表,有一些很容易理解,像sandy.events 这个和flash.event ...
- 数据的流动——计算机是如何显示一个像素的
在计算机内部是怎么把一张照片显示到屏幕上的呢? 对于这个问题一直很好奇,这应该是也是图形学的一个最基础的问题吧.没上过计算机组成原理课,只好自行百度谷歌~ 发现网上的答案大多不完整,前段时间顺着问题一 ...
- 如何(c++,js)写一个传统的K线图和走势图3-十字光标的绘制
首先我们来说下 1. 十字光标是做什么用的.十字光标用来查看某一天或某一个时间点上对应的行情数据及各个窗口对应指标数据. 2. 哪些操作可以控制十字光标.键盘左右, 鼠标左右移动, ...
最新文章
- python 网络编程之Socket通信案例消息发送与接收
- python 菜鸟入门
- JAVA ++ 运算符题目
- python跨目录调用_python 跨目录访问文件
- 理解vue中$watch使用
- Xenko C#开源游戏引擎
- JS - 计算直角三角形的边长及角度
- Epub格式电子书格式
- 网吧服务器系统是怎么弄的,网吧无盘服务器系统的安装及设置
- 请问蓝牙设备如何测试?
- cocos 躲避球游戏(1) --创建项目和场景切换
- __CTOR_LIST__和__DTOR_LIST__解释
- gnuplot画图点线设置
- 2011-09-06 [FCKEditor插件移植至CKEditor(plus_format_fck.js)]
- ubuntu和windows复制粘贴
- 云计算中laaS,PaaS和SaaS的含义及区别
- JavaCompiler
- 随机过程 更新过程(上)
- 【2020】07 留校
- 微表情反欺诈模型特征解析及应用
热门文章
- CocosCreater 发布apk接穿山甲广告SDK(一)
- linux操作系统 第12章 网络与通信应用
- ORVIBO 精灵款升级分析
- IEEE论文检测的字体未嵌入问题Times New Roman,Bold, Times New Roman,Italic is not embedded解决方法
- 目录_Java内存分配(直接内存、堆内存、Unsafel类、内存映射文件)
- 《维C中国》乡村助农暖人心第三站嘉宝果农场
- 阿里巴巴、腾讯、字节跳动“顺从”互联网监管,提交应用算法详情
- java身份证实名认证
- python只保留大写字母_python 将文件中除保留字外的小写字母换成大写字母(转换后可运行)...
- 帝国cms框架的Webshell