11

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

是否可以使用(在着色器代码中)我为 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 变量与流映射对话框中的名称不同,但是当我尝试使用时它具有相同的名称它,所以没关系。):使用内置变量绕过流映射

4

2 回答 2

0

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

于 2013-08-10T21:47:42.177 回答
-1
#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 的有效解决方案

于 2017-05-03T20:01:09.620 回答