OpenGL-color

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

1.RGBA 颜色

	R : 红色分量
	G : 绿色分量
	B : 蓝色分量
	A : aphpa 透明度

	glColor* 函数可以用于设置颜色
	void glColor3f(GLfloat red,GLfloat green,GLfloat blue);
	void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha);
void myDisplay(void)
{
	glClear(GL_COLOR_BUFFER_BIT);
	glColor3f(0.0f,1.0f,1.0f);
	glRectf(-0.5,-0.5,0.5,0.5);
	glFlush();
}
glColor 系列函数,在参数类型不同时候,表述最大颜色值也不同
f、g 为后缀, 1.0 表示最大值
b 为后缀 127 为最大值
ub 后缀 255 为最大值
s  后缀 32767 表示最大值
us 后缀 65535 表示最大值

2. 索引颜色

选择颜色
glIndex* 系列函数可以在颜色表中选择颜色 常用glIndexi
void glIndexi(GLint c);

设置颜色表
OpenGL 没有提供设置颜色的办法,颜色设置需要操作系统的支持
这里使用OpenGL工具包 aux, vs 自带的
#include <windows.h>
#include <GL/gl.h>
#include <GL/glaux.h>
#include <math.h>

// 依赖的静态库
#pragma comment (lib, "opengl32.lib")
#pragma comment (lib, "glaux.lib")

const GLdouble Pi = 3.1415926536;

void myDisplay(void)
{
	int i;
	for(i=0; i<8; ++i)
	{
		auxSetOneColor(i, (float)(i&0x04), (float)(i&0x02), (float)(i&0x01));
	}
	glShadeModel(GL_FLAT);
	glClear(GL_COLOR_BUFFER_BIT);
	glBegin(GL_TRIANGLE_FAN);
	glVertex2f(0.0f, 0.0f);
	for(i=0; i<=8; ++i)
	{
		glIndexi(i);
		glVertex2f(cos(i*Pi/4), sin(i*Pi/4));
	}
	glEnd();
	glFlush();
}
int main(int argc,char *argv[])
{
	auxInitDisplayMode(AUX_SINGLE|AUX_INDEX);
	auxInitPosition(0, 0, 400, 400);
	auxInitWindow(L"");
	myDisplay();
	Sleep(10 * 1000);
	return 0;
}

结果如图:
在这里插入图片描述

3. 清除颜色

glClear(GL_COLOR_BUFFER_BIT);意思是把屏幕上的颜色清空

4. 指定颜色模型

glShadeModel 的使用方法:
WINGDIAPI void APIENTRY glShadeModel(GLenum mode);
glShadeModel(GL_SMOOTH); // 平滑方式,这也是默认方式
glShadeModel(GL_FLAT); // 单色方式
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用OpenGL绘制国旗可以通过以下步骤实现: 1. 创建OpenGL上下文和窗口。 2. 设置绘制区域和视口。 3. 设置绘制颜色和深度缓冲区。 4. 绘制国旗的红色背景。 5. 绘制五颗黄色的五角星。可以使用OpenGL的绘制多边形功能来绘制五角星,也可以使用纹理映射来贴上五角星的图案。 6. 交换前后缓冲区,显示绘制结果。 以下是一个简单的OpenGL绘制国旗的示例代码: ``` #include <GL/glut.h> void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glColor3f(1.0, 0.0, 0.0); // 设置绘制颜色为红色 glBegin(GL_QUADS); glVertex2f(-1.0, 1.0); glVertex2f(-1.0, -1.0); glVertex2f(1.0, -1.0); glVertex2f(1.0, 1.0); // 绘制国旗的红色背景 glEnd(); glColor3f(1.0, 1.0, 0.0); // 设置绘制颜色为黄色 glBegin(GL_POLYGON); glVertex2f(-0.5, 0.5); glVertex2f(-0.25, 0.25); glVertex2f(0.0, 0.5); glVertex2f(0.25, 0.25); glVertex2f(0.5, 0.5); glVertex2f(0.375, 0.25); glVertex2f(0.5, 0.0); glVertex2f(0.375, -0.25); glVertex2f(0.5, -0.5); glVertex2f(0.25, -0.375); glVertex2f(0.0, -0.5); glVertex2f(-0.25, -0.375); glVertex2f(-0.5, -0.5); glVertex2f(-0.375, -0.25); glVertex2f(-0.5, 0.0); glVertex2f(-0.375, 0.25); // 绘制五角星 glEnd(); glutSwapBuffers(); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(800, 600); glutInitWindowPosition(100, 100); glutCreateWindow("OpenGL Flag"); glutDisplayFunc(display); glutMainLoop(); return 0; } ``` 该示例代码使用了OpenGL的基本绘图功能,通过绘制红色背景和黄色五角星实现了绘制国旗的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值