标签: rendermonkey

RenderMonkey在GLSL的TEXCOORD流映射中有错误吗?

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

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

背景:

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

我已经尝试了.obj和.3ds文件(从blender导出),并且在检查wavefront .obj文件时,所有纹理坐标信息都存在,以及顶点位置和法线.

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

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

#version 330 compatibility
out vec2 vTexCoord;
Run Code Online (Sandbox Code Playgroud)

并且,在主要功能:

vTexCoord = vec2(gl_MultiTexCoord0);
Run Code Online (Sandbox Code Playgroud)

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

这是一个工作解决方案的图片,但内置变量(是的,图片中注释的texcoord变量与流映射对话框中的名称不同,但在我尝试使用时它具有相同的名称它,所以没关系.): 使用内置变量绕过流映射

opengl mapping glsl stream rendermonkey

10
推荐指数
1
解决办法
1182
查看次数

HLSL无效ps_2_0输入语义POSITION0

我正在尝试在RenderMonkey中为Dx9编写一个phong着色器效果.

我在像素着色器中遇到编译错误

*"无效的ps_2_0输入语义'POSITION0'"*

我不知道如何修复它,虽然我知道它必须与VS_OUTPUT中的POSITION0语义有关.

我尝试将VS_OUTPUT的Pos语义更改为TEXCOORD0,但系统会报告

顶点着色器必须最低限度地写入POSITION的所有四个组件

着色器在下面提供.有什么建议?

这是我的顶点着色器:

struct VS_INPUT 
{
   float4 Pos : POSITION0;
   float3 Normal : NORMAL0;
};

struct VS_OUTPUT 
{
   float4 Pos : POSITION0;
   float3 Normal : TEXCOORD0;
};

VS_OUTPUT vs_main( VS_INPUT Input )
{
   VS_OUTPUT Output;

   Output.Pos     = Input.Pos;
   Output.Normal  = Input.Normal;

   return Output;  
}
Run Code Online (Sandbox Code Playgroud)

和我的像素着色器:

    float4x4 matViewProjection;

// light source
float4 lightPos;
float4 Ambient;
float4 Diffuse;
float4 Specular;

// material reflection properties
float4 Ke;
float4 Ka;
float4 Kd;
float4 Ks;
float  nSpecular;

// eye
float4 …
Run Code Online (Sandbox Code Playgroud)

directx hlsl directx-9 rendermonkey

3
推荐指数
1
解决办法
6461
查看次数

标签 统计

rendermonkey ×2

directx ×1

directx-9 ×1

glsl ×1

hlsl ×1

mapping ×1

opengl ×1

stream ×1