2014-05-18 106 views
1

所以我有一个在对象上绘制组的opengl程序。当我绘制这些对象时,我想要使用我的着色器程序是一个顶点着色器和一个顶点着色器。基本上,我的目标是根据纹理计算来调整顶点着色器内模型的高度。就是这样。否则,我想要使用裸OPGL(无着色器)绘制对象。我不想实现片段着色器。GLSL - 一个什么都不做的顶点着色器?

但是我一直无法找到如何制作它,所以我只能使用顶点着色器而没有其他的着色器程序。忘记了调整自己的模型的高度的一部分,所以到目前为止,我有:

gl_FrontColor = gl_Color; 
gl_Position = modelViewProjectionMain * Position; 

它把对象到正确的位置还好,但是当我做到这一点我松纹理坐标,也光照信息(法线丢失)。我错过了什么?我该如何编写一个“什么都不做”的顶点着色器?也就是说,当使用法线绘制纹理.obj时,您可以关闭并开启顶点着色器,并且没有区别?

+0

你的*“什么都不做”*顶点着色器实际上是'gl_Position = ftransform();'。当然这是不赞成的,但是你的问题让我相信这并不重要。 –

回答

2

您无法使用部分实现编写着色器。您可以在着色器中执行所有操作,也可以完全依赖于给定对象的固定功能(不建议使用)。

你可以做的是这样的:

glUseProgram(handle) 
// draw objects with shader 
glUseProgram(0) 
// draw objects with fixed functionality 
1

为了扩大对阿布舍克班萨尔,你想要做什么将是很好,但实际上不可能完全的正确答案一点点。你将不得不编写你自己的顶点和片段着色器。

从您的文章中,“裸露的OpenGL”指的是OpenGL 1和2中的固定功能管线,其中包括内置照明和纹理。 OpenGL中的着色器完全替代了固定功能管线,而不是扩展它。而在OpenGL 3+中,旧功能已被删除,所以现在它们是强制性的。

好消息是顶点/片段着色器执行与原始OpenGL光照和纹理相同的功能很容易找到,并且易于根据您的目的进行修改。由Rost,Licea-Kane等开发的OpenGL着色语言书有一整章“模拟OpenGL固定功能”或者您可以获得第5版OpenGL SuperBible书和代码(不是第6版)的副本,它附带一堆有用的预定义着色器。或者,如果你更喜欢网上资源的书籍,有NeHe教程。

写入着色器起初看起来有点令人生畏,但它比您想象的要容易,而且额外的灵活性非常值得。

相关问题