我们模拟从被观察物体射出光线,在眼球焦点交汇,然后打到视网膜上成像

——足够了吧,剩下的难度应该是普及-

只是有一些常数可以自己调一下,看着顺眼就好

 #include <graphics.h>
#include <cstdio>
VECTOR3D a;
VECTOR3D b;
VECTOR3D c;
VECTOR3D d;
VECTOR3D a1;
VECTOR3D b1;
VECTOR3D c1;
VECTOR3D d1;
float k=;
#define fudu 0.1
#define len 1
#define lenz 20
#define ox 300
#define oy 300
int one=;
float sdx(VECTOR3D a)
{
return (ox+one*a.x/(a.z+lenz)*len);
}
float sdy(VECTOR3D a)
{
return (oy+one*a.y/(a.z+lenz)*len);
}
void li(VECTOR3D a,VECTOR3D b)
{
line_f(sdx(a),sdy(a),sdx(b),sdy(b));
}
void mia(VECTOR3D a,VECTOR3D b,VECTOR3D c)
{
int mian[]=
{
sdx(a),sdy(a),
sdx(b),sdy(b),
sdx(c),sdy(c),
};
fillpoly(,mian);
}
void print()
{
cleardevice();
setcolor(0xFFFFFF);
setfillcolor(0x9999FF);
mia(a,b,c);
mia(a,b,d);
mia(a,c,d);
mia(d,b,c);
mia(a1,b1,c1);
mia(a1,b1,d1);
mia(a1,c1,d1);
mia(d1,b1,c1);
li(a,b);
li(b,c);
li(c,d);
li(d,a);
li(a,c);
li(b,d);
li(a1,b1);
li(b1,c1);
li(c1,d1);
li(d1,a1);
li(a1,c1);
li(b1,d1);
delay_ms();
}
void change()
{
char ch=getch();
if(ch=='w')
{
a.Rotate(fudu,,,);
b.Rotate(fudu,,,);
c.Rotate(fudu,,,);
d.Rotate(fudu,,,);
a1.Rotate(fudu,,,);
b1.Rotate(fudu,,,);
c1.Rotate(fudu,,,);
d1.Rotate(fudu,,,);
}
else
if(ch=='s')
{
a.Rotate(fudu,-,,);
b.Rotate(fudu,-,,);
c.Rotate(fudu,-,,);
d.Rotate(fudu,-,,);
a1.Rotate(fudu,-,,);
b1.Rotate(fudu,-,,);
c1.Rotate(fudu,-,,);
d1.Rotate(fudu,-,,);
}
else
if(ch=='a')
{
a.Rotate(fudu,,,);
b.Rotate(fudu,,,);
c.Rotate(fudu,,,);
d.Rotate(fudu,,,);
a1.Rotate(fudu,,,);
b1.Rotate(fudu,,,);
c1.Rotate(fudu,,,);
d1.Rotate(fudu,,,);
}
else
if(ch=='d')
{
a.Rotate(fudu,,-,);
b.Rotate(fudu,,-,);
c.Rotate(fudu,,-,);
d.Rotate(fudu,,-,);
a1.Rotate(fudu,,-,);
b1.Rotate(fudu,,-,);
c1.Rotate(fudu,,-,);
d1.Rotate(fudu,,-,);
}
else
if(ch==' ')
{
a.Rotate(fudu,,,);
b.Rotate(fudu,,,);
c.Rotate(fudu,,,);
d.Rotate(fudu,,,);
a1.Rotate(fudu,,,);
b1.Rotate(fudu,,,);
c1.Rotate(fudu,,,);
d1.Rotate(fudu,,,);
}
else
if(ch=='[')
one-=;
else
if(ch==']')
one+=;
}
int main()
{
printf("wasd旋转[]缩放");
delay();
initgraph(ox*,oy*);
setrendermode(RENDER_MANUAL);
a.x=;
a.y=;
a.z=-1.4142135623730950488016887242097/;
b.x=;
b.y=;
b.z=1.4142135623730950488016887242097*1.5;
c.x=-1.7320508075688772935274463415059;
c.y=-;
c.z=-1.4142135623730950488016887242097/;
d.x=1.7320508075688772935274463415059;
d.y=-;
d.z=-1.4142135623730950488016887242097/;
a1.x=1.7320508075688772935274463415059;
a1.y=;
a1.z=1.4142135623730950488016887242097/;
b1.x=-1.7320508075688772935274463415059;
b1.y=;
b1.z=1.4142135623730950488016887242097/;
c1.x=;
c1.y=-;
c1.z=1.4142135623730950488016887242097/;
d1.x=;
d1.y=;
d1.z=-1.4142135623730950488016887242097*1.5;
print();
while()
{
change();
print();
}
}

画了一个梅塔特隆立方体玩玩,看着应该比较顺眼

