三维在理解了如何绘制2D元素之后,我们尝试绘制3D元素。

其实多个三角形也能够成四面体,多个长方形也能够成六面体,所以绘制3D元素的时候,只要顶点数量匹配就行了

 

这里我们尤其注意,我把绘制之前的三个平移和三个旋转单独拿出来做成变量,如果你的TranslateZ默认值是0的话,你默认看到的是黄色面,如果把TranslateZ设置为负值,则看到了红色,且越来越小,如果把TranslateZ设置为正数,则啥也看不到了。这里读者还需要有一个额外的空间想象能力,就是你的观察视角在哪里。默认的时候你的观察视角就在画笔的位置,所以你就相当于眼球贴着画布,你只能看到一面色彩,如果空间的画笔(注意不是平面的画笔)TranslateZ有数值了,则相当于画笔抬起离开了画布,或者往里戳穿了画布在画东西(每一个渲染周期都是把之前画的都扔掉,重新画笔平移+旋转+绘制),所以此时我们应该想象成你拿着一只画笔在空间画3D图(先这么理解,后面这个观察视角的问题我会另外介绍)

 

我们前面一直在用颜色绘制图像,除了颜色也可以用贴图的方法。注意要使用SharpGL自带的类型。此外要开启允许纹理图片(所谓的gl.Enable(XXX) 和gl.Disable(XXX)就是打开和关闭的阀门,OPENGL是一个状态机,他在运行的时候每个周期就是清空画布,重新画图,在画图的时候你随时可以打开和关闭一些阀门,比如纹理,材质,光照,漫反射等等效果,这个我们后面会逐渐深入讲解)

 

不启用纹理之后,看到的图像就没有3D效果了(比贴了颜色还难看)

 

在绘制的时候我们把前面的一个gl.Begin-gl.End分成了六个,每个单独绘制(如果你在某些代码中发现别人写gl.Begin(7),不要觉得很奇怪,因为gl.Begin(OpengGL.GL_QUADS)这个立方体就是uint类型,就是7,前面OPENGL很多开启和关闭的功能也是一个uint类型)gl.Normal是指定面的法向,指定面的方向可以让光照效果更加逼真,尤其是在导入大型3D物体的时候,实际上再复杂的3D物体也是多个三角形面片组成的(TRIANGLE),如果你不为每个三角面片指定法向,则整个3D物体看起来会像平面的一样

 

讲到光照,就可以把有没有光照的对比放在一起讲。开启光照之后,读者可以自己体会把立方体从左边运动到右边的效果变化(目前可以认为光照是一个小台灯,而且位置是死的,所以距离太远就越来越暗,甚至直接看不到,如果关闭光照效果,则不会由于位置的变化而有阴影)

 

光照其实也是可以设置的非常复杂的,我们不是做大型游戏,所以一般涉及不到(个人认为也没有必要在这些事情上浪费太多时间),我们这里设置的光源位置,环境光,漫射光之类的参数直接照抄就行了(后面介绍颜色纹理的时候用得上,因为大部分时候还是用颜色在着色,单纯颜色和颜色纹理效果还是区别挺大的,颜色纹理如同纯黑的柱子在光照下显得明暗很逼真,而单纯的颜色画笔就黑的没什么特点,绘制一个球马上就能看出来)

 

 

更多教学视频和资料下载,欢迎关注以下信息:

我的优酷空间:

http://i.youku.com/acetaohai123

 

我的在线论坛:

http://csrobot.gz01.bdysite.com/

 

问题交流:

QQ:910358960

邮箱:acetaohai123@163.com

 

 

