它应该是这样的。它使用与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);
}
Vertex Shader 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;
}
答案 0 :(得分:1)
很快就说,看起来你正在使用背面剔除(这很好),而你的模型的另一面是错误的啰嗦。您可以通过关闭面部剔除来确保这是问题(OpenGL:glDisable(GL_CULL_FACE))。
真正的校正是(如果这是问题)要正确缠绕面,通常是逆时针。这取决于您获得此模型的位置。如果您自己生成它,请在模型生成例程中正确缠绕。通常,由3D建模软件创建的模型文件具有正确的面部缠绕。
答案 1 :(得分:0)
这只是猜测,但是你告诉系统要绘制的正确多边形数量吗?像glBufferData()
这样的调用采用数据的字节大小,而不是顶点或多边形的数量。 (也许他们应该将参数命名为numBytes
而不是size
?)此外,大小必须包含所有数据的大小。如果你有颜色,法线,纹理坐标和顶点都是交错的,那么它需要包含所有这些的大小。
glDrawElements()
和其他东西将顶点的数量作为它们的大小参数,这使得更加困惑。该参数名为count
,但它的顶点数并不明显,而不是多边形数。
答案 2 :(得分:0)
我发现了错误。
原因是我忘了将Texture SamplerState设置为Wrap / Repeat。 它设置为钳位,因此uv坐标最大为1。
答案 3 :(得分:-1)
您可以尝试一些事项:
启用深度测试?看来你的内部面是来自“其他”的多边形。在靠近视点的多边形上渲染边。如果禁用深度测试,则可能发生这种情况启用它以防万一。
启用了照明?如果是这样,请将其关闭。一些白色闪光似乎进入旋转图像。可能是因为错误的法线 ...
HTH