OpenGL:游戏建模着色器
普通着色
这里就介绍一个RGBA吧,还是要学Shader的。
RGBA颜色
RGBA模式中,每一个像素会保存以下数据:
R值(红色分量)、G值(绿色分量)、B值(蓝色分量)和A值(alpha分量)。其中红、绿、蓝三种颜色相组合,就可以得到我们所需要的各种颜色,而alpha值不直接影响颜色。
glColor*系列函数可以用于设置颜色。其中三个参数的版本可以指定R、G、B的值,而A值采用默认;四个参数的版本可以分别指定R、G、B、A的值。
例如:
void glColor3f(GLfloat red, GLfloat green, GLfloat blue);
void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
将浮点数作为参数,其中0.0表示不使用该种颜色,而1.0表示将该颜色用的最多。
例如:
glColor3f(1.0f, 0.0f, 0.0f); 表示不使用绿、蓝色,而将红色使用最多,于是得到最纯净的红色。
glColor3f(0.0f, 1.0f, 1.0f); 表示使用绿、蓝色到最多,而不使用红色。混合的效果就是浅蓝色。
glColor3f(0.5f, 0.5f, 0.5f); 表示各种颜色使用一半,效果为灰色。
注意:浮点数可以精确到小数点后若干位,这并不表示计算机就可以显示如此多种颜色。实际上,如果OpenGL找不到精确的颜色,会进行类似“四舍五入”的处理。
注意:glColor系列函数,在参数类型不同时,表示“最大”颜色的值也不同。
采用f和d做后缀的函数,以1.0表示最大的使用。
采用b做后缀的函数,以127表示最大的使用。
采用ub做后缀的函数,以255表示最大的使用。
采用s做后缀的函数,以32767表示最大的使用。
采用us做后缀的函数,以65535表示最大的使用。
图片来源:百度百科
RGB空间
渐变三角形
main.cpp
-
#include <GL/glut.h>
-
//显示函数
-
void myDisplay(void)
-
{
-
glClear(GL_COLOR_BUFFER_BIT);
-
glBegin(GL_TRIANGLES);
-
glColor3f(0.0f, 1.0f, 1.0f);//0 255 255
-
glVertex3f(-0.5f, -0.5f, 0.0f);
-
glColor3f(1.0f, 1.0f, 0.0f);//255 255 0
-
glVertex3f(0.5f, -0.5f, 0.0f);
-
glColor3f(1.0f, 0.0f, 1.0f);// 255 0 255
-
glVertex3f(0.0f, 0.5f, 0.0f);
-
glEnd();
-
glFlush();
-
}
-
//主函数
-
int main(int argc, char *argv[])
-
{
-
glutInit(&argc, argv);
-
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
-
glutInitWindowPosition(100, 100);
-
glutInitWindowSize(800, 600);
-
glutCreateWindow("渐变三角形");
-
glutDisplayFunc(&myDisplay);
-
glutMainLoop();
-
return 0;
-
}
结果截图
渐变三角形截图
单色矩形
main.cpp
-
#include <GL/glut.h>
-
//显示矩形函数
-
void myDisplay(void)
-
{
-
glClear(GL_COLOR_BUFFER_BIT);//清除屏幕
-
glColor3f(1.0f,0.0f,1.0f); //255 0 255
-
glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
-
glFlush();//强制刷新缓冲
-
}
-
//主函数
-
int main(int argc, char *argv[])
-
{
-
glutInit(&argc, argv);//初始化
-
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);//设置显示模式
-
glutInitWindowPosition(100, 100);//设置位置和窗口大小
-
glutInitWindowSize(400, 400);
-
glutCreateWindow("有颜色的矩形");
-
glutDisplayFunc(&myDisplay);//传递函数
-
glutMainLoop();
-
return 0;
-
}
结果截图
单色矩形截图
着色器类
为什么使用着色器类?你不感觉之前的代码很乱吗?用字符串去定义真
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!