VC++实现的OpenGL线性渐变色绘制操作示例

本文实例讲述了VC++实现的OpenGL线性渐变色绘制操作。分享给大家供大家参考,具体如下:

用到的思路就是在应力的最大值和最小值之间划分区间,每个区间的标识点对应不同的颜色值。

然后在区间内的应力值对应的颜色就进行插值来计算。

代码如下:

#include <GL/glut.h>
#include <iostream>
#include <cmath>
using namespace std;
const GLsizei width=640;
const GLsizei height=480;//设置窗口的宽和高
void myInit()
{
  glClearColor(0,0,0,0);
}
void show()
{
  GLsizei dw;
  int n,i;
  dw=2;
  n=(width-1)/dw;
  cout<<"n="<<n<<endl;
  glClear(GL_COLOR_BUFFER_BIT);
  GLsizei r,g,b;
  for (i=0;i<n;i++)
  {
    //绘制应力云图的关键就是下面的这五种不同的颜色对应关系
    //根据自己需要可以设置不同的等级,四种也是可以的
    if (i>=0&&i<=n/5)
    {
      r=255;
      g=i*255/(n/5);
      b=0;
    }
    else if (i>n/5&&i<=2*n/5)
    {
      r=255-(i-n/5)*255/(n/5);
      g=255;
      b=0;
    }
    else if(i>2*n/5&&i<=3*n/5)
    {
      r=0;
      g=255;
      b=(i-2*n/5)*255/(n/5);
    }
    else if(i>3*n/5&&i<=4*n/5)
    {
      r=0;
      g=255-(i-3*n/5)*255/(n/5);
      b=255;
    }
    else
    {
      r=(i-4*n/5)*255/(n/5);
      g=0;
      b=255;
    }
    glColor3f(r/255.0f,g/255.0f,b/255.0f);
    glRectf(1.0*i*dw,0.0,1.0*(i+1)*dw,height);
  }
  glFlush();
}
void reshape(int w,int h)
{
  glViewport(0,0,(GLsizei)w,(GLsizei)h);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  glOrtho(0,w,0,h,-100,100);//设置视野的范围,(左,右,上,下,前,后)
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
}
int main(int argc,char *argv[])
{
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
  glutInitWindowPosition(100,100);
  glutInitWindowSize(width,height);
  glutCreateWindow("应力云图绘制");
  myInit();
  glutDisplayFunc(show);
  glutReshapeFunc(reshape);
  glutMainLoop();
  return 0;
}

效果为:

希望本文所述对大家VC++程序设计有所帮助。

(0)