C#应用视频教程2.2 OPENGL虚拟仿真介绍的更多相关文章

  1. C#应用视频教程2.1 OPENGL虚拟仿真介绍

    OPENGL的虚拟仿真对于工控自动化的意义很大,虽然市面上有很多的第三方软件比如Solidworks,Mathlab,ProE等等软件可以做仿真,而且能够实现的功能包括了流体分析,力学分析,摩擦力分析 ...

  2. C#应用视频教程2.4 OPENGL虚拟仿真介绍

    这一部分我们首先实现视图控制(包括了平移/旋转/缩放),前面我们已经讲过,通过lookat一个函数,或者通过translate+rotate两个函数,都能实现视图的控制(两个函数的方式比较简单,但是通 ...

  3. C#应用视频教程2.3 OPENGL虚拟仿真介绍

    本节最重要的一个内容,就是让视野可以平移+旋转+缩放(就像打CS游戏一样以第一人称视角去观察物体,如果可能的话W,S,A,D四个按键控制人物移动,还有鼠标控制视角),本节最重要的一个概念就是设置观察视 ...

  4. 基于unity3d IFC的虚拟仿真系统

  5. 国家虚拟仿真实验教学项目共享平台(实验空间)PHP SDK

    使用XJWT标准,此标准基于JSON Web Token (JWT)开发.XJWT包含三个参数:header, payload, signature,因此生成token就要先获得这三个参数. clas ...

  6. 2017.04.20 Adams仿真介绍

    Adams 仿真 | 验证"隐性机器人模型"概念,提高视觉伺服精度 产品:Adams行业:科研优势: 1.Adams 仿真可精确预测机器人的位置和方位 2.仿真在理论工作验证中起着 ...

  7. 【转】OpenGL相关函数库介绍

    原文:http://blog.chinaunix.net/uid-20638550-id-1909182.html OpenGL 函数库相关的API有核心库(gl).实用库(glu).辅助库(aux) ...

  8. OpenGL教程(0)——介绍

    OpenGL介绍 OpenGL,全称Open Graphics Library,是一个用C语言写的图形API.通俗地说,OpenGL用来绘制2D/3D图形.目前OpenGL的运用十分广泛,有许多用Op ...

  9. 解析vue2.0的diff算法 虚拟DOM介绍

    react虚拟dom:依据diff算法台 前端:更新状态.更新视图:所以前端页面的性能问题主要是由Dom操作引起的,解放Dom操作复杂性 刻不容缓 因为:Dom渲染慢,而JS解析编译相对非常非常非常快 ...

随机推荐

  1. 【JAVAWEB学习笔记】22_ajax:异步校验用户名和站内查询

    Js原生Ajax和Jquery的Ajax 学习目标 案例1-异步校验用户名是否存在 案例2-站内查询 一.Ajax概述 1.什么是同步,什么是异步 同步现象:客户端发送请求到服务器端,当服务器返回响应 ...

  2. java8新特性——时间日期API

    传统的时间 API 存在线程安全的问题,在多线程开发中必须要上锁,所以 java8 现在为我们提供了一套全新的时间日期 API ,今天进来学习一下java8 的时间日期 API. 一.使用 Local ...

  3. CF1051D Bicolorings dp

    水题一道 $f[i][j][S]$表示$2 * i$的矩形,有$j$个联通块,某尾状态为$S$ 然后转移就行了... #include <vector> #include <cstd ...

  4. [BZOJ4892][TJOI2017]DNA(后缀数组)

    题目描述 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S,有这个序列的碱基序列就会表现出喜欢吃藕的性状,但是研究人员发现对碱基序列S,任意修改其中不超过3个碱基,依然能够表现出吃藕的性状 ...

  5. [BZOJ4887][TJOI2017]可乐(DP+矩阵快速幂)

    题目描述 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且放在了加里敦星球的1号城市上.这个可乐机器人有三种行为: 停在原地,去下一个相邻的城市,自爆.它每一秒都会随机 ...

  6. HDU1251 统计难题 trie树 简单

    http://acm.hdu.edu.cn/showproblem.php?pid=1251 题意: 找前缀数量 裸模板 #include<cstdio> #include<cstr ...

  7. Centos 右上角面板里没有wired network图标的问题

    开了很多的网页查看解决这个问题,都不是很有效,最后很简单的改了下一个文件就ok了,自己记录下,以免忘记! 打入命令:sudo gedit /etc/NetworkManager/nm-system-s ...

  8. Problem A: 深入浅出学算法002-n个1

    Description 由n个1组成的整数能被K(K<10000)整除,n至少为多少? Input 多组测试数据,第一行输入整数T,表示组数 然后是T行,每行输入1个整数代表K Output 对 ...

  9. 【BZOJ】1996: [Hnoi2010]chorus 合唱队【区间dp】

    1996: [Hnoi2010]chorus 合唱队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 2088  Solved: 1371[Submit][ ...

  10. HTML5 book响应式翻页效果

    翻页,HTML5源码下载,HTML5响应式翻页效果,鼠标移到右上角会看到翻页效果,需要鼠标拖动后翻页,支持ie9+,html5浏览器. 单页和双页. 自动播放和暂停. 点击左右翻页. 鼠标点击左右页面 ...