【水】基于ege的简单3D模拟的更多相关文章

  1. 基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(二)

    我们上一篇<基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(一)>主要讲解了如何搭建一个实时数据通讯服务器,客户端与服务端是如何通讯的,相信通过上一篇的讲解,再配 ...

  2. 基于modelsim-SE的简单仿真流程—下

    基于modelsim-SE的简单仿真流程—下 编译 在 WorkSpace 窗口的 counter_tst.v上点击右键,如果选择Compile selected 则编译选中的文件,Compile A ...

  3. 基于HTML5的燃气3D培训仿真系统

    最近上线了的基于HTML5的燃气3D培训仿真系统,以前的老系统是采用基于C++和OpenGL的OpenSceneGraph引擎设计的,OSG引擎性能和渲染效果各方面还是不错的,但因为这次新产品需求要求 ...

  4. 基于 HTML5 的 WebGL 3D 档案馆可视化管理系统

    前言 档案管理系统是通过建立统一的标准以规范整个文件管理,包括规范各业务系统的文件管理的完整的档案资源信息共享服务平台,主要实现档案流水化采集功能.为企事业单位的档案现代化管理,提供完整的解决方案,档 ...

  5. 基于 HTML5 WebGL 的 3D 风机 Web 组态工业互联网应用

    基于 HTML5 WebGL 的 3D 风机 Web 组态工业互联网应用 前言 在目前大数据时代背景之下,数据可视化的需求也变得越来越庞大,在数据可视化的背景之下,通过智能机器间的链接并最终将人机链接 ...

  6. Netty学习——基于netty实现简单的客户端聊天小程序

    Netty学习——基于netty实现简单的客户端聊天小程序 效果图,聊天程序展示 (TCP编程实现) 后端代码: package com.dawa.netty.chatexample; import ...

  7. 基于modelsim-SE的简单仿真流程—上

    基于modelsim-SE的简单仿真流程 编写RTL功能代码 要进行功能仿真,首先得用需要仿真的模块,也就是RTL功能代码,简称待测试的模块,该模块也就是在设计下载到FPGA的电路.一个电路模块想要有 ...

  8. 基于css3的文字3D翻转特效

    一款基于css3的文字3D翻转特效.这款特效当鼠标经过文字的时候3D翻转显示阴影.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="compo ...

  9. PhantomJS实现最简单的模拟登录方案

    以前写爬虫,遇到需要登录的页面,一般都是通过chrome的检查元素,查看登录需要的参数和加密方法,如果网站的加密非常复杂,例如登录qq的,就会很蛋疼 在后面,有了Pyv8,就可以把加密的js文件扔给它 ...

随机推荐

  1. 在Application中集成Microsoft Translator服务之获取访问令牌

    我在这里画了一张图来展示业务逻辑 在我们调用microsoft translator server之前需要获得令牌,而且这个令牌的有效期为10分钟.下表列出所需的参数和对于的说明 参数 描述 clie ...

  2. PHP利用P3P实现跨域

    本文转自:点这里 有别于JS跨域.IFRAME跨域等的常用处理办法,还可以利用P3P来实现跨域. P3P是什么 P3P(Platform for Privacy Preferences)是W3C公布的 ...

  3. 妈妈再也不用担心别人问我是否真正用过redis了

    1. Memcache与Redis的区别 1.1. 存储方式不同 1.2. 数据支持类型 1.3. 使用底层模型不同 2. Redis支持的数据类型 3. Redis的回收策略 4. Redis小命令 ...

  4. webview滑动事件 与内部html左右滑动事件冲突问题的解决办法

    最近在做个混合app , 用html做页面,然后通过webview嵌套在activity中,效果是这样: 开始还是比较顺利,增加了菜单退出按钮,返回键页面回退功能,页面加载显示加载图标(在app端实现 ...

  5. HDU 3333 | Codeforces 703D 树状数组、离散化

    HDU 3333:http://acm.hdu.edu.cn/showproblem.php?pid=3333 这两个题是类似的,都是离线处理查询,对每次查询的区间的右端点进行排序.这里我们需要离散化 ...

  6. TypeError: test() got multiple values for keyword argument 'key'

    原因是: 1.函数调用的最终形式只会调用两个函数.一个list参数和一个dict参数,格式为call(func, list, dict); 2.如果传入参数中有key参数,那么首先key参数(包括扩展 ...

  7. android BitMap回收

    第一种方法--及时回收bitmap内存: 一般而言,回收bitmap内存可以用到以下代码 if(bitmap != null && !bitmap.isRecycled()){ bit ...

  8. .Net中使用无闪刷新控件时提示框不显示

    今天做提示框的时候一直不显示,让我郁闷好久,晚上吃饭的时候问了同事一下,他给了一个思路, 他说可能是因为由于页面中的无闪刷新导致的结果:百度了一下真找到了解决方法 在页面中存在无闪刷新控件的时候提示框 ...

  9. iOS文件类型判断

    最近在做的东西有下载zip,只是服务器发送过来的是二进制,需要根据二进制来判断是什么类型的文件,从而进行保存操作.起初很不理解,到后来发现可以通过二进制的前2位的ascii码来进行判断.如下: // ...

  10. Lamp和Lnmp环境搭建

    一.安装Lamp wget -c http://soft.vpser.net/lnmp/lnmp1.2-full.tar.gz && tar zxf lnmp1.2-full.tar. ...