OpenGL线性渐变色绘制

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

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


代码如下:

#include 
#include 
#include 
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="<=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;
}


效果为:

OpenGL线性渐变色绘制_第1张图片

你可能感兴趣的:(C/C++,OpenGL)