显示问题
OpenGL画点,为什么点的坐标值超出[-1,1]范围就显示不了???
如何使用GLSL
其他显示问题
一、显示问题
1. OpenGL画点,为什么点的坐标值超出[-1,1]范围就显示不了???
https://ask.csdn.net/questions/259655
1.OpenGL工作在一个叫做NDC(Normalized Device Coordinates)的坐标系统下,在这个坐标系统中,x、y和z的值全部都坐落在[-1, +1]范围内,超出这个范围的点会被OpenGL忽略。因为我们直接使用OpenGL的NDC坐标系统,所以顶点坐标的值在-1到+1之间。
2.设置投影模式,这样坐标就可以是超过-1到1了。Opengl的坐标是可以无限大的,通过设定视场大小来确定显示的范围,只有在视场范围内的坐标才能被看见,在视场之外的看不到。视场是可以用函数设定的。具体你要看看投影模式怎么回事。我很久没弄opengl了,具体也不太了解。
2. 如何使用GLSL
三大着色器:顶点、几何、片段
boid.vert.glsl
1 | #version 330 |
使用in 关键字,在顶点着色器中声明所有的输入顶点属性。GLSL有一个向量数据类型,包含1到4个float分量。由于每个顶点都有一个3D坐标,我们就创建一个vec3输入变量aPos。
为了设置顶点着色器的输出,我们必须把位置数据赋值给预定义的gl_Position,它在幕后的vec4.
在main函数最后,我们将gl_Position设置的值会成为该顶点着色器的输出
boid.geom.glsl
1 | #version 330 |
boid.frag.glsl
1 | #version 330 |
3.其他显示问题
glDrawElements
原型:
1 | void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid *indices); |
mode:接受的值和在glBegin()中接受的值一样,可以是GL_POLYGON、GL_TRIANGLES、GL_TRIANGLE_STRIP、GL_LINE_STRIP等。
count:组合几何图形的元素的个数,一般是点的个数。
type:indeices数组的数据类型,既然是索引,一般是整型的。
indices:索引数组