2010-08-04 136 views
0

我想用着色器程序转换顶点,但是我无法理解结果。 我准备了投影,视图(反式)和模型(反式)矩阵:你如何执行OpenGL ES 2.0着色器矩阵乘法?

首先,我有一个vertex着色器函数:viewproj * position。在一个Objective-C程序中,我从一个翻译和投影矩阵乘以身份开始,然后统一到viewproj。从几何角度来看,我可以看到几何对全球翻译的反应。

我想分开统一矩阵并在shader中进行全部操作。我统一了一个proj,view(trans),model(trans),并尝试着色器:proj view model position。但是sems没有很好地转换(out representation?)然后我尝试简单地模拟我的第一个转换。我均匀PROJ以及查看,在着色器我尝试与(视图 PROJ),以便完成相同的操作,但is'nt视图中C.

我使用中所描述的矩阵进行 PROJ 位置第0-4列是第一列。并与http://www.songho.ca/opengl/gl_transform.html#modelview

定义的结构现在我不知道我在想什么,希望有一个简单的答案。如果有人有线索,谢谢。

pd:我可以调试这个着色器吗? (的XCode +的iPhoneOS模拟器)

回答

2

如果有任何人有线索,谢谢。在OpenGL着色器

矩阵乘法是这样的:

gl_Position = projectionMat*modelViewMat*vec4(inPos, 1.0); 

INPOS是VEC3顶点位置。

如果你想要更多的基质(DirectX的风格),那么你就必须使用

gl_Position = projectionMat*viewMat*worldMat*vec4(inPos, 1.0); 

理想矩阵应该从OpenGL的提取和投影不应该是恒等变换。如果您需要2D图形,请使用gluOrtho2D。

此外,您可能会意外转置或忘记将矩阵加载到制服中时进行转置。无论如何,如果你在着色器方面遇到问题,首先编写一个应用程序,它将渲染没有着色器的东西,然后从OpenGL写入着色器和加载转换矩阵,然后将它转换为自定义矩阵计算例程(如果需要的话)。

根据OpenGL版本的不同,可能会有ftransform()GLSL函数可用,这将进一步简化工作。

0

我开始通过翻译和投影矩阵multiplicated身份,然后穿制服到viewproj

它identity->译本> viewproj->投影,就像你说的:

凸出视图模型*位置

你很难阅读。你可以发布一些代码吗?