zoukankan      html  css  js  c++  java
  • C#应用视频教程2.2 OPENGL虚拟仿真介绍

    三维在理解了如何绘制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

     

     

  • 相关阅读:
    OpenCASCADE Chamfer 3D Basics
    OpenCASCADE Chamfer 2D
    .NetCore 连接 Oracle 数据库,直接C# 或者 ORM框架(EFCore、XPO)
    心内科疾病指南
    HttpClient 调用 RestAPI 接口的用法
    在 Blazor 应用中使用 DevExtreme widgets
    2021 最近一次检查甘油三脂,验证苯扎贝特的效果。
    紫鹊界本味湘菜,
    如何Rest接口获取网上的股票数据,有哪些资源?-- 推荐Tushare金融数据
    优秀常用的「资源搜索网站」,收藏
  • 原文地址:https://www.cnblogs.com/acetaohai123/p/7586755.html
Copyright © 2011-2022 走看看