• ArcEngine+OpenGL之五 三角形上色(转)


    ArcEngine+OpenGL之五 三角形上色收藏
     三角形上色

    上一课中我教给您三角形的绘制方法。这一课我将教您给三角形添加两种不同类型的着色方法。使用平滑着色(Smooth coloring)将三角形的三个顶点的不同颜色混合在一起,创建漂亮的色彩混合。

    我们只要修改第二课中的OnAfterDraw()函数就可以了。

            private void OnAfterDraw(ISceneViewer pViewer)
    {
    GL.glColor3ub(255, 0, 0);//设置为红色
    }

    1、三角形平滑着色

    如果您还记得上节课的内容,这段代码在屏幕的左半部分绘制三角形。这一行代码是我们第一次使用命令glColor3f( r, g, b )。括号中的三个参数依次是红、绿、蓝三色分量。取值范围可以从0.0到1.0。类似于以前所讲的清除屏幕背景命令。

    接下来的一行代码设置三角形的第一个顶点(三角形的上顶点),并使用当前颜色(红色)来绘制。从现在开始所有的绘制的对象的颜色都是红色,直到我们将红色改变成别的什么颜色。

    设置颜色代码:
                GL.glBegin(GL.GL_TRIANGLES);
                GL.glColor3ub(255, 0, 0);
                GL.glVertex3f((float)glX, (float)glY, (float)glZ);
                GL.glColor3ub(0, 255, 0);
                GL.glVertex3f((float)glX1, (float)glY1, (float)glZ1);
                GL.glColor3ub(0, 0, 255);
                GL.glVertex3f((float)glX2, (float)glY2, (float)glZ2);
                GL.glEnd();

    glEnd()出现后,三角形将被填充。但是因为每个顶点有不同的颜色,因此看起来颜色从每个角喷出,并刚好在三角形的中心汇合,三种颜色相互混合。这就是平滑着色。

      效果如下:

    2、三角形一次性着单色:
    GL.glColor3ub(0, 0,255)

    一次性将颜色设置为蓝色。

    现在我们绘制一个单调着色——蓝色的三角形。最重要的是要记住,设置当前色之后绘制的所有东东都是当前色的。以后您所创建的每个工程都要使用颜色。即便是在完全采用纹理贴图的时候,glColor3f仍旧可以用来调节纹理的色调。等等...,以后再说吧。

    我们必须要做的事只需将颜色一次性的设为我们想采用的颜色(本例采用蓝色),然后绘制场景。每个顶点都是蓝色的,因为我们没有告诉OpenGL要改变顶点的颜色。最后的结果是.....全蓝色的三角形。再说一遍,顺时针绘制的正方形意味着我们所看见的是三角形的背面。   

                GL.glColor3ub(0, 0,255);
    GL.glBegin(GL.GL_TRIANGLES);
                GL.glVertex3f((float)glX, (float)glY, (float)glZ);
                GL.glVertex3f((float)glX1, (float)glY1, (float)glZ1);
                GL.glVertex3f((float)glX2, (float)glY2, (float)glZ2);

                GL.glEnd();
    }
    效果如下:

    在这一课中,我试着尽量详细的解释如何为您的OpenGL多边形添加单调和平滑的着色效果的步骤。改改代码中的红绿蓝分量值,看看最后有什么样的结果。

  • 相关阅读:
    Cannot load php5apache2_4.dll into server
    goroutine,channel
    为什么 Go 标准库中有些函数只有签名,没有函数体?
    PHP编码风格规范
    etcd压测造成数据目录过大恢复
    高可用kubernetes集群查看kube-scheduler和kube-controller-manager哪个是leader节点
    kubeadm join添加节点,新加节点夯在not ready(cni config uninitialized)
    一次.dockerignore设置错误导致的docker build排查
    通过开源插件实现sonarqube区分不同分支显示代码扫描结果
    python脚本,调用接口清理镜像多余tag
  • 原文地址:https://www.cnblogs.com/xianyin05/p/1432363.html
Copyright © 2020-2023  润新知