【发布时间】:2014-12-21 14:26:11
【问题描述】:
这就是它应该的样子。它使用与 DX11 和 OpenGL 相同的顶点/uv 坐标。这个场景是在 DirectX10 中渲染的。
这就是它在 DirectX11 和 OpenGL 中的样子。
我不知道这怎么会发生。我在 DX10 和 DX11 上使用相同的代码,而且它们都处理非常相似的事情。您是否知道问题可能是什么以及如何解决? 如果需要,我可以发送代码。
也使用另一种纹理。
将纹理的透明部分更改为红色。
片段着色器 GLSL
#version 330 core
in vec2 UV;
in vec3 Color;
uniform sampler2D Diffuse;
void main()
{
//color = texture2D( Diffuse, UV ).rgb;
gl_FragColor = texture2D( Diffuse, UV );
//gl_FragColor = vec4(Color,1);
}
顶点着色器 GLSL
#version 330 core
layout(location = 0) in vec3 vertexPosition;
layout(location = 1) in vec2 vertexUV;
layout(location = 2) in vec3 vertexColor;
layout(location = 3) in vec3 vertexNormal;
uniform mat4 Projection;
uniform mat4 View;
uniform mat4 World;
out vec2 UV;
out vec3 Color;
void main()
{
mat4 MVP = Projection * View * World;
gl_Position = MVP * vec4(vertexPosition,1);
UV = vertexUV;
Color = vertexColor;
}
【问题讨论】:
-
为了以后参考,写GLSL 3.30核心着色器时,不要使用
gl_FragColor或texture2D (...);那些已被弃用。很多 GLSL 编译器会让你继续使用它们,但它们不是必须的。您应该使用用户定义的片段输出(例如out vec4 frag_color)和texture (...)(这是一个重载函数,它采用从 GLSL 1.30 开始的所有采样器类型)。
标签: opengl textures directx-11 directx-10