OpenGL:游戏建模着色器

2023-12-30 18:24:27

普通着色

这里就介绍一个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表示最大的使用。

图片来源:百度百科

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xhZHlfa2lsbGVyOQ==,size_16,color_FFFFFF,t_70

RGB空间

渐变三角形

main.cpp

 
  1. #include <GL/glut.h>

  2. //显示函数

  3. void myDisplay(void)

  4.  
  5. {

  6. glClear(GL_COLOR_BUFFER_BIT);

  7. glBegin(GL_TRIANGLES);

  8. glColor3f(0.0f, 1.0f, 1.0f);//0 255 255

  9. glVertex3f(-0.5f, -0.5f, 0.0f);

  10. glColor3f(1.0f, 1.0f, 0.0f);//255 255 0

  11. glVertex3f(0.5f, -0.5f, 0.0f);

  12. glColor3f(1.0f, 0.0f, 1.0f);// 255 0 255

  13. glVertex3f(0.0f, 0.5f, 0.0f);

  14. glEnd();

  15. glFlush();

  16. }

  17. //主函数

  18. int main(int argc, char *argv[])

  19.  
  20. {

  21. glutInit(&argc, argv);

  22. glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);

  23. glutInitWindowPosition(100, 100);

  24. glutInitWindowSize(800, 600);

  25. glutCreateWindow("渐变三角形");

  26. glutDisplayFunc(&myDisplay);

  27. glutMainLoop();

  28. return 0;

  29. }

结果截图

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xhZHlfa2lsbGVyOQ==,size_16,color_FFFFFF,t_70

渐变三角形截图

单色矩形

main.cpp

 
  1. #include <GL/glut.h>

  2. //显示矩形函数

  3. void myDisplay(void)

  4. {

  5. glClear(GL_COLOR_BUFFER_BIT);//清除屏幕

  6. glColor3f(1.0f,0.0f,1.0f); //255 0 255

  7. glRectf(-0.5f, -0.5f, 0.5f, 0.5f);

  8. glFlush();//强制刷新缓冲

  9. }

  10. //主函数

  11. int main(int argc, char *argv[])

  12. {

  13. glutInit(&argc, argv);//初始化

  14. glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);//设置显示模式

  15. glutInitWindowPosition(100, 100);//设置位置和窗口大小

  16. glutInitWindowSize(400, 400);

  17. glutCreateWindow("有颜色的矩形");

  18. glutDisplayFunc(&myDisplay);//传递函数

  19. glutMainLoop();

  20. return 0;

  21. }

结果截图

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xhZHlfa2lsbGVyOQ==,size_16,color_FFFFFF,t_70

单色矩形截图

 

着色器类

为什么使用着色器类?你不感觉之前的代码很乱吗?用字符串去定义真

文章来源:https://blog.csdn.net/2301_81967414/article/details/135293642
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。