opengl模拟太阳效果

举报
风吹稻花香 发表于 2021/06/05 00:47:07 2021/06/05
【摘要】 参考: http://www.cnblogs.com/tkgamegroup/p/4198811.html 我决定开个新坑了。以后每周五更新。 这是GLSL的学习周记! GLSL就是OPENGL SHADER LANGUAGE的简称,就是着色器语言。 着色器是一种交给显卡运行的小程序,这种小程序可以用GLSL来写,写好后交给OPENGL编译,就可以在显卡上...
参考: http://www.cnblogs.com/tkgamegroup/p/4198811.html
我决定开个新坑了。以后每周五更新。
这是GLSL的学习周记!
GLSL就是OPENGL SHADER LANGUAGE的简称,就是着色器语言。
着色器是一种交给显卡运行的小程序,这种小程序可以用GLSL来写,写好后交给OPENGL编译,就可以在显卡上运行了。
 那么问题来了!为什么要给显卡运行呢?
显卡是一种特殊的处理器,有核心,有寄存器,还有内存,不过对比CPU,最大的特点就是显卡的核心更多。多多少呢?一般CPU有4-8个核心,而显卡则是100个左右的核心!不过由于造价还有空间的限制,显卡的某些功能会被削弱,例如逻辑判断功能(if) 。但是它的浮点运算能力却非常强大哦!
为什么显卡要制作这么多核心呢?因为,在图像处理方面,是非常适合用并行计算的。所谓并行计算,就是两个并行计算之间不需要彼此的数据。而图像正是非常符合这个特点!想象一下,假如要在屏幕上显示一幅图画,那么可以交给这些核心这么一个工作:每个核心处理图画的每一行,把图画的每一行的像素画到屏幕上面。这种工作并行计算再适合不过了!因为这里面不包括任何的逻辑处理部分。 
好了,是不是也想让显卡帮我们并行计算呢?

**使用着色器功能会暂时关闭大量的OPENGL原有功能,包括光照等。你也可以在一次渲染中使用着色器和原有功能,在需要着色器的时候使用着色器,不需要的时候关闭就可以了

要使用GLSL先要这样:
#include <glew.h> 
// 链接glew.lib (用工程属性或者预编译命令)
// 创建OPENGL窗口 (用你最熟悉的创建方法)
glewInit();
GLuint program = glCreateProgram(); // 创建着色器程序
GLuint vertex_shader = glCreateShader(GL_VERTEX_SHADER);







glAttachShader(program, vertex_shader);



















#version 440 // 关于version:这个是GLSL的version。我使用的是4.4版本,如果你的电脑不支持,请使用更低的版本,不过低版本有的语句需要修改,也有可能是你的高性能显卡没有打开,请到你的控制面板为你的程序选择高性能显卡,或者更改全局设置
 
in vec4 vertex_position; // in表示由上层传递过来的数据,传递给顶点着色器的数据有坐标等,这里用到一个,就是坐标
 
void main()
{
gl_Position = vertex_position; // 把接受到的坐标传递给片段着色器






#version 440
 
void main()
{
float r = 1.0f;
float g = 1.0f;
float b = 0.5f;
        // 黄色 
vec2 p;
p.x = gl_FragCoord.x - 500;
p.y = gl_FragCoord.y - 500;
        // glFragCoord表示这个点的坐标
        // 在(500,500) 的地方生成光照。注意:因为OPENGL的计算方式,屏幕底部的Y坐标为0
float length = p.x * p.x + p.y * p.y; // 距离的平方
float rate = 3000.0f / length; // 比值
gl_FragColor = vec4(rate * r, rate * g, rate * b, 1.0f); // glFragColor表示这个点的最终颜色






glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glBegin(GL_QUADS);
glVertex2f(-1, -1);
glVertex2f(-1, 1);
glVertex2f(1, 1);
glVertex2f(1, -1);
glEnd();
// SwapBuffers 或者 glFlush

文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jacke121/article/details/70257387

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。