RenderMonkey 在 GLSL 的 TEXCOORD 流映射中是不是存在错误?

Posted

技术标签:

【中文标题】RenderMonkey 在 GLSL 的 TEXCOORD 流映射中是不是存在错误?【英文标题】:Does RenderMonkey have a bug in TEXCOORD stream mapping for GLSL?RenderMonkey 在 GLSL 的 TEXCOORD 流映射中是否存在错误? 【发布时间】:2011-10-06 09:57:42 【问题描述】:

为了清楚起见,我从我的问题开始:

是否可以(在着色器代码中)使用我在 RenderMonkey 1.82 的 (OpenGL) 流映射中为 TEXCOORD 用法 设置的 自定义属性名称 或我必须使用 gl_MultiTexCoord0 吗? (该问题可能也适用于 NORMAL 用法,即自定义名称或 gl_Normal

背景:

使用 RenderMonkey 1.82 版。 我已经成功地使用流映射来映射一般顶点属性“位置”(也许是“正常”),但纹理坐标似乎没有正确转发。 对于着色器代码,我使用#version 330 和 GLSL 中的“in”限定符,这应该没问题,因为 RM 不编译着色器本身(OpenGL 驱动程序会)。

我已经尝试过 .obj 和 .3ds 文件(从搅拌机导出),当检查波前 .obj 文件时,所有纹理坐标信息以及顶点位置和法线都在那里。

如果不可能,则流映射被破坏,并且在流映射编辑器中命名变量没有意义(除了顶点位置流,它可以工作),因为必须使用内置变量无论如何。

更新: 如果使用已弃用的内置变量,则必须在着色器中使用兼容模式,例如

#version 330 compatibility
out vec2 vTexCoord;

并且,在主函数中:

vTexCoord = vec2(gl_MultiTexCoord0);

(现在我也不确定法线的流映射。一旦纹理坐标正常工作,我就遇到了正常问题,不得不恢复为 gl_Normal。)

这是一个工作解决方案的图片,但带有内置变量(是的,图片中注释的 texcoord 变量与流映射对话框中的名称不同,但是当我使用它时它具有相同的名称试过用了,没问题):

【问题讨论】:

我没有你的问题的答案,但我可以建议一个多平台的替代方案,ShaderMaker:cg.in.tu-clausthal.de/teaching/shader_maker/index.shtml 感谢您的建议。我还没有评估过ShaderMaker,但它似乎是针对固定管道的。显然还有另一个名为 Lumina 的项目也可能是一个替代方案。 Render Monkey 可以完全支持 3.30 着色器吗?我认为它仅适用于 OpenGL 2.1 功能... RM 不关心您使用哪个着色器版本。我在文中给出了一种可行的方法,但是关于流映射是否被破坏的问题仍未得到解答。 你能把实际的着色器贴出来,或者把效果上传到我可以下载的地方看看吗?我有时会使用 RM,尽管它不再受支持(类似于其他着色器设计程序 - 它们并不真正适合今天在所有 MRT 等的图形管道中完成的事情)。 【参考方案1】:

您可以尝试使用通用顶点的属性,请参阅http://open.gl,这是一个很棒的教程;) (但我认为这意味着您必须重写代码以手动处理转换......)

【讨论】:

【参考方案2】:
#version 330

layout(location = 0) in vec3 bla_bla_bla_Vertex;
layout(location = 2) in vec3 bla_bla_bla_Normal;
layout(location = 8) in vec3 bla_bla_bla_TexCoord0;

这是 RM 1.82 的有效解决方案

【讨论】:

以上是关于RenderMonkey 在 GLSL 的 TEXCOORD 流映射中是不是存在错误?的主要内容,如果未能解决你的问题,请参考以下文章

GLSL学习_高斯滤波

使用 GLSL 在两个不同的通道上进行 Alpha 混合纹理

计算 3D 切线空间

一步一步学RenderMonkey

FX Composer VS RenderMonkey

RenderMonkey基本使用方法