【水】基于ege的简单3D模拟
我们模拟从被观察物体射出光线,在眼球焦点交汇,然后打到视网膜上成像
——足够了吧,剩下的难度应该是普及-
只是有一些常数可以自己调一下,看着顺眼就好
#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模拟的更多相关文章
- 基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(二)
我们上一篇<基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(一)>主要讲解了如何搭建一个实时数据通讯服务器,客户端与服务端是如何通讯的,相信通过上一篇的讲解,再配 ...
- 基于modelsim-SE的简单仿真流程—下
基于modelsim-SE的简单仿真流程—下 编译 在 WorkSpace 窗口的 counter_tst.v上点击右键,如果选择Compile selected 则编译选中的文件,Compile A ...
- 基于HTML5的燃气3D培训仿真系统
最近上线了的基于HTML5的燃气3D培训仿真系统,以前的老系统是采用基于C++和OpenGL的OpenSceneGraph引擎设计的,OSG引擎性能和渲染效果各方面还是不错的,但因为这次新产品需求要求 ...
- 基于 HTML5 的 WebGL 3D 档案馆可视化管理系统
前言 档案管理系统是通过建立统一的标准以规范整个文件管理,包括规范各业务系统的文件管理的完整的档案资源信息共享服务平台,主要实现档案流水化采集功能.为企事业单位的档案现代化管理,提供完整的解决方案,档 ...
- 基于 HTML5 WebGL 的 3D 风机 Web 组态工业互联网应用
基于 HTML5 WebGL 的 3D 风机 Web 组态工业互联网应用 前言 在目前大数据时代背景之下,数据可视化的需求也变得越来越庞大,在数据可视化的背景之下,通过智能机器间的链接并最终将人机链接 ...
- Netty学习——基于netty实现简单的客户端聊天小程序
Netty学习——基于netty实现简单的客户端聊天小程序 效果图,聊天程序展示 (TCP编程实现) 后端代码: package com.dawa.netty.chatexample; import ...
- 基于modelsim-SE的简单仿真流程—上
基于modelsim-SE的简单仿真流程 编写RTL功能代码 要进行功能仿真,首先得用需要仿真的模块,也就是RTL功能代码,简称待测试的模块,该模块也就是在设计下载到FPGA的电路.一个电路模块想要有 ...
- 基于css3的文字3D翻转特效
一款基于css3的文字3D翻转特效.这款特效当鼠标经过文字的时候3D翻转显示阴影.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class="compo ...
- PhantomJS实现最简单的模拟登录方案
以前写爬虫,遇到需要登录的页面,一般都是通过chrome的检查元素,查看登录需要的参数和加密方法,如果网站的加密非常复杂,例如登录qq的,就会很蛋疼 在后面,有了Pyv8,就可以把加密的js文件扔给它 ...
随机推荐
- 面试题目——《CC150》位操作
面试题5.1:给定两个32位的整数N与M,以及表示比特位置的i与j.编写一个方法,将M插入N,使得M从N的第j位开始,到第i位结束.假定从j位到i位足以容纳M,也即若M=10011,那么j与i之间至少 ...
- Java多线程编程核心技术---学习分享
继承Thread类实现多线程 public class MyThread extends Thread { @Override public void run() { super.run(); Sys ...
- average slice
A non-empty zero-indexed array A consisting of N integers is given. A pair of integers (P, Q), such ...
- Codeforces#262_1002
Codeforces#262_1002 B. Little Dima and Equation time limit per test 1 second memory limit per test 2 ...
- PHP Object 转 Array,Json 转 Array
object 转 array /** * object 转 array */ function object_to_array($obj){ $_arr = is_object($obj)? get_ ...
- 第2月第25天 BlocksKit
1.blockskit https://github.com/zwaldowski/BlocksKit bk_showAlertViewWithTitle 2.toast +(void)showToa ...
- Extjs 制作柱状图
在JSP页面制作柱状图,可以根据数据的变化动态实时的变化 主要是使用EXTJS自带的插件达到效果 Ext.require('Ext.chart.*'); Ext.require([ 'Ext.Wind ...
- linux常用命令-权限管理命令
chmod [{ugoa}{+-=}{rwx}] [文件或目录] [mode=421] [文件或目录] -R 递归修改 例:chmod g+w,o-r 文件或目录 但是一般用数字配置权限,例:chm ...
- python基础六
模块 1.定义: 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件(文件名:test.py,对应的模块名:test) 包:用来从逻辑上 ...
- 【GoLang】golang 最佳实践汇总
最佳实践 1 包管理 1.1 使用包管理对Golang项目进行管理,如:godep/vendor等工具 1.2 main/init函数使用,init函数参考python 1.2.1 main-> ...