相关推荐

  • 双缓冲解决VC++绘图时屏幕闪烁

    通常来说程序根据需要调用Invalidate(FALSE)使窗口客户区无效引起重绘,然后在窗口OnPaint函数(基于文档视图的程序则是OnDraw)中进行稳定绘图就行了.但是,我们在OnPaint中进行多重绘制(画背景.棋盘.棋子等),前后绘制的反差造成了闪烁现象.以前知道Java中解决屏幕闪烁问题是用双缓冲的方法,现在发现在vc++中也是可以这么做的.简单来说,双缓冲就是先把需要绘制的东西全部一口气画在内存中,最后把内存中的数据搬到屏幕上显示. 最近做中国象棋,绘制界面时遇到些问题,绘图过程

  • VC++实现View内容保存为图片的方法

    本文实例讲述了VC++实现View内容保存为图片的方法.分享给大家供大家参考,具体如下: 我们在单文档应用程序中,经常需要将View中的内容保存为各种格式的图片文件,以便打印.乍一看,可能不知道从哪里下手,其实主要就是用到Bitmap的save方法,如: HDC hmemDC = ::CreateCompatibleDC( hdc ); HBITMAP hBmp = ::CreateCompatibleBitmap( hdc, destRect.Width(),destRect.Height()

  • VC运用OPENGL加载BMP纹理图的实现方法汇总

    OpenGL是专业的图形程序接口,功能非常强大,调用方便的底层图形库.本文汇总了运用OPENGL加载BMP纹理图的几个实现方法. 方法一: 首先获取位图句柄: HBITMAP hBmp = (HBITMAP) ::LoadImage (AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP, 0, 0,LR_CREATEDIBSECTION); 然后根据位图句柄得到位图信息: BITMAP BM; ::GetObject

  • CISBitmap派生的VC++位图透明类实例

    本文所述为一个由CISBitmap派生的VC++位图透明类,可以方便实现BMP图像的透明处理,主要包含两个文件,使用时主需要将其引入到你的C++工程中即可,具体的类代码如下: CISBitmap.cpp文件代码如下: #include <stdafx.h> #include "CISBitmap.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW

  • VC++基于Dx实现的截图程序示例代码

    本文所述的程序示例为VC++图象特效的截图示例,需要DirectX 3.0以上版,代码中的GetScreen函数是本截图程序的关键.运行这个程序可用Esc键结束.代码中需要ddutil.h与ddutil.cpp文件,请自行下载添加.关于InitDDraw()函数,功能是初始化DirectDraw环境,创建换页链(主页面,一个后台缓冲区),以及创建一个定时器. 具体的功能代码如下: #include <windows.h> #include <windowsx.h> #include

  • Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系

    cocos2d-x的坐标系很重要,想要学好该引擎,深入理解它的坐标体系很重要.注释写的很清楚了,对照上运行结果一块来看代码吧! bool HelloWorld::init() { bool bRet = false; do { CC_BREAK_IF(! CCLayer::init()); //opengl的坐标系和世界坐标系相同,都是以屏幕左下角为原点,向右为x轴的增加方向,向上为y轴的增加方向 //这里的世界指的是游戏世界 //屏幕坐标系是以左上角为原点,是我们熟悉的 //本地坐标系也叫节点

  • VC++中图像处理类CBitmap的用法

    VC++中图像处理类CBitmap的用法 class CBitmap : public CGdiObject { DECLARE_DYNAMIC(CBitmap) public: static CBitmap* PASCAL FromHandle(HBITMAP hBitmap); // Constructors CBitmap(); BOOL LoadBitmap(LPCTSTR lpszResourceName); BOOL LoadBitmap(UINT nIDResource); BOO

  • VC实现图片拖拽及动画的实例

    基础知识 1.PictureBox控件的使用 2.加载位图文件 1.通过文件路径获得位图句柄 复制代码 代码如下: //获得位图句柄  void CMovePictureDlg::GetHandleFromPath(CString path)  {      hBitmap= (HBITMAP)::LoadImage(AfxGetInstanceHandle(),path,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_LOADFROMFILE);//创建位图句柄

  • VC++实现的OpenGL线性渐变色绘制操作示例

    本文实例讲述了VC++实现的OpenGL线性渐变色绘制操作.分享给大家供大家参考,具体如下: 用到的思路就是在应力的最大值和最小值之间划分区间,每个区间的标识点对应不同的颜色值. 然后在区间内的应力值对应的颜色就进行插值来计算. 代码如下: #include <GL/glut.h> #include <iostream> #include <cmath> using namespace std; const GLsizei width=640; const GLsize

  • java GUI编程之paint绘制操作示例

    本文实例讲述了java GUI编程之paint绘制操作.分享给大家供大家参考,具体如下: import java.awt.*; public class Testpint { public static void main(String[] args) { // new TFPaint().lunchPaint(); new TFPaint(); } } class TFPaint extends Frame{ /* public void lunchPaint() { this.setBoun

  • Python图形绘制操作之正弦曲线实现方法分析

    本文实例讲述了Python图形绘制操作之正弦曲线实现方法.分享给大家供大家参考,具体如下: 要画正弦曲线先设定一下x的取值范围,从0到2π.要用到numpy模块. numpy.pi 表示π numpy.arange( 0 , 2π ,0.01)  从0到2π,以0.01步进. 令 x=numpy.arange( 0, 2*numpy.pi, 0.01) y=numpy.sin(x) 画图要用到matplotlib.pyplot模块中plot方法. plot(x,y) pyplot.plot.sh

  • OpenGL中点Bresenham绘制直线算法

    本文实例为大家分享了OpenGL中点Bresenham绘制直线算法,供大家参考,具体内容如下 环境 macos xcode编译器 代码 #include <GLUT/GLUT.h> #include <iostream> #include<iostream> #include<cstdlib> #include<ctime> using namespace std; float wid = 400; //设置窗口的大小,约定窗口必须为正方形 fl

  • Android中贝塞尔曲线的绘制方法示例代码

    贝塞尔曲线,很多人可能不太了解,什么叫做贝塞尔曲线呢?这里先做一下简单介绍:贝塞尔曲线也可以叫做贝济埃曲线或者贝兹曲线,它由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋.一般的矢量图形软件常利用贝塞尔曲线来精确画出曲线. 上面的介绍中,"线段像可伸缩的皮筋"这句话非常关键,但也特别好理解.至于贝塞尔曲线的详细内容大家可以查阅相关资料.        Android提供的贝塞尔曲线绘制接口 在Android开发中,要实现贝塞尔曲线其实还是很简单的,因为Android已经给我们提

  • C/C++实现线性顺序表的示例代码

    目录 线性顺序表简介 C语言实现代码 C++语言实现代码 线性顺序表简介 使用顺序存储结构的线性存储结构的表为线性顺序表,线性存储结构是元素逻辑结构一对一,顺序存储结构是元素物理结构连续,线性顺序表操作没有限制,线性顺序表优点是可以使用下标获取和修改元素,线性顺序表缺点是不可以直接插入和删除元素. C语言实现代码 #include<stdio.h>//包含标准输入输出文件 #include<stdlib.h>//包含标准库文件 typedef struct//定义类型定义结构体 {

  • C/C++实现线性单链表的示例代码

    目录 线性单链表简介 C语言实现代码 C++语言实现代码 线性单链表简介 使用链存储结构的线性存储结构为线性单链表,线性存储结构是元素逻辑结构一对一,链存储结构是元素物理结构不连续,线性单链表操作没有限制,线性单链表优点是可以直接插入和删除元素,线性单链表缺点是不可以使用下标获取和修改元素. C语言实现代码 #include<stdio.h>//包含标准输入输出文件 #include<stdlib.h>//包含标准库文件 typedef struct element//元素 { i

  • Matlab实现四种HSV色轮图绘制的示例代码

    前言 有粉丝问我图(d)上的色盘图咋画: 明度(V)渐变版 注意,此处是为了还原论文中图片所以X加了. % 生成网格 tList=linspace(0,2.*pi,300); rList=linspace(0,1,100); [theta,R]=meshgrid(tList,rList); % 角度及半径转换为坐标 X=cos(theta+pi).*R; Y=sin(theta).*R; Z=zeros(size(X)); % 构造hsv网格并转换为rgb网格 hsvMesh=cat(3,the

  • Python使用draw类绘制图形示例讲解

    目录 视频 Pygame模块之pygame.draw 示例1 示例2 视频 观看视频 Pygame模块之pygame.draw 本文将主要介绍Pygame的draw模块,主要内容翻译自pygame的官方文档 pygame.draw 模块用于在Surface上绘制一些简单的图形,比如点.直线.矩形.圆.弧等. pygame.draw中函数的第一个参数总是一个surface,然后是颜色,再后会是一系列的坐标等.稍有些计算机绘图经验的人就会知道,计算机里的坐标,(0,0)代表左上角.而返回值是一个Re

  • asp批量添加修改删除操作示例代码

    核心代码: <title>asp批量添加修改删除操作示例</title> <% if request.Form("op")="update" then'表单提交 ids=request.Form("ids") if ids<>"" then response.Write "要删除的数据id集合:"&ids&"<br>"

随机推荐