zoukankan      html  css  js  c++  java
  • 计算机图形学笔记

    计算机程序设计

    C:Program Files (x86)Windows Kits8.0Includeumgl

    矩形显示,左下右上

    #include<GL/glut.h>

    void init(void)

    {

    glClearColor(1.0,1.0,1.0,0.0);

    glMatrixMode(GL_PROJECTION);

    gluOrtho2D(0.0,200.0,0.0,150.0);

    }

    void lineSegment(void)

    {

    glClear(GL_COLOR_BUFFER_BIT);

    glColor3f(1.0,0.0,0.0);

    glBegin(GL_LINES);

    glVertex2i(180,15);

    glVertex2i(10,145);

    glEnd();

    glFlush();

    }

    void main(int agrc,char**argv)

    {

    glutInit(&agrc,argv);

    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

    glutInitWindowPosition(50,100);

    glutInitWindowSize(400,300);

    glutCreateWindow("Draw a Line");

    init();

    glutDisplayFunc(lineSegment);

    glutMainLoop();

    }

    绘制任意一条给定方程的曲线

    绘制棋盘

    03SAT(补)不行还有书呢,怕什么

    区域填充

    1.X与Y看谁长的快,就设谁是1,另一个就会被限制,bresenam算法,一个方向上增减1,另一个方向增减0/1

    2.八分画圆法

    算法中d=5/4-r控制误差的原理

    其实没有边界,有边界/无边界

    1)漫水法

    已知:图形函数(边界)(一定是围起来的闭合曲线吗?)、颜色

    选取种子点→计算种子邻域(加减单位一得四个点)→判断邻域点是否在边界范围内(因为已知边界,易判断点在内/外然后判断是不是已经被填了/其他颜色,因为取了区域内的点,所以邻域点最多在边界上,嗯,判断这三个条件决定是否填充,这些要求、条件可以转换为一条→邻域点颜色是否为边界颜色,若所附颜色和边界颜色一样,但无妨,结果只有一个,就是不赋色这个点,因为已经填过/在边界上,反过来说,只有颜色为空的,才填色,但,边界的颜色一定有吗?

    04THU

    反走样技术

    100w万像素→1000万像素

    05thu

    103/134

    为什么结果是这的。。。。。

    把图形换成自己的,自己应用旋转、平移得到一个图型形

    /

    wps39

    #include<gl/glut.h>

    void init(void)

    {

    glClearColor(1.0, 1.0, 1.0, 0.0);

    glMatrixMode(GL_PROJECTION);

    gluOrtho2D(-5.0, 5.0, -5.0, 5.0);//设置显示范围

    glMatrixMode(GL_MODELVIEW);

    }

    void drawdiamond(void)

    {

    glBegin(GL_POLYGON); //顶点指定需要按逆时针方向

    glVertex2f(0.0f, -1.0f);//下

    glVertex2f(2.0f, 0.0f);//右

    glVertex2f(0.0f, 1.0f);//上

    glVertex2f(-2.0f, 0.0f);//左

    glEnd();

    }

    void myDraw(void)

    {

    glClear(GL_COLOR_BUFFER_BIT);

    glLoadIdentity();

    glPushMatrix();

    glRotatef(120.0, 2.0, 0.0, 1.0);

    glColor3f(0.0, 1.0, 0.0);

    drawdiamond();

    glPopMatrix();

    glPushMatrix();

    glRotatef(240.0, 2.0, 0.0, 1.0);

    glColor3f(0.0, 1.0, 0.0);

    drawdiamond();

    glPopMatrix();

    glPushMatrix();

    glRotatef(120.0, 2.0, 0.0, 1.0);

    glColor3f(0.0, 1.0, 0.0);

    drawdiamond();

    glPopMatrix();

    glFlush();

    }

    void main(int argc, char** argv)

    {

    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

    glutInitWindowPosition(0, 0);

    glutInitWindowSize(600, 600);

    glutCreateWindow("竹叶×");

    init();

    glutDisplayFunc(myDraw);

    glutMainLoop();

    }

    三维实体的构造,

    1.满足欧拉公式

    2.孔、洞、不相连的多面体,

    C++:

    using namespace std

    所谓命名空间,是一种将程序库名称封装起来的方法,它就像在各个程序库中立起一道道围墙。

    opengl里面的深度缓存

    glcleardepth()

    在现实生活中,一个实心物体挡在另外一个实心物体的前面, 后面的那个物体有部分会被遮盖掉

    那么opengl里面如何模拟这个情况呢? 每个物体的每个像素都有一个深度缓存的值(在0到1之间,可以想象成是z轴的距离)

    如果glDepthFunc启用了GL_LESS(现实生活中的前景), 那么当前个物体挡住后个物体时, 由于前个物体深度值小(越靠近人的), 所以它就被画了出来, 后面的物体被挡住的像素就被忽略掉了。(当然你如果启用了GL_GREATER, 那么情况就反过来了)

    这个时候再来说glClearDepth, 它给深度缓冲指定了一个初始值,缓冲中的每个像素的深度值都是这个, 比如1,这个时候你往里面画一个物体, 由于物体的每个像素的深度值都小于等于1, 所以整个物体都被显示了出来。 如果初始值指定为0, 物体的每个像素的深度值都大于等于0, 所以整个物体都不可见。 如果初始值指定为0.5, 那么物体就只有深度小于0.5的那部分才是可见的

    func值

    含义

    GL_NEVER

    不通过(输入的深度值不取代参考值)

    GL_LESS

    如果输入的深度值小于参考值,则通过

    GL_EQUAL

    如果输入的深度值等于参考值,则通过

    GL_LEQUAL

    如果输入的深度值小于或等于参考值,则通过

    GL_GREATER

    如果输入的深度值大于参考值,则通过

    GL_NOTE_QUAL

    如果输入的深度值不等于参考值,则通过

    GL_GEQUAL

    如果输入的深度值大于或等于参考值,则通过

    GL_ALWAYS

    总是通过(输入的深度值取代参考值)

    最后一行的GL_COLOR_MATERIAL使我们可以用颜色来贴物体。如果没有这行代码,纹理将始终保持原来的颜色,glColor3f(r,g,b)就没有用了。总之这行代码是很有用的。

    激活GL_COLOR_MATERIAL可以让你在激活光照的情况下用glColor函数给物体上色。这个方法又称为颜色追踪。

    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

    真正精细的透视修正。这一行告诉OpenGL我们希望进行最好的透视修正。这会十分轻微的影响性能。但使得透视图看起来好一点。

    关于glcolor*/glclearlolor()/的问题

      OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式。

    RGBA模式与索引模式的区别:

    计算机必须为每个像素保存一些数据,在RGBA模式中数据就代表了颜色;而颜色索引模式中数据代表了一个索引,要获取真正的颜色值还需要查索引表。数据的数量是由帧缓存中的位面决定的。一个位面为一个像素的一个位的数据。假如是8位面的颜色,每个像素就有8个颜色位,因此就有2的8次方位,也就是256种不同的颜色值,或者说每个像素可以有256种颜色。位面通常分为RGB三个组成部分。

        1)RGBA:

        RGBA模式中,每一个像素会保存以下数据:R值(红色分量)、G值(绿色分量)、B值(蓝色分量)和A值(alpha分量)。其中红、绿、蓝三种颜色相组合,就可以得到我们所需要的各种颜色。而alpha不直接影响颜色,alpha通道一般用作不透明度参数。如果一个像素的alpha通道数值为0%,那它就是完全透明的,而数值为100%则意味着一个完全不透明的像素。在0%和100%之间的值则使得像素可以透过背景显示出来,就像透过玻璃(半透明性),这种效果是简单的二元透明性(透明或不透明)做不到的,它使数码合成变得容易。alpha通道值可以用百分比、整数或者像RGB参数那样用0到1的实数表示。

        PNG是一种使用RGBA的图像格式。

        glColor*系列函数可以用于设置颜色:(常用颜色参考表:http://blog.sina.com.cn/s/blog_4e20daf60102dydy.html)

    常用RGB颜色表                                   

     

    R

    G

    B

     

    R

    G

    B

     

    R

    G

    B

    黑色

    0

    0

    0

    #000000

    黄色

    255

    255

    0

    #FFFF00

    浅灰蓝色

    176

    224

    230

    #B0E0E6

    象牙黑

    41

    36

    33

    #292421

    香蕉色

    227

    207

    87

    #E3CF57

    品蓝

    65

    105

    225

    #4169E1

    灰色

    192

    192

    192

    #C0C0C0

    镉黄

    255

    153

    18

    #FF9912

    石板蓝

    106

    90

    205

    #6A5ACD

    冷灰

    128

    138

    135

    #808A87

    dougello

    235

    142

    85

    #EB8E55

    天蓝

    135

    206

    235

    #87CEEB

    石板灰

    112

    128

    105

    #708069

    forum gold

    255

    227

    132

    #FFE384

             

    暖灰色

    128

    128

    105

    #808069

    金黄色

    255

    215

    0

    #FFD700

    青色

    0

    255

    255

    #00FFFF

             

    黄花色

    218

    165

    105

    #DAA569

    绿土

    56

    94

    15

    #385E0F

    白色

    255

    255

    255

    #FFFFFF

    瓜色

    227

    168

    105

    #E3A869

    靛青

    8

    46

    84

    #082E54

    古董白

    250

    235

    215

    #FAEBD7

    橙色

    255

    97

    0

    #FF6100

    碧绿色

    127

    255

    212

    #7FFFD4

    天蓝色

    240

    255

    255

    #F0FFFF

    镉橙

    255

    97

    3

    #FF6103

    青绿色

    64

    224

    208

    #40E0D0

    白烟

    245

    245

    245

    #F5F5F5

    胡萝卜色

    237

    145

    33

    #ED9121

    绿色

    0

    255

    0

    #00FF00

    白杏仁

    255

    235

    205

    #FFFFCD

    桔黄

    255

    128

    0

    #FF8000

    黄绿色

    127

    255

    0

    #7FFF00

    cornsilk

    255

    248

    220

    #FFF8DC

    淡黄色

    245

    222

    179

    #F5DEB3

    钴绿色

    61

    145

    64

    #3D9140

    蛋壳色

    252

    230

    201

    #FCE6C9

             

    翠绿色

    0

    201

    87

    #00C957

    花白

    255

    250

    240

    #FFFAF0

    棕色

    128

    42

    42

    #802A2A

    森林绿

    34

    139

    34

    #228B22

    gainsboro

    220

    220

    220

    #DCDCDC

    米色

    163

    148

    128

    #A39480

    草地绿

    124

    252

    0

    #7CFC00

    ghostWhite

    248

    248

    255

    #F8F8FF

    锻浓黄土色

    138

    54

    15

    #8A360F

    酸橙绿

    50

    205

    50

    #32CD32

    蜜露橙

    240

    255

    240

    #F0FFF0

    锻棕土色

    135

    51

    36

    #873324

    薄荷色

    189

    252

    201

    #BDFCC9

    象牙白

    250

    255

    240

    #FAFFF0

    巧克力色

    210

    105

    30

    #D2691E

    草绿色

    107

    142

    35

    #6B8E23

    亚麻色

    250

    240

    230

    #FAF0E6

    肉色

    255

    125

    64

    #FF7D40

    暗绿色

    48

    128

    20

    #308014

    navajoWhite

    255

    222

    173

    #FFDEAD

    黄褐色

    240

    230

    140

    #F0E68C

    海绿色

    46

    139

    87

    #2E8B57

    old lace

    253

    245

    230

    #FDF5E6

    玫瑰红

    188

    143

    143

    #BC8F8F

    嫩绿色

    0

    255

    127

    #00FF7F

    海贝壳色

    255

    245

    238

    #FFF5EE

    肖贡土色

    199

    97

    20

    #C76114

             

    雪白

    255

    250

    250

    #FFFAFA

    标土棕

    115

    74

    18

    #734A12

    紫色

    160

    32

    240

    #A020F0

             

    乌贼墨棕

    94

    38

    18

    #5E2612

    紫罗蓝色

    138

    43

    226

    #8A2BE2

    红色

    255

    0

    0

    #FF0000

    赫色

    160

    82

    45

    #A0522D

    jasoa

    160

    102

    211

    #A066D3

    砖红

    156

    102

    31

    #9C661F

    马棕色

    139

    69

    19

    #8B4513

    湖紫色

    153

    51

    250

    #9933FA

    镉红

    227

    23

    13

    #E3170D

    沙棕色

    244

    164

    96

    #F4A460

    淡紫色

    218

    112

    214

    #DA70D6

    珊瑚色

    255

    127

    80

    #FF7F50

    棕褐色

    210

    180

    140

    #D2B48C

    梅红色

    221

    160

    221

    #DDA0DD

    耐火砖红

    178

    34

    34

    #B22222

                     

    印度红

    176

    23

    31

    #B0171F

    蓝色

    0

    0

    255

    #0000FF

           

    栗色

    176

    48

    96

    #B03060

    钴色

    61

    89

    171

    #3D59AB

           

    粉红

    255

    192

    203

    #FFC0CB

    dodger blue

    30

    144

    255

    #1E90FF

           

    草莓色

    135

    38

    87

    #872657

    jackie blue

    11

    23

    70

    #0B1746

           

    橙红色

    250

    128

    114

    #FA8072

    锰蓝

    3

    168

    158

    #03A89E

           

    蕃茄红

    255

    99

    71

    #FF6347

    深蓝色

    25

    25

    112

    #191970

           

    桔红

    255

    69

    0

    #FF4500

    孔雀蓝

    51

    161

    201

    #33A1C9

           

    深红色

    255

    0

    255

    #FF00FF

    土耳其玉色

    0

    199

    140

    #00C78C

             

    三原色光模式(RGB color model),又译 RGB颜色模型红绿蓝颜色模型

    是一种加色模型,是用三种原色──红色、绿色和蓝色的色光以不同的比例相加,以产生多种多样的色光。

    RGB模型的命名来自于三种相加原色的首字母《Red(红),Green(绿),Blue(蓝)》。

    RGB颜色模型的主要目的是在电子系统中检测,表示和显示图像,比如电视和电脑,但是在传统摄影中也有应用。在电子时代之前,基于人类对颜色的感知,RGB颜色模型已经有了坚实的理论支撑。

    RGB是一种依赖于设备的颜色空间:不同设备对特定RGB值的检测和重现都不一样,因为颜色物质(荧光剂或者染料)和它们对红、绿和蓝的单独响应水平随着制造商的不同而不同,甚至是同样的设备不同的时间也不同。

    wps40

    glClearColor(1.0f, 1.0f, 1.0f, 0.0f);设置当前帧的背景颜色

    glClear(GL_COLOR_BUFFER_BIT);清除当前帧的颜色,也就是变成黑色背景,你先设置了当前帧的数据,然后马上就清除了,当然就没有了。所以你要把这两行代码调换顺序。

    二:

    void ReshapeFunc(int width, int height)//width和height是当前窗口的大小,

    {

    glViewport(0, 0, width, height);//设置图像显示窗口和当前系统窗口一样大小,使用参数width, height

    glViewport(0, 0, 800, 600);//图像不随窗口的变化而变化。你用这个就行,但是如果系统窗口太小的话,图像会无法全部显示。

    glColor3b,glColor4b glColor3s glColor4s,glColor3i,glColor4i需要3个或4个无符号字节,或长或短的整数作为参数。当v附加到该名称,颜色命令可以采取这种数值的数组的指针。

    gluPerspective(45.0f, (GLfloat)width / (GLfloat)height, 0.1f, 100.0f);

    OpenGl的glMatrixMode()函数理解

    2013年01月02日 22:16:32 jiangdf 阅读数:37054更多

    个人分类: OpenGL

    glMatrixMode()函数的参数,这个函数其实就是对接下来要做什么进行一下声明,也就是在要做下一步之前告诉计算机我要对“什么”进行操作了,这个“什么”在glMatrixMode的“()”里的选项(参数)有3种模式: GL_PROJECTION 投影, GL_MODELVIEW 模型视图, GL_TEXTURE 纹理.

    如果参数是GL_PROJECTION,这个是投影的意思,就是要对投影相关进行操作,也就是把物体投影到一个平面上,就像我们照相一样,把3维物体投到2维的平面上。这样,接下来的语句可以是跟透视相关的函数,比如glFrustum()或gluPerspective();

    在操作投影矩阵以前,需要调用函数:

    glMatrixMode(GL_PROJECTION); //将当前矩阵指定为投影矩阵

    然后把矩阵设为单位矩阵:

    glLoadIdentity();

    然后调用glFrustum()或gluPerspective(),它们生成的矩阵会与当前的矩阵相乘,生成透视的效果;

    如果参数是GL_MODELVIEW,这个是对模型视景的操作,接下来的语句描绘一个以模型为基础的适应,这样来设置参数,接下来用到的就是像gluLookAt()这样的函数;

    若是GL_TEXTURE,就是对纹理相关进行操作

    顺便说下,OpenGL里面的操作,很多是基于对矩阵的操作的,比如位移,旋转,缩放,所以,这里其实说的规范一点就是glMatrixMode是用来指定哪一个矩阵是当前矩阵,而它的参数代表要操作的目标,GL_PROJECTION是对投影矩阵操作,GL_MODELVIEW是对模型视景矩阵操作,GL_TEXTURE是对纹理矩阵进行随后的操作。

    切换当前矩阵.

    如.要使用透视(3D).那么先要设置透视投影

    glMatrixMode(GL_PROJECTION); //切换到投影矩阵.

    //...设置透视投影

    设置完成后开始画图,需要切换到 模型视图矩阵 才能正确画图.

    glMatrixMode(GL_MODELVIEW);

    // 画一个物体A (看起来是3D的),

    // 如这时候需画一个 2D效果 的 物体A,那么又需要透视投影

    glMatrixMode(GL_PROJECTION); //切换到投影矩阵..

    // ..设置正交投影

    //..设置完成,切换回模型视图矩阵.....

    glMatrixMode(GL_MODELVIEW);

    // 再画一个物体A (看起来是2D的)

    // 如从头到尾都是画3D/2D, 只需初始化时设置一次.

    // 如果有交替,那么就需要glMatrixMode() 切换

    // 因这样设置很烦人,所以又有glPushMatrix() 保存当前矩阵

    缓冲区颜色刷新:https://blog.csdn.net/nimeghbia/article/details/79851113

  • 相关阅读:
    第五周学习总结
    第四周学习总结
    第三周学习总结
    第二周学习总结
    读《程序是怎样跑起来的》第十二章有感
    读《程序是怎样跑起来的》第十一章有感
    读《程序是怎样跑起来的》第十章有感
    读《程序是怎样跑起来的》第九章有感
    《程序是怎样跑起来的》第九章
    《程序是怎样跑起来的》第八章
  • 原文地址:https://www.cnblogs.com/heikejingxiao/p/11269418.html
Copyright © 2011-2022 走